From f80ff923e7d5045caad99936586515c3daf2676d Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 10 Jan 2023 08:23:32 +0100 Subject: [PATCH] Start Multi-OS CI (#172) --- .github/workflows/ci.yaml | 39 +++++++++++++-------------- .github/workflows/docker.yaml | 2 +- ultralytics/hub/utils.py | 2 +- ultralytics/yolo/v8/classify/train.py | 3 ++- ultralytics/yolo/v8/classify/val.py | 5 +++- 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1b4e3c7..ee4b192 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,9 +5,9 @@ name: Ultralytics CI on: push: - branches: [ main ] + branches: [main] pull_request: - branches: [ main ] + branches: [main] # schedule: # - cron: '0 0 * * *' # runs at 00:00 UTC every day @@ -18,24 +18,18 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest ] - python-version: [ '3.10' ] - model: [ yolov8n ] - torch: [ latest ] -# include: -# - os: ubuntu-latest -# python-version: '3.7' # '3.6.8' min -# model: yolov8n -# - os: ubuntu-latest -# python-version: '3.8' -# model: yolov8n -# - os: ubuntu-latest -# python-version: '3.9' -# model: yolov8n -# - os: ubuntu-latest -# python-version: '3.8' # torch 1.7.0 requires python >=3.6, <=3.8 -# model: yolov8n -# torch: '1.7.0' # min torch version CI https://pypi.org/project/torchvision/ + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ['3.10'] + model: [yolov8n] + torch: [latest] + include: + - os: ubuntu-latest + python-version: '3.7' # '3.6.8' min + model: yolov8n + - os: ubuntu-latest + python-version: '3.8' # torch 1.7.0 requires python >=3.6, <=3.8 + model: yolov8n + torch: '1.7.0' # min torch version CI https://pypi.org/project/torchvision/ steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 @@ -92,13 +86,16 @@ jobs: run: | yolo task=detect mode=train model=yolov8n.yaml data=coco128.yaml epochs=1 imgsz=64 yolo task=detect mode=val model=runs/detect/train/weights/last.pt imgsz=64 + yolo task=detect mode=predict model=runs/detect/train/weights/last.pt imgsz=64 source=ultralytics/assets/bus.jpg - name: Test segmentation shell: bash # for Windows compatibility run: | yolo task=segment mode=train model=yolov8n-seg.yaml data=coco128-seg.yaml epochs=1 imgsz=64 yolo task=segment mode=val model=runs/segment/train/weights/last.pt data=coco128-seg.yaml imgsz=64 + yolo task=segment mode=predict model=runs/segment/train/weights/last.pt imgsz=64 source=ultralytics/assets/bus.jpg - name: Test classification shell: bash # for Windows compatibility run: | yolo task=classify mode=train model=yolov8n-cls.yaml data=mnist160 epochs=1 imgsz=32 - yolo task=classify mode=val model=runs/classify/train/weights/last.pt data=mnist160 + yolo task=classify mode=val model=runs/classify/train/weights/last.pt data=mnist160 imgsz=32 + yolo task=classify mode=predict model=runs/classify/train/weights/last.pt imgsz=32 source=ultralytics/assets/bus.jpg diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index bcade98..8b816bb 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -5,7 +5,7 @@ name: Publish Docker Images on: push: - branches: [ none ] # TODO: replace with main + branches: [none] # TODO: replace with main jobs: docker: diff --git a/ultralytics/hub/utils.py b/ultralytics/hub/utils.py index 753afc7..1b92539 100644 --- a/ultralytics/hub/utils.py +++ b/ultralytics/hub/utils.py @@ -131,7 +131,7 @@ def smart_request(*args, retry=3, timeout=30, thread=True, code=-1, method="post @TryExcept() -def sync_analytics(cfg, all_keys=False, enabled=True): +def sync_analytics(cfg, all_keys=False, enabled=False): """ Sync analytics data if enabled in the global settings diff --git a/ultralytics/yolo/v8/classify/train.py b/ultralytics/yolo/v8/classify/train.py index bb03ba1..46660e1 100644 --- a/ultralytics/yolo/v8/classify/train.py +++ b/ultralytics/yolo/v8/classify/train.py @@ -72,7 +72,8 @@ class ClassificationTrainer(BaseTrainer): imgsz=self.args.imgsz, batch_size=batch_size if mode == "train" else (batch_size * 2), augment=mode == "train", - rank=rank) + rank=rank, + workers=self.args.workers) def preprocess_batch(self, batch): batch["img"] = batch["img"].to(self.device) diff --git a/ultralytics/yolo/v8/classify/val.py b/ultralytics/yolo/v8/classify/val.py index 9ccd710..a9895d4 100644 --- a/ultralytics/yolo/v8/classify/val.py +++ b/ultralytics/yolo/v8/classify/val.py @@ -36,7 +36,10 @@ class ClassificationValidator(BaseValidator): return self.metrics.results_dict def get_dataloader(self, dataset_path, batch_size): - return build_classification_dataloader(path=dataset_path, imgsz=self.args.imgsz, batch_size=batch_size) + return build_classification_dataloader(path=dataset_path, + imgsz=self.args.imgsz, + batch_size=batch_size, + workers=self.args.workers) def print_results(self): pf = '%22s' + '%11.3g' * len(self.metrics.keys) # print format