Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"cells": [
{
Expand Down Expand Up @@ -193,7 +193,7 @@
"Xva, Bva = make_split(400, SEED + 2)\n",
"print(\"train:\", tuple(Xtr.shape), \"| val:\", tuple(Xva.shape),\n",
" \"| objets GT val:\", sum(len(b) for b in Bva))\n",
"print(\"train = %d objets, val = %d objets — les memes comptes que 4.2c\"\n",
"print(\"train = %d objets, val = %d objets — les memes comptes que 4.4\"\n",
" % (sum(len(b) for b in Btr), sum(len(b) for b in Bva)))"
]
},
Expand Down Expand Up @@ -1012,7 +1012,7 @@
"\n",
"\n",
"def nms(boxes, scores, thr=0.45):\n",
" \"\"\"NMS gloutonne : identique a 4.2c, pour que le harnais soit partage.\"\"\"\n",
" \"\"\"NMS gloutonne : identique a 4.4, pour que le harnais soit partage.\"\"\"\n",
" keep, suppressed = [], torch.zeros(len(boxes), dtype=torch.bool)\n",
" for i in scores.argsort(descending=True).tolist():\n",
" if suppressed[i]:\n",
Expand Down Expand Up @@ -1132,7 +1132,7 @@
"\n",
"\n",
"def ap_voc(tp_s, fp_s, ngt):\n",
" \"\"\"Identique a 4.2c : VOC07 11-point + VOC10 all-point.\"\"\"\n",
" \"\"\"Identique a 4.4 : VOC07 11-point + VOC10 all-point.\"\"\"\n",
" flags = np.array([1] * len(tp_s) + [0] * len(fp_s), dtype=np.float64)\n",
" scores = np.array(tp_s + fp_s, dtype=np.float64)\n",
" order = np.argsort(-scores)\n",
Expand Down Expand Up @@ -1229,7 +1229,7 @@
}
],
"source": [
"# chiffres committes dans les sorties de 4.2c (relus, non recalcules)\n",
"# chiffres committes dans les sorties de 4.4 (relus, non recalcules)\n",
"A1_MAP07, A1_MAP10 = 0.853, 0.914\n",
"A1_GRID_SQ07, A1_GRID_SQ10 = 0.864, 0.926\n",
"A1_ANC_FULL = 24 * 24 * 9 # 3 tailles x 3 ratios\n",
Expand All @@ -1238,11 +1238,11 @@
"print(\"=\" * 74)\n",
"print(\"%-30s %10s %10s %10s\" % (\"\", \"mAP07\", \"mAP10\", \"prior geometrique\"))\n",
"print(\"-\" * 74)\n",
"print(\"%-30s %10.3f %10.3f %10s\" % (\"4.2c anchor-based (grille 3x3)\", A1_MAP07, A1_MAP10,\n",
"print(\"%-30s %10.3f %10.3f %10s\" % (\"4.4 anchor-based (grille 3x3)\", A1_MAP07, A1_MAP10,\n",
" f\"{A1_ANC_FULL} anchors\"))\n",
"print(\"%-30s %10.3f %10.3f %10s\" % (\"4.2c anchor-based (grille carree)\", A1_GRID_SQ07,\n",
"print(\"%-30s %10.3f %10.3f %10s\" % (\"4.4 anchor-based (grille carree)\", A1_GRID_SQ07,\n",
" A1_GRID_SQ10, f\"{A1_ANC_SQ} anchors\"))\n",
"print(\"%-30s %10.3f %10.3f %10s\" % (\"4.2d anchor-free (CenterNet-like)\", ap07, ap10, \"0 anchor\"))\n",
"print(\"%-30s %10.3f %10.3f %10s\" % (\"4.4b anchor-free (CenterNet-like)\", ap07, ap10, \"0 anchor\"))\n",
"print(\"=\" * 74)\n",
"print(\"ecart anchor-free - anchor-based (grille 3x3) : %+.1f pts de mAP07, %+.1f pts de mAP10\"\n",
" % (100 * (ap07 - A1_MAP07), 100 * (ap10 - A1_MAP10)))\n",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"cells": [
{
Expand Down Expand Up @@ -915,7 +915,7 @@
}
],
"source": [
"print(\"Exercice 3 à compléter — reprendre AnchorNet du 4.2c et remplacer la BCE par focal_loss\")"
"print(\"Exercice 3 à compléter — reprendre AnchorNet du 4.4 et remplacer la BCE par focal_loss\")"
]
},
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"cells": [
{
Expand Down Expand Up @@ -113,7 +113,7 @@
"print(\"device:\", DEVICE.type,\n",
" \"| torch\", torch.__version__, \"| torchvision\", torchvision.__version__)\n",
"\n",
"IMG = 96 # cote de l'image : identique au 4.2c"
"IMG = 96 # cote de l'image : identique au 4.4"
]
},
{
Expand Down Expand Up @@ -435,7 +435,7 @@
],
"source": [
"def build(name):\n",
" \"\"\"Usine uniforme : tete 2 classes, backbone ImageNet, seuils du 4.2c,\n",
" \"\"\"Usine uniforme : tete 2 classes, backbone ImageNet, seuils du 4.4,\n",
" redimensionnement d'entree identique (320) pour les trois familles.\"\"\"\n",
" if name == \"faster-rcnn\":\n",
" return fasterrcnn_mobilenet_v3_large_320_fpn(\n",
Expand Down Expand Up @@ -545,7 +545,7 @@
" return time.time() - t0\n",
"\n",
"\n",
"print(\"budget commun :\", N_TRAIN, \"images x\", EPOCHS, \"epoques (le 4.2c : 2000 x 12)\")"
"print(\"budget commun :\", N_TRAIN, \"images x\", EPOCHS, \"epoques (le 4.4 : 2000 x 12)\")"
]
},
{
Expand Down Expand Up @@ -851,7 +851,7 @@
"\n",
"\n",
"def collect_pr_tv(model, X, B, iou_thr=0.5):\n",
" \"\"\"Flags TP/FP des detections torchvision, meme matching glouton que 4.2c.\"\"\"\n",
" \"\"\"Flags TP/FP des detections torchvision, meme matching glouton que 4.4.\"\"\"\n",
" tp_s, fp_s, ngt = [], [], 0\n",
" model.eval()\n",
" with torch.no_grad():\n",
Expand Down Expand Up @@ -1036,7 +1036,7 @@
"\n",
"\n",
"TRAIN_T = {\"faster-rcnn\": T_FRCNN, \"retinanet\": T_RETINA, \"fcos\": T_FCOS}\n",
"rows = [(\"4.2c AnchorNet (from scratch)\", 74_717, 0.853, 0.914, None,\n",
"rows = [(\"4.4 AnchorNet (from scratch)\", 74_717, 0.853, 0.914, None,\n",
" \"2000 img x 12 ep en 79 s\")]\n",
"for name in MODELS:\n",
" rows.append((name, sum(p.numel() for p in MODELS[name].parameters()),\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
"print(\"device:\", \"cuda\" if DEVICE == 0 else \"cpu\",\n",
" \"| torch\", torch.__version__, \"| ultralytics\", ultralytics.__version__)\n",
"\n",
"IMG = 96 # cote de l'image : identique au 4.2c (multiple de 32, impose par imgsz)"
"IMG = 96 # cote de l'image : identique au 4.4 (multiple de 32, impose par imgsz)"
]
},
{
Expand Down Expand Up @@ -393,8 +393,8 @@
],
"source": [
"N_TRAIN, EPOCHS = 1000, 6\n",
"print(\"budget commun aux notebooks 4.2f et 4.2g :\",\n",
" N_TRAIN, \"images x\", EPOCHS, \"epoques (le 4.2c : 2000 x 12)\")\n",
"print(\"budget commun aux notebooks 4.5 et 4.5b :\",\n",
" N_TRAIN, \"images x\", EPOCHS, \"epoques (le 4.4 : 2000 x 12)\")\n",
"\n",
"from ultralytics.utils import LOGGER\n",
"LOGGER.setLevel(\"WARNING\") # tue les barres de progression et les chemins du scan ; les chiffres utiles sont captures par nos propres prints\n",
Expand Down Expand Up @@ -639,7 +639,7 @@
"\n",
"\n",
"def predict_boxes(model, idx):\n",
" \"\"\"Boites (N,4) xyxy + scores d'une image de validation, seuils du 4.2c.\"\"\"\n",
" \"\"\"Boites (N,4) xyxy + scores d'une image de validation, seuils du 4.4.\"\"\"\n",
" r = model.predict(str(DS / \"images\" / \"val\" / f\"{idx:05d}.png\"),\n",
" conf=0.5, iou=0.45, imgsz=IMG, verbose=False,\n",
" device=DEVICE)[0].boxes\n",
Expand All @@ -648,7 +648,7 @@
"\n",
"\n",
"def collect_pr_yolo(model, B, iou_thr=0.5):\n",
" \"\"\"Flags TP/FP des detections YOLO, meme matching glouton que 4.2c.\"\"\"\n",
" \"\"\"Flags TP/FP des detections YOLO, meme matching glouton que 4.4.\"\"\"\n",
" tp_s, fp_s, ngt = [], [], 0\n",
" for i in range(len(B)):\n",
" dets, dscores = predict_boxes(model, i)\n",
Expand Down Expand Up @@ -844,21 +844,21 @@
" return (time.time() - t0) * 1000.0 / n\n",
"\n",
"\n",
"ROWS_B = [ # bloc A puis bloc B -- nombres 4.2c/4.2f committes, YOLO mesures ci-dessus\n",
" (\"4.2c AnchorNet (from scratch)\", 74_717, None, 0.853, 0.914, None,\n",
"ROWS_B = [ # bloc A puis bloc B -- nombres 4.4/4.5 committes, YOLO mesures ci-dessus\n",
" (\"4.4 AnchorNet (from scratch)\", 74_717, None, 0.853, 0.914, None,\n",
" \"2000 x 12 en 79 s\", 404),\n",
" (\"4.2f faster-rcnn\", 18_930_229, None, 0.909, 0.997, 17.7,\n",
" (\"4.5 faster-rcnn\", 18_930_229, None, 0.909, 0.997, 17.7,\n",
" \"1000 x 6 en 73 s\", 297),\n",
" (\"4.2f retinanet\", 32_168_694, None, 0.997, 1.000, 29.0,\n",
" (\"4.5 retinanet\", 32_168_694, None, 0.997, 1.000, 29.0,\n",
" \"1000 x 6 en 109 s\", 297),\n",
" (\"4.2f fcos\", 32_064_455, None, 0.909, 0.998, 36.3,\n",
" (\"4.5 fcos\", 32_064_455, None, 0.909, 0.998, 36.3,\n",
" \"1000 x 6 en 107 s\", 297),\n",
"]\n",
"for name, model, params, flops, t in ((\"yolo11n\", MODEL_N, params_n, flops_n, T_N),\n",
" (\"yolo11s\", MODEL_S, params_s, flops_s, T_S),\n",
" (\"yolov5nu\", MODEL_V5N, params_v5n, flops_v5n, T_V5N),\n",
" (\"yolov8s\", MODEL_V8S, params_v8s, flops_v8s, T_V8S)):\n",
" ROWS_B.append((f\"4.2g {name}\", params, flops,\n",
" ROWS_B.append((f\"4.5b {name}\", params, flops,\n",
" RESULTS[name][\"ap07\"], RESULTS[name][\"ap10\"],\n",
" latency_ms_yolo(model),\n",
" f\"{N_TRAIN} x {EPOCHS} en {t:.0f} s\", 267))\n",
Expand Down Expand Up @@ -935,7 +935,7 @@
" \"\"\"Precision / rappel / nb de detections a un seuil de confiance donne.\n",
"\n",
" # Etape 1 : predict_boxes avec le parametre conf voulu (les seuils se passent\n",
" # a l'appel ici, pas a la construction comme en 4.2f)\n",
" # a l'appel ici, pas a la construction comme en 4.5)\n",
" # Etape 2 : meme matching glouton, retour (precision, rappel, n_detections)\n",
" \"\"\"\n",
" return None # TODO etudiant\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
"print(\"device:\", \"cuda\" if DEVICE == 0 else \"cpu\",\n",
" \"| torch\", torch.__version__, \"| ultralytics\", ultralytics.__version__)\n",
"\n",
"IMG = 96 # terrain meme cote qu'en 4.2c/4.2f/4.2g (multiple de 32)"
"IMG = 96 # terrain meme cote qu'en 4.4/4.5/4.5b (multiple de 32)"
]
},
{
Expand Down Expand Up @@ -313,7 +313,7 @@
],
"source": [
"N_TRAIN, EPOCHS = 1000, 6\n",
"print(\"budget commun 4.2f / 4.2g / 4.2h :\", N_TRAIN, \"images x\", EPOCHS, \"epoques\")\n",
"print(\"budget commun 4.5 / 4.5b / 4.5c :\", N_TRAIN, \"images x\", EPOCHS, \"epoques\")\n",
"\n",
"from ultralytics.utils import LOGGER\n",
"LOGGER.setLevel(\"ERROR\")\n",
Expand Down Expand Up @@ -402,7 +402,7 @@
"\n",
"\n",
"def predict_boxes(model, idx):\n",
" \"\"\"Boites (N,4) xyxy + scores d'une image, seuils du 4.2c.\"\"\"\n",
" \"\"\"Boites (N,4) xyxy + scores d'une image, seuils du 4.4.\"\"\"\n",
" r = model.predict(str(DS / \"images\" / \"val\" / f\"{idx:05d}.png\"),\n",
" conf=0.5, iou=0.45, imgsz=IMG, verbose=False,\n",
" device=DEVICE)[0].boxes\n",
Expand Down Expand Up @@ -573,7 +573,7 @@
" return out\n",
"\n",
"\n",
"# Mesure mAP50-95 COCO integre sur le split val du 4.2h\n",
"# Mesure mAP50-95 COCO integre sur le split val du 4.5c\n",
"map_coco = ap_coco_per_image(MODEL_5N, [b.tolist() for b in Bva])\n",
"print(\"mAP@0.5:0.95 (COCO integre, 10 IoU) -- yolov5nu :\")\n",
"for thr in np.linspace(0.50, 0.95, 10):\n",
Expand Down Expand Up @@ -662,11 +662,11 @@
"\n",
"lat_5n = latency_ms_yolo(MODEL_5N)\n",
"\n",
"# valeurs committées dans le 4.2g -- source: tableau bloc B l.723-724\n",
"# valeurs committées dans le 4.5b -- source: tableau bloc B l.723-724\n",
"ROWS_45H = [\n",
" (\"4.2g yolo11n\", 2_590_035, 0.1, 0.909, 0.989, 10.3, f\"{N_TRAIN} x {EPOCHS} en 57 s\"),\n",
" (\"4.2g yolo11s\", 9_428_179, 0.5, 0.909, 0.993, 10.8, f\"{N_TRAIN} x {EPOCHS} en 54 s\"),\n",
" (\"4.2h yolov5nu\", params_5n, flops_5n, ap07, ap10, lat_5n, f\"{N_TRAIN} x {EPOCHS} en {T_5N:.0f} s\"),\n",
" (\"4.5b yolo11n\", 2_590_035, 0.1, 0.909, 0.989, 10.3, f\"{N_TRAIN} x {EPOCHS} en 57 s\"),\n",
" (\"4.5b yolo11s\", 9_428_179, 0.5, 0.909, 0.993, 10.8, f\"{N_TRAIN} x {EPOCHS} en 54 s\"),\n",
" (\"4.5c yolov5nu\", params_5n, flops_5n, ap07, ap10, lat_5n, f\"{N_TRAIN} x {EPOCHS} en {T_5N:.0f} s\"),\n",
"]\n",
"print(f\"\\n{'modele':12s} {'params':>11s} {'GFLOPs':>7s} {'VOC07':>6s} {'VOC10':>6s} {'ms/img':>7s} budget\")\n",
"for r in ROWS_45H:\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
"print(\"device:\", \"cuda\" if DEVICE == 0 else \"cpu\",\n",
" \"| torch\", torch.__version__, \"| libreyolo\", _pkg_version(\"libreyolo\"))\n",
"\n",
"IMG = 96 # cote de l'image : identique au 4.2c (multiple de 32, impose par imgsz)"
"IMG = 96 # cote de l'image : identique au 4.4 (multiple de 32, impose par imgsz)"
]
},
{
Expand Down Expand Up @@ -802,8 +802,8 @@
],
"source": [
"N_TRAIN, EPOCHS = 1000, 6\n",
"print(\"budget commun aux carnets 4.2f/4.2g/4.2j :\",\n",
" N_TRAIN, \"images x\", EPOCHS, \"epoques (le 4.2c : 2000 x 12)\")\n",
"print(\"budget commun aux carnets 4.5/4.5b/4.5d :\",\n",
" N_TRAIN, \"images x\", EPOCHS, \"epoques (le 4.4 : 2000 x 12)\")\n",
"\n",
"\n",
"def train_ly(weights, run, nb_classes=1):\n",
Expand Down Expand Up @@ -1288,7 +1288,7 @@
"\n",
"\n",
"def predict_boxes_ly(model, idx):\n",
" \"\"\"Boites (N,4) xyxy + scores d'une image de validation, seuils du 4.2c.\"\"\"\n",
" \"\"\"Boites (N,4) xyxy + scores d'une image de validation, seuils du 4.4.\"\"\"\n",
" r = model.predict(str(DS / \"images\" / \"val\" / f\"{idx:05d}.png\"),\n",
" conf=0.5, iou=0.45, imgsz=IMG, device=DEVICE)\n",
" res = r[0] if isinstance(r, list) else r\n",
Expand All @@ -1297,7 +1297,7 @@
"\n",
"\n",
"def collect_pr_ly(model, B, iou_thr=0.5):\n",
" \"\"\"Flags TP/FP des detections, meme matching glouton que 4.2c/4.2g.\"\"\"\n",
" \"\"\"Flags TP/FP des detections, meme matching glouton que 4.4/4.5b.\"\"\"\n",
" tp_s, fp_s, ngt = [], [], 0\n",
" for i in range(len(B)):\n",
" dets, dscores = predict_boxes_ly(model, i)\n",
Expand Down Expand Up @@ -1512,27 +1512,27 @@
" if ln.strip() and not ln.strip().startswith(\"#\"))\n",
"print(\"lignes effectives de ce carnet :\", LOC_42J)\n",
"\n",
"ROWS = [ # bloc A puis bloc B -- nombres 4.2c/4.2f/4.2g committes, 4.2j mesures ci-dessus\n",
" (\"4.2c AnchorNet (from scratch)\", 74_717, None, 0.853, 0.914, None,\n",
"ROWS = [ # bloc A puis bloc B -- nombres 4.4/4.5/4.5b committes, 4.5d mesures ci-dessus\n",
" (\"4.4 AnchorNet (from scratch)\", 74_717, None, 0.853, 0.914, None,\n",
" \"2000 x 12 en 79 s\", 404, \"n.r\", \"aucune (notre code)\"),\n",
" (\"4.2f faster-rcnn\", 18_930_229, None, 0.909, 0.997, 17.7,\n",
" (\"4.5 faster-rcnn\", 18_930_229, None, 0.909, 0.997, 17.7,\n",
" \"1000 x 6 en 73 s\", 297, \"BSD-3\", \"BSD-3\"),\n",
" (\"4.2f retinanet\", 32_168_694, None, 0.997, 1.000, 29.0,\n",
" (\"4.5 retinanet\", 32_168_694, None, 0.997, 1.000, 29.0,\n",
" \"1000 x 6 en 109 s\", 297, \"BSD-3\", \"BSD-3\"),\n",
" (\"4.2f fcos\", 32_064_455, None, 0.909, 0.998, 36.3,\n",
" (\"4.5 fcos\", 32_064_455, None, 0.909, 0.998, 36.3,\n",
" \"1000 x 6 en 107 s\", 297, \"BSD-3\", \"BSD-3\"),\n",
" (\"4.2g yolo11n\", 2_590_035, 0.1, 0.909, 0.989, 20.6,\n",
" (\"4.5b yolo11n\", 2_590_035, 0.1, 0.909, 0.989, 20.6,\n",
" \"1000 x 6 en 111 s\", 267, \"AGPL-3.0\", \"AGPL-3.0\"),\n",
" (\"4.2g yolo11s\", 9_428_179, 0.5, 0.909, 0.995, 23.0,\n",
" (\"4.5b yolo11s\", 9_428_179, 0.5, 0.909, 0.995, 23.0,\n",
" \"1000 x 6 en 92 s\", 267, \"AGPL-3.0\", \"AGPL-3.0\"),\n",
" (\"4.2g yolov5nu\", 2_508_659, 0.2, 0.909, 0.986, 18.5,\n",
" (\"4.5b yolov5nu\", 2_508_659, 0.2, 0.909, 0.986, 18.5,\n",
" \"1000 x 6 en 93 s\", 267, \"AGPL-3.0\", \"GPL-3.0\"),\n",
" (\"4.2g yolov8s\", 11_135_987, 0.6, 0.909, 0.996, 18.1,\n",
" (\"4.5b yolov8s\", 11_135_987, 0.6, 0.909, 0.996, 18.1,\n",
" \"1000 x 6 en 90 s\", 267, \"AGPL-3.0\", \"AGPL-3.0\"),\n",
"]\n",
"for name, model, info, t, ck in ((\"yolov9t\", MODEL_Y9T, info_y9t, T_Y9T, \"LibreYOLO9t\"),\n",
" (\"yolov9t-e2e\", MODEL_E2E, info_e2e, T_E2E, \"LibreYOLO9E2ET\")):\n",
" ROWS.append((f\"4.2j {name}\", info[\"parameters\"], GFLOPS[name],\n",
" ROWS.append((f\"4.5d {name}\", info[\"parameters\"], GFLOPS[name],\n",
" RESULTS[name][\"ap07\"], RESULTS[name][\"ap10\"],\n",
" latency_ms_ly(model),\n",
" f\"{N_TRAIN} x {EPOCHS} en {t:.0f} s\", LOC_42J,\n",
Expand Down
Loading
Loading