From e7ba6dfc52b4476dfb6d571e98affa9376de899f Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sun, 18 Sep 2022 12:38:40 +0200 Subject: [PATCH 1/4] Optimize imports --- segment/train.py | 2 -- utils/flask_rest_api/restapi.py | 2 +- utils/loggers/comet/hpo.py | 2 +- utils/loggers/wandb/log_dataset.py | 3 +-- utils/segment/dataloaders.py | 2 +- utils/segment/loss.py | 2 +- 6 files changed, 5 insertions(+), 8 deletions(-) diff --git a/segment/train.py b/segment/train.py index bda379176151..8abd0944551d 100644 --- a/segment/train.py +++ b/segment/train.py @@ -39,8 +39,6 @@ sys.path.append(str(ROOT)) # add ROOT to PATH ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative -import torch.nn.functional as F - import segment.val as validate # for end-of-epoch mAP from models.experimental import attempt_load from models.yolo import SegmentationModel diff --git a/utils/flask_rest_api/restapi.py b/utils/flask_rest_api/restapi.py index 8482435c861e..ce130dfb374a 100644 --- a/utils/flask_rest_api/restapi.py +++ b/utils/flask_rest_api/restapi.py @@ -7,8 +7,8 @@ import io import torch -from flask import Flask, request from PIL import Image +from flask import Flask, request app = Flask(__name__) models = {} diff --git a/utils/loggers/comet/hpo.py b/utils/loggers/comet/hpo.py index eab4df9978cf..7dd5c92e8de1 100644 --- a/utils/loggers/comet/hpo.py +++ b/utils/loggers/comet/hpo.py @@ -14,7 +14,7 @@ if str(ROOT) not in sys.path: sys.path.append(str(ROOT)) # add ROOT to PATH -from train import parse_opt, train +from train import train from utils.callbacks import Callbacks from utils.general import increment_path from utils.torch_utils import select_device diff --git a/utils/loggers/wandb/log_dataset.py b/utils/loggers/wandb/log_dataset.py index 06e81fb69307..0a98f7a0589c 100644 --- a/utils/loggers/wandb/log_dataset.py +++ b/utils/loggers/wandb/log_dataset.py @@ -1,8 +1,7 @@ import argparse -from wandb_utils import WandbLogger - from utils.general import LOGGER +from wandb_utils import WandbLogger WANDB_ARTIFACT_PREFIX = 'wandb-artifact://' diff --git a/utils/segment/dataloaders.py b/utils/segment/dataloaders.py index f6fe642d077f..ced6f23bf151 100644 --- a/utils/segment/dataloaders.py +++ b/utils/segment/dataloaders.py @@ -11,11 +11,11 @@ import torch from torch.utils.data import DataLoader, distributed +from .augmentations import mixup, random_perspective from ..augmentations import augment_hsv, copy_paste, letterbox from ..dataloaders import InfiniteDataLoader, LoadImagesAndLabels, seed_worker from ..general import LOGGER, xyn2xy, xywhn2xyxy, xyxy2xywhn from ..torch_utils import torch_distributed_zero_first -from .augmentations import mixup, random_perspective def create_dataloader(path, diff --git a/utils/segment/loss.py b/utils/segment/loss.py index b45b2c27e0a0..723522fd48a8 100644 --- a/utils/segment/loss.py +++ b/utils/segment/loss.py @@ -2,11 +2,11 @@ import torch.nn as nn import torch.nn.functional as F +from .general import crop_mask from ..general import xywh2xyxy from ..loss import FocalLoss, smooth_BCE from ..metrics import bbox_iou from ..torch_utils import de_parallel -from .general import crop_mask class ComputeLoss: From f0f912fb25c821d9ab09c9a1961b71089bf07ecd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 18 Sep 2022 10:39:39 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- utils/flask_rest_api/restapi.py | 2 +- utils/loggers/wandb/log_dataset.py | 3 ++- utils/segment/dataloaders.py | 2 +- utils/segment/loss.py | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/utils/flask_rest_api/restapi.py b/utils/flask_rest_api/restapi.py index ce130dfb374a..8482435c861e 100644 --- a/utils/flask_rest_api/restapi.py +++ b/utils/flask_rest_api/restapi.py @@ -7,8 +7,8 @@ import io import torch -from PIL import Image from flask import Flask, request +from PIL import Image app = Flask(__name__) models = {} diff --git a/utils/loggers/wandb/log_dataset.py b/utils/loggers/wandb/log_dataset.py index 0a98f7a0589c..06e81fb69307 100644 --- a/utils/loggers/wandb/log_dataset.py +++ b/utils/loggers/wandb/log_dataset.py @@ -1,8 +1,9 @@ import argparse -from utils.general import LOGGER from wandb_utils import WandbLogger +from utils.general import LOGGER + WANDB_ARTIFACT_PREFIX = 'wandb-artifact://' diff --git a/utils/segment/dataloaders.py b/utils/segment/dataloaders.py index ced6f23bf151..f6fe642d077f 100644 --- a/utils/segment/dataloaders.py +++ b/utils/segment/dataloaders.py @@ -11,11 +11,11 @@ import torch from torch.utils.data import DataLoader, distributed -from .augmentations import mixup, random_perspective from ..augmentations import augment_hsv, copy_paste, letterbox from ..dataloaders import InfiniteDataLoader, LoadImagesAndLabels, seed_worker from ..general import LOGGER, xyn2xy, xywhn2xyxy, xyxy2xywhn from ..torch_utils import torch_distributed_zero_first +from .augmentations import mixup, random_perspective def create_dataloader(path, diff --git a/utils/segment/loss.py b/utils/segment/loss.py index 723522fd48a8..b45b2c27e0a0 100644 --- a/utils/segment/loss.py +++ b/utils/segment/loss.py @@ -2,11 +2,11 @@ import torch.nn as nn import torch.nn.functional as F -from .general import crop_mask from ..general import xywh2xyxy from ..loss import FocalLoss, smooth_BCE from ..metrics import bbox_iou from ..torch_utils import de_parallel +from .general import crop_mask class ComputeLoss: From fc7fc497f595acac88720c3fa2a35b839c647c83 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sun, 18 Sep 2022 12:41:29 +0200 Subject: [PATCH 3/4] Reformat --- classify/val.py | 32 +++++++-------- export.py | 8 ++-- models/tf.py | 4 +- models/yolo.py | 4 +- segment/predict.py | 56 +++++++++++++------------- utils/callbacks.py | 2 +- utils/downloads.py | 1 - utils/loggers/clearml/clearml_utils.py | 1 + utils/loggers/comet/__init__.py | 12 +++--- utils/segment/dataloaders.py | 30 +++++++------- utils/segment/metrics.py | 4 +- 11 files changed, 77 insertions(+), 77 deletions(-) diff --git a/classify/val.py b/classify/val.py index 3c16ec8092d8..48aa5d12e3f7 100644 --- a/classify/val.py +++ b/classify/val.py @@ -42,22 +42,22 @@ @smart_inference_mode() def run( - data=ROOT / '../datasets/mnist', # dataset dir - weights=ROOT / 'yolov5s-cls.pt', # model.pt path(s) - batch_size=128, # batch size - imgsz=224, # inference size (pixels) - device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu - workers=8, # max dataloader workers (per RANK in DDP mode) - verbose=False, # verbose output - project=ROOT / 'runs/val-cls', # save to project/name - name='exp', # save to project/name - exist_ok=False, # existing project/name ok, do not increment - half=False, # use FP16 half-precision inference - dnn=False, # use OpenCV DNN for ONNX inference - model=None, - dataloader=None, - criterion=None, - pbar=None, + data=ROOT / '../datasets/mnist', # dataset dir + weights=ROOT / 'yolov5s-cls.pt', # model.pt path(s) + batch_size=128, # batch size + imgsz=224, # inference size (pixels) + device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu + workers=8, # max dataloader workers (per RANK in DDP mode) + verbose=False, # verbose output + project=ROOT / 'runs/val-cls', # save to project/name + name='exp', # save to project/name + exist_ok=False, # existing project/name ok, do not increment + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + model=None, + dataloader=None, + criterion=None, + pbar=None, ): # Initialize/load model and set device training = model is not None diff --git a/export.py b/export.py index a575c73e375f..03df071eb8a1 100644 --- a/export.py +++ b/export.py @@ -87,7 +87,7 @@ def export_formats(): ['TensorFlow Lite', 'tflite', '.tflite', True, False], ['TensorFlow Edge TPU', 'edgetpu', '_edgetpu.tflite', False, False], ['TensorFlow.js', 'tfjs', '_web_model', False, False], - ['PaddlePaddle', 'paddle', '_paddle_model', True, True],] + ['PaddlePaddle', 'paddle', '_paddle_model', True, True], ] return pd.DataFrame(x, columns=['Format', 'Argument', 'Suffix', 'CPU', 'GPU']) @@ -441,9 +441,9 @@ def export_tfjs(file, prefix=colorstr('TensorFlow.js:')): r'"Identity.?.?": {"name": "Identity.?.?"}, ' r'"Identity.?.?": {"name": "Identity.?.?"}, ' r'"Identity.?.?": {"name": "Identity.?.?"}}}', r'{"outputs": {"Identity": {"name": "Identity"}, ' - r'"Identity_1": {"name": "Identity_1"}, ' - r'"Identity_2": {"name": "Identity_2"}, ' - r'"Identity_3": {"name": "Identity_3"}}}', json) + r'"Identity_1": {"name": "Identity_1"}, ' + r'"Identity_2": {"name": "Identity_2"}, ' + r'"Identity_3": {"name": "Identity_3"}}}', json) j.write(subst) return f, None diff --git a/models/tf.py b/models/tf.py index 8cce147059d3..b8aba297f6e8 100644 --- a/models/tf.py +++ b/models/tf.py @@ -394,8 +394,8 @@ def parse_model(d, ch, model, imgsz): # model_dict, input_channels(3) n = max(round(n * gd), 1) if n > 1 else n # depth gain if m in [ - nn.Conv2d, Conv, DWConv, DWConvTranspose2d, Bottleneck, SPP, SPPF, MixConv2d, Focus, CrossConv, - BottleneckCSP, C3, C3x]: + nn.Conv2d, Conv, DWConv, DWConvTranspose2d, Bottleneck, SPP, SPPF, MixConv2d, Focus, CrossConv, + BottleneckCSP, C3, C3x]: c1, c2 = ch[f], args[0] c2 = make_divisible(c2 * gw, 8) if c2 != no else c2 diff --git a/models/yolo.py b/models/yolo.py index 0dca6353a356..06fa71771726 100644 --- a/models/yolo.py +++ b/models/yolo.py @@ -315,8 +315,8 @@ def parse_model(d, ch): # model_dict, input_channels(3) n = n_ = max(round(n * gd), 1) if n > 1 else n # depth gain if m in { - Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv, - BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x}: + Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv, + BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x}: c1, c2 = ch[f], args[0] if c2 != no: # if not output c2 = make_divisible(c2 * gw, 8) diff --git a/segment/predict.py b/segment/predict.py index ba4cf2905255..310c2222130b 100644 --- a/segment/predict.py +++ b/segment/predict.py @@ -50,34 +50,34 @@ @smart_inference_mode() def run( - weights=ROOT / 'yolov5s-seg.pt', # model.pt path(s) - source=ROOT / 'data/images', # file/dir/URL/glob, 0 for webcam - data=ROOT / 'data/coco128.yaml', # dataset.yaml path - imgsz=(640, 640), # inference size (height, width) - conf_thres=0.25, # confidence threshold - iou_thres=0.45, # NMS IOU threshold - max_det=1000, # maximum detections per image - device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu - view_img=False, # show results - save_txt=False, # save results to *.txt - save_conf=False, # save confidences in --save-txt labels - save_crop=False, # save cropped prediction boxes - nosave=False, # do not save images/videos - classes=None, # filter by class: --class 0, or --class 0 2 3 - agnostic_nms=False, # class-agnostic NMS - augment=False, # augmented inference - visualize=False, # visualize features - update=False, # update all models - project=ROOT / 'runs/predict-seg', # save results to project/name - name='exp', # save results to project/name - exist_ok=False, # existing project/name ok, do not increment - line_thickness=3, # bounding box thickness (pixels) - hide_labels=False, # hide labels - hide_conf=False, # hide confidences - half=False, # use FP16 half-precision inference - dnn=False, # use OpenCV DNN for ONNX inference - vid_stride=1, # video frame-rate stride - retina_masks=False, + weights=ROOT / 'yolov5s-seg.pt', # model.pt path(s) + source=ROOT / 'data/images', # file/dir/URL/glob, 0 for webcam + data=ROOT / 'data/coco128.yaml', # dataset.yaml path + imgsz=(640, 640), # inference size (height, width) + conf_thres=0.25, # confidence threshold + iou_thres=0.45, # NMS IOU threshold + max_det=1000, # maximum detections per image + device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu + view_img=False, # show results + save_txt=False, # save results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_crop=False, # save cropped prediction boxes + nosave=False, # do not save images/videos + classes=None, # filter by class: --class 0, or --class 0 2 3 + agnostic_nms=False, # class-agnostic NMS + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project=ROOT / 'runs/predict-seg', # save results to project/name + name='exp', # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + line_thickness=3, # bounding box thickness (pixels) + hide_labels=False, # hide labels + hide_conf=False, # hide confidences + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + vid_stride=1, # video frame-rate stride + retina_masks=False, ): source = str(source) save_img = not nosave and not source.endswith('.txt') # save inference images diff --git a/utils/callbacks.py b/utils/callbacks.py index 166d8938322d..3e7ef9763ec0 100644 --- a/utils/callbacks.py +++ b/utils/callbacks.py @@ -32,7 +32,7 @@ def __init__(self): 'on_model_save': [], 'on_train_end': [], 'on_params_update': [], - 'teardown': [],} + 'teardown': [], } self.stop_training = False # set True to interrupt training def register_action(self, hook, name='', callback=None): diff --git a/utils/downloads.py b/utils/downloads.py index dd2698f995a4..78b81d62fe25 100644 --- a/utils/downloads.py +++ b/utils/downloads.py @@ -160,7 +160,6 @@ def get_token(cookie="./cookie"): return line.split()[-1] return "" - # Google utils: https://cloud.google.com/storage/docs/reference/libraries ---------------------------------------------- # # diff --git a/utils/loggers/clearml/clearml_utils.py b/utils/loggers/clearml/clearml_utils.py index 1e136907367d..eb1c12ce6cac 100644 --- a/utils/loggers/clearml/clearml_utils.py +++ b/utils/loggers/clearml/clearml_utils.py @@ -11,6 +11,7 @@ try: import clearml from clearml import Dataset, Task + assert hasattr(clearml, '__version__') # verify package import not local dir except (ImportError, AssertionError): clearml = None diff --git a/utils/loggers/comet/__init__.py b/utils/loggers/comet/__init__.py index 4ee86dd70d6e..d42f0aa65c9d 100644 --- a/utils/loggers/comet/__init__.py +++ b/utils/loggers/comet/__init__.py @@ -89,7 +89,7 @@ def __init__(self, opt, hyp, run_id=None, job_type="Training", **experiment_kwar "log_code": False, "log_env_gpu": True, "log_env_cpu": True, - "project_name": COMET_PROJECT_NAME,} + "project_name": COMET_PROJECT_NAME, } self.default_experiment_kwargs.update(experiment_kwargs) self.experiment = self._get_experiment(self.comet_mode, run_id) @@ -148,7 +148,7 @@ def __init__(self, opt, hyp, run_id=None, job_type="Training", **experiment_kwar "comet_log_per_class_metrics": COMET_LOG_PER_CLASS_METRICS, "comet_log_batch_metrics": COMET_LOG_BATCH_METRICS, "comet_log_confusion_matrix": COMET_LOG_CONFUSION_MATRIX, - "comet_model_name": COMET_MODEL_NAME,}) + "comet_model_name": COMET_MODEL_NAME, }) # Check if running the Experiment with the Comet Optimizer if hasattr(self.opt, "comet_optimizer_id"): @@ -165,7 +165,7 @@ def _get_experiment(self, mode, experiment_id=None): **self.default_experiment_kwargs, ) - return comet_ml.OfflineExperiment(**self.default_experiment_kwargs,) + return comet_ml.OfflineExperiment(**self.default_experiment_kwargs, ) else: try: @@ -209,7 +209,7 @@ def log_model(self, path, opt, epoch, fitness_score, best_model=False): "fitness_score": fitness_score[-1], "epochs_trained": epoch + 1, "save_period": opt.save_period, - "total_epochs": opt.epochs,} + "total_epochs": opt.epochs, } model_files = glob.glob(f"{path}/*.pt") for model_path in model_files: @@ -264,7 +264,7 @@ def log_predictions(self, image, labelsn, path, shape, predn): "x": xyxy[0], "y": xyxy[1], "x2": xyxy[2], - "y2": xyxy[3]},}) + "y2": xyxy[3]}, }) for *xyxy, conf, cls in filtered_detections.tolist(): metadata.append({ "label": f"{self.class_names[int(cls)]}", @@ -273,7 +273,7 @@ def log_predictions(self, image, labelsn, path, shape, predn): "x": xyxy[0], "y": xyxy[1], "x2": xyxy[2], - "y2": xyxy[3]},}) + "y2": xyxy[3]}, }) self.metadata_dict[image_name] = metadata self.logged_images_count += 1 diff --git a/utils/segment/dataloaders.py b/utils/segment/dataloaders.py index ced6f23bf151..e98d01ec2d74 100644 --- a/utils/segment/dataloaders.py +++ b/utils/segment/dataloaders.py @@ -79,21 +79,21 @@ def create_dataloader(path, class LoadImagesAndLabelsAndMasks(LoadImagesAndLabels): # for training/testing def __init__( - self, - path, - img_size=640, - batch_size=16, - augment=False, - hyp=None, - rect=False, - image_weights=False, - cache_images=False, - single_cls=False, - stride=32, - pad=0, - prefix="", - downsample_ratio=1, - overlap=False, + self, + path, + img_size=640, + batch_size=16, + augment=False, + hyp=None, + rect=False, + image_weights=False, + cache_images=False, + single_cls=False, + stride=32, + pad=0, + prefix="", + downsample_ratio=1, + overlap=False, ): super().__init__(path, img_size, batch_size, augment, hyp, rect, image_weights, cache_images, single_cls, stride, pad, prefix) diff --git a/utils/segment/metrics.py b/utils/segment/metrics.py index b09ce23fb9e3..6b7d72480be7 100644 --- a/utils/segment/metrics.py +++ b/utils/segment/metrics.py @@ -196,7 +196,7 @@ def ap_class_index(self): "val/cls_loss", "x/lr0", "x/lr1", - "x/lr2",] + "x/lr2", ] BEST_KEYS = [ "best/epoch", @@ -207,4 +207,4 @@ def ap_class_index(self): "best/precision(M)", "best/recall(M)", "best/mAP_0.5(M)", - "best/mAP_0.5:0.95(M)",] + "best/mAP_0.5:0.95(M)", ] From a7cac47ed6ffdde28dae2ad2b315d0ad50c6aa76 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 18 Sep 2022 10:41:59 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- classify/val.py | 32 +++++++++---------- export.py | 8 ++--- models/tf.py | 4 +-- models/yolo.py | 4 +-- segment/predict.py | 56 ++++++++++++++++----------------- utils/callbacks.py | 2 +- utils/downloads.py | 1 + utils/loggers/comet/__init__.py | 12 +++---- utils/segment/dataloaders.py | 30 +++++++++--------- utils/segment/metrics.py | 4 +-- 10 files changed, 77 insertions(+), 76 deletions(-) diff --git a/classify/val.py b/classify/val.py index 48aa5d12e3f7..3c16ec8092d8 100644 --- a/classify/val.py +++ b/classify/val.py @@ -42,22 +42,22 @@ @smart_inference_mode() def run( - data=ROOT / '../datasets/mnist', # dataset dir - weights=ROOT / 'yolov5s-cls.pt', # model.pt path(s) - batch_size=128, # batch size - imgsz=224, # inference size (pixels) - device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu - workers=8, # max dataloader workers (per RANK in DDP mode) - verbose=False, # verbose output - project=ROOT / 'runs/val-cls', # save to project/name - name='exp', # save to project/name - exist_ok=False, # existing project/name ok, do not increment - half=False, # use FP16 half-precision inference - dnn=False, # use OpenCV DNN for ONNX inference - model=None, - dataloader=None, - criterion=None, - pbar=None, + data=ROOT / '../datasets/mnist', # dataset dir + weights=ROOT / 'yolov5s-cls.pt', # model.pt path(s) + batch_size=128, # batch size + imgsz=224, # inference size (pixels) + device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu + workers=8, # max dataloader workers (per RANK in DDP mode) + verbose=False, # verbose output + project=ROOT / 'runs/val-cls', # save to project/name + name='exp', # save to project/name + exist_ok=False, # existing project/name ok, do not increment + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + model=None, + dataloader=None, + criterion=None, + pbar=None, ): # Initialize/load model and set device training = model is not None diff --git a/export.py b/export.py index 03df071eb8a1..a575c73e375f 100644 --- a/export.py +++ b/export.py @@ -87,7 +87,7 @@ def export_formats(): ['TensorFlow Lite', 'tflite', '.tflite', True, False], ['TensorFlow Edge TPU', 'edgetpu', '_edgetpu.tflite', False, False], ['TensorFlow.js', 'tfjs', '_web_model', False, False], - ['PaddlePaddle', 'paddle', '_paddle_model', True, True], ] + ['PaddlePaddle', 'paddle', '_paddle_model', True, True],] return pd.DataFrame(x, columns=['Format', 'Argument', 'Suffix', 'CPU', 'GPU']) @@ -441,9 +441,9 @@ def export_tfjs(file, prefix=colorstr('TensorFlow.js:')): r'"Identity.?.?": {"name": "Identity.?.?"}, ' r'"Identity.?.?": {"name": "Identity.?.?"}, ' r'"Identity.?.?": {"name": "Identity.?.?"}}}', r'{"outputs": {"Identity": {"name": "Identity"}, ' - r'"Identity_1": {"name": "Identity_1"}, ' - r'"Identity_2": {"name": "Identity_2"}, ' - r'"Identity_3": {"name": "Identity_3"}}}', json) + r'"Identity_1": {"name": "Identity_1"}, ' + r'"Identity_2": {"name": "Identity_2"}, ' + r'"Identity_3": {"name": "Identity_3"}}}', json) j.write(subst) return f, None diff --git a/models/tf.py b/models/tf.py index b8aba297f6e8..8cce147059d3 100644 --- a/models/tf.py +++ b/models/tf.py @@ -394,8 +394,8 @@ def parse_model(d, ch, model, imgsz): # model_dict, input_channels(3) n = max(round(n * gd), 1) if n > 1 else n # depth gain if m in [ - nn.Conv2d, Conv, DWConv, DWConvTranspose2d, Bottleneck, SPP, SPPF, MixConv2d, Focus, CrossConv, - BottleneckCSP, C3, C3x]: + nn.Conv2d, Conv, DWConv, DWConvTranspose2d, Bottleneck, SPP, SPPF, MixConv2d, Focus, CrossConv, + BottleneckCSP, C3, C3x]: c1, c2 = ch[f], args[0] c2 = make_divisible(c2 * gw, 8) if c2 != no else c2 diff --git a/models/yolo.py b/models/yolo.py index 06fa71771726..0dca6353a356 100644 --- a/models/yolo.py +++ b/models/yolo.py @@ -315,8 +315,8 @@ def parse_model(d, ch): # model_dict, input_channels(3) n = n_ = max(round(n * gd), 1) if n > 1 else n # depth gain if m in { - Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv, - BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x}: + Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv, + BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x}: c1, c2 = ch[f], args[0] if c2 != no: # if not output c2 = make_divisible(c2 * gw, 8) diff --git a/segment/predict.py b/segment/predict.py index 310c2222130b..ba4cf2905255 100644 --- a/segment/predict.py +++ b/segment/predict.py @@ -50,34 +50,34 @@ @smart_inference_mode() def run( - weights=ROOT / 'yolov5s-seg.pt', # model.pt path(s) - source=ROOT / 'data/images', # file/dir/URL/glob, 0 for webcam - data=ROOT / 'data/coco128.yaml', # dataset.yaml path - imgsz=(640, 640), # inference size (height, width) - conf_thres=0.25, # confidence threshold - iou_thres=0.45, # NMS IOU threshold - max_det=1000, # maximum detections per image - device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu - view_img=False, # show results - save_txt=False, # save results to *.txt - save_conf=False, # save confidences in --save-txt labels - save_crop=False, # save cropped prediction boxes - nosave=False, # do not save images/videos - classes=None, # filter by class: --class 0, or --class 0 2 3 - agnostic_nms=False, # class-agnostic NMS - augment=False, # augmented inference - visualize=False, # visualize features - update=False, # update all models - project=ROOT / 'runs/predict-seg', # save results to project/name - name='exp', # save results to project/name - exist_ok=False, # existing project/name ok, do not increment - line_thickness=3, # bounding box thickness (pixels) - hide_labels=False, # hide labels - hide_conf=False, # hide confidences - half=False, # use FP16 half-precision inference - dnn=False, # use OpenCV DNN for ONNX inference - vid_stride=1, # video frame-rate stride - retina_masks=False, + weights=ROOT / 'yolov5s-seg.pt', # model.pt path(s) + source=ROOT / 'data/images', # file/dir/URL/glob, 0 for webcam + data=ROOT / 'data/coco128.yaml', # dataset.yaml path + imgsz=(640, 640), # inference size (height, width) + conf_thres=0.25, # confidence threshold + iou_thres=0.45, # NMS IOU threshold + max_det=1000, # maximum detections per image + device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu + view_img=False, # show results + save_txt=False, # save results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_crop=False, # save cropped prediction boxes + nosave=False, # do not save images/videos + classes=None, # filter by class: --class 0, or --class 0 2 3 + agnostic_nms=False, # class-agnostic NMS + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project=ROOT / 'runs/predict-seg', # save results to project/name + name='exp', # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + line_thickness=3, # bounding box thickness (pixels) + hide_labels=False, # hide labels + hide_conf=False, # hide confidences + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + vid_stride=1, # video frame-rate stride + retina_masks=False, ): source = str(source) save_img = not nosave and not source.endswith('.txt') # save inference images diff --git a/utils/callbacks.py b/utils/callbacks.py index 3e7ef9763ec0..166d8938322d 100644 --- a/utils/callbacks.py +++ b/utils/callbacks.py @@ -32,7 +32,7 @@ def __init__(self): 'on_model_save': [], 'on_train_end': [], 'on_params_update': [], - 'teardown': [], } + 'teardown': [],} self.stop_training = False # set True to interrupt training def register_action(self, hook, name='', callback=None): diff --git a/utils/downloads.py b/utils/downloads.py index 78b81d62fe25..dd2698f995a4 100644 --- a/utils/downloads.py +++ b/utils/downloads.py @@ -160,6 +160,7 @@ def get_token(cookie="./cookie"): return line.split()[-1] return "" + # Google utils: https://cloud.google.com/storage/docs/reference/libraries ---------------------------------------------- # # diff --git a/utils/loggers/comet/__init__.py b/utils/loggers/comet/__init__.py index d42f0aa65c9d..4ee86dd70d6e 100644 --- a/utils/loggers/comet/__init__.py +++ b/utils/loggers/comet/__init__.py @@ -89,7 +89,7 @@ def __init__(self, opt, hyp, run_id=None, job_type="Training", **experiment_kwar "log_code": False, "log_env_gpu": True, "log_env_cpu": True, - "project_name": COMET_PROJECT_NAME, } + "project_name": COMET_PROJECT_NAME,} self.default_experiment_kwargs.update(experiment_kwargs) self.experiment = self._get_experiment(self.comet_mode, run_id) @@ -148,7 +148,7 @@ def __init__(self, opt, hyp, run_id=None, job_type="Training", **experiment_kwar "comet_log_per_class_metrics": COMET_LOG_PER_CLASS_METRICS, "comet_log_batch_metrics": COMET_LOG_BATCH_METRICS, "comet_log_confusion_matrix": COMET_LOG_CONFUSION_MATRIX, - "comet_model_name": COMET_MODEL_NAME, }) + "comet_model_name": COMET_MODEL_NAME,}) # Check if running the Experiment with the Comet Optimizer if hasattr(self.opt, "comet_optimizer_id"): @@ -165,7 +165,7 @@ def _get_experiment(self, mode, experiment_id=None): **self.default_experiment_kwargs, ) - return comet_ml.OfflineExperiment(**self.default_experiment_kwargs, ) + return comet_ml.OfflineExperiment(**self.default_experiment_kwargs,) else: try: @@ -209,7 +209,7 @@ def log_model(self, path, opt, epoch, fitness_score, best_model=False): "fitness_score": fitness_score[-1], "epochs_trained": epoch + 1, "save_period": opt.save_period, - "total_epochs": opt.epochs, } + "total_epochs": opt.epochs,} model_files = glob.glob(f"{path}/*.pt") for model_path in model_files: @@ -264,7 +264,7 @@ def log_predictions(self, image, labelsn, path, shape, predn): "x": xyxy[0], "y": xyxy[1], "x2": xyxy[2], - "y2": xyxy[3]}, }) + "y2": xyxy[3]},}) for *xyxy, conf, cls in filtered_detections.tolist(): metadata.append({ "label": f"{self.class_names[int(cls)]}", @@ -273,7 +273,7 @@ def log_predictions(self, image, labelsn, path, shape, predn): "x": xyxy[0], "y": xyxy[1], "x2": xyxy[2], - "y2": xyxy[3]}, }) + "y2": xyxy[3]},}) self.metadata_dict[image_name] = metadata self.logged_images_count += 1 diff --git a/utils/segment/dataloaders.py b/utils/segment/dataloaders.py index 66994fcdc628..f6fe642d077f 100644 --- a/utils/segment/dataloaders.py +++ b/utils/segment/dataloaders.py @@ -79,21 +79,21 @@ def create_dataloader(path, class LoadImagesAndLabelsAndMasks(LoadImagesAndLabels): # for training/testing def __init__( - self, - path, - img_size=640, - batch_size=16, - augment=False, - hyp=None, - rect=False, - image_weights=False, - cache_images=False, - single_cls=False, - stride=32, - pad=0, - prefix="", - downsample_ratio=1, - overlap=False, + self, + path, + img_size=640, + batch_size=16, + augment=False, + hyp=None, + rect=False, + image_weights=False, + cache_images=False, + single_cls=False, + stride=32, + pad=0, + prefix="", + downsample_ratio=1, + overlap=False, ): super().__init__(path, img_size, batch_size, augment, hyp, rect, image_weights, cache_images, single_cls, stride, pad, prefix) diff --git a/utils/segment/metrics.py b/utils/segment/metrics.py index 6b7d72480be7..b09ce23fb9e3 100644 --- a/utils/segment/metrics.py +++ b/utils/segment/metrics.py @@ -196,7 +196,7 @@ def ap_class_index(self): "val/cls_loss", "x/lr0", "x/lr1", - "x/lr2", ] + "x/lr2",] BEST_KEYS = [ "best/epoch", @@ -207,4 +207,4 @@ def ap_class_index(self): "best/precision(M)", "best/recall(M)", "best/mAP_0.5(M)", - "best/mAP_0.5:0.95(M)", ] + "best/mAP_0.5:0.95(M)",]