From c60acf93e459d4bf1b6fcfd81a1c38ee55fd5e29 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Sun, 3 Aug 2025 00:00:32 +0200 Subject: [PATCH 1/6] add yolo v8 models --- tools/convert-models.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/convert-models.py b/tools/convert-models.py index 639c9fd2..4a635144 100644 --- a/tools/convert-models.py +++ b/tools/convert-models.py @@ -110,6 +110,11 @@ def blob_exist(bucket_name, blob_name): 'fasterrcnn_resnet50_v2': 'https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_v2_coco-dd69338a.pth', 'fasterrcnn_mobilenet_v3_large': 'https://download.pytorch.org/models/fasterrcnn_mobilenet_v3_large_fpn-fb6a3cc7.pth', 'fasterrcnn_mobilenet_v3_large_320': 'https://download.pytorch.org/models/fasterrcnn_mobilenet_v3_large_320_fpn-907ea3f9.pth', + 'yolo_v8_l': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8l.pt', + 'yolo_v8_m': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8m.pt', + 'yolo_v8_n': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n.pt', + 'yolo_v8_s': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8s.pt', + 'yolo_v8_x': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8x.pt', } os.makedirs("models", exist_ok=True) From 2470ca15fbb79e7710a911f25f389ff317897588 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Sun, 3 Aug 2025 00:03:19 +0200 Subject: [PATCH 2/6] add yolo v11 --- tools/convert-models.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/convert-models.py b/tools/convert-models.py index 4a635144..9271b482 100644 --- a/tools/convert-models.py +++ b/tools/convert-models.py @@ -115,6 +115,11 @@ def blob_exist(bucket_name, blob_name): 'yolo_v8_n': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n.pt', 'yolo_v8_s': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8s.pt', 'yolo_v8_x': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8x.pt', + 'yolo_v11_l': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l.pt', + 'yolo_v11_m': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m.pt', + 'yolo_v11_n': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt', + 'yolo_v11_s': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt', + 'yolo_v11_x': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x.pt', } os.makedirs("models", exist_ok=True) From 2773ffd9b543100647e31b26a99c05338b3bb873 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Sun, 3 Aug 2025 00:13:59 +0200 Subject: [PATCH 3/6] yolo need ultralytics --- .github/workflows/models.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/models.yaml b/.github/workflows/models.yaml index b1433bb4..11a08996 100644 --- a/.github/workflows/models.yaml +++ b/.github/workflows/models.yaml @@ -21,6 +21,6 @@ jobs: python-version: '3.10' - run: | python -m pip install --upgrade pip - pip install torch torchvision boto3 + pip install torch torchvision boto3 ultralytics - run: | python tools/convert-models.py From c767090a66d2861b854d69e3e886bcf50cac3782 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Fri, 8 Aug 2025 15:02:22 +0200 Subject: [PATCH 4/6] special management for yolo models --- tools/convert-models.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/convert-models.py b/tools/convert-models.py index 9271b482..be742adf 100644 --- a/tools/convert-models.py +++ b/tools/convert-models.py @@ -3,6 +3,7 @@ import os import boto3 from botocore.exceptions import ClientError +from ultralytics import settings def upload_blob(bucket_name, source_file_name, destination_blob_name): @@ -123,6 +124,9 @@ def blob_exist(bucket_name, blob_name): } os.makedirs("models", exist_ok=True) +# yolo specifics +os.makedirs("runs", exist_ok=True) +settings.update({"runs_dir": "runs/", "weights_dir": "models/", "sync": False}) for name, url in models.items(): fpath = "models/" + name + ".pth" @@ -134,6 +138,11 @@ def blob_exist(bucket_name, blob_name): # download from url, convert and upload the converted weights m = load_state_dict_from_url(url, progress=False) converted = {} + + # yolo models weights are embedded in a BaseModel per https://github.com/ultralytics/ultralytics/blob/main/ultralytics/nn/tasks.py#L309 + if name.startswith("yolo_"): + m = m["model"].model.float().state_dict() + for nm, par in m.items(): converted.update([(nm, par.clone())]) torch.save(converted, fpath, _use_new_zipfile_serialization=True) From cffd1cc72cd910a534697d1db7ab3adf9ab7afb7 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Fri, 8 Aug 2025 15:11:03 +0200 Subject: [PATCH 5/6] lighten the install with cpu-only software-stack --- .github/workflows/models.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/models.yaml b/.github/workflows/models.yaml index 11a08996..59a30da2 100644 --- a/.github/workflows/models.yaml +++ b/.github/workflows/models.yaml @@ -21,6 +21,7 @@ jobs: python-version: '3.10' - run: | python -m pip install --upgrade pip - pip install torch torchvision boto3 ultralytics + pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu + pip install boto3 ultralytics - run: | python tools/convert-models.py From ca1a553f775096c785aa87c708b158bab7cb0ba2 Mon Sep 17 00:00:00 2001 From: "C. Regouby" Date: Fri, 8 Aug 2025 15:20:25 +0200 Subject: [PATCH 6/6] add another batch of yolo models --- tools/convert-models.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/convert-models.py b/tools/convert-models.py index be742adf..5d82677f 100644 --- a/tools/convert-models.py +++ b/tools/convert-models.py @@ -112,15 +112,27 @@ def blob_exist(bucket_name, blob_name): 'fasterrcnn_mobilenet_v3_large': 'https://download.pytorch.org/models/fasterrcnn_mobilenet_v3_large_fpn-fb6a3cc7.pth', 'fasterrcnn_mobilenet_v3_large_320': 'https://download.pytorch.org/models/fasterrcnn_mobilenet_v3_large_320_fpn-907ea3f9.pth', 'yolo_v8_l': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8l.pt', + 'yolo_v8_l_seg': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8l-seg.pt', 'yolo_v8_m': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8m.pt', + 'yolo_v8_m_seg': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8m-seg.pt', 'yolo_v8_n': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n.pt', 'yolo_v8_s': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8s.pt', + 'yolo_v8_s_seg': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8s-seg.pt', 'yolo_v8_x': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8x.pt', 'yolo_v11_l': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l.pt', 'yolo_v11_m': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m.pt', 'yolo_v11_n': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt', 'yolo_v11_s': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt', + 'yolo_v11_s_cls': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt', + 'yolo_v11_s_obb': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-obb.pt', + 'yolo_v11_s_pose': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-pose.pt', + 'yolo_v11_s_seg': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-seg.pt', 'yolo_v11_x': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x.pt', + 'yolo_v12_l': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo12l.pt', + 'yolo_v12_m': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo12m.pt', + 'yolo_v12_n': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo12n.pt', + 'yolo_v12_s': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo12s.pt', + 'yolo_v12_x': 'https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo12x.pt', } os.makedirs("models", exist_ok=True)