ultralytics 8.0.20
CLI yolo
simplifications, DDP and ONNX fixes (#608)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sid Prabhakaran <s2siddhu@gmail.com>
This commit is contained in:
@ -8,8 +8,8 @@ from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from typing import Dict, List, Union
|
||||
|
||||
from ultralytics import __version__, yolo
|
||||
from ultralytics.yolo.utils import (DEFAULT_CFG_DICT, DEFAULT_CFG_PATH, LOGGER, PREFIX, USER_CONFIG_DIR,
|
||||
from ultralytics import __version__
|
||||
from ultralytics.yolo.utils import (DEFAULT_CFG_DICT, DEFAULT_CFG_PATH, LOGGER, PREFIX, ROOT, USER_CONFIG_DIR,
|
||||
IterableSimpleNamespace, colorstr, yaml_load, yaml_print)
|
||||
from ultralytics.yolo.utils.checks import check_yolo
|
||||
|
||||
@ -211,30 +211,42 @@ def entrypoint(debug=False):
|
||||
else:
|
||||
raise argument_error(a)
|
||||
|
||||
cfg = get_cfg(DEFAULT_CFG_DICT, overrides) # create CFG instance
|
||||
|
||||
# Checks error catch
|
||||
if cfg.mode == 'checks':
|
||||
LOGGER.warning(
|
||||
"WARNING ⚠️ 'yolo mode=checks' is deprecated and will be removed in the future. Use 'yolo checks' instead.")
|
||||
# Mode
|
||||
mode = overrides.pop('mode', None)
|
||||
model = overrides.pop('model', None)
|
||||
if mode == 'checks':
|
||||
LOGGER.warning("WARNING ⚠️ 'yolo mode=checks' is deprecated. Use 'yolo checks' instead.")
|
||||
check_yolo()
|
||||
return
|
||||
elif mode is None:
|
||||
mode = DEFAULT_CFG_DICT['mode'] or 'predict'
|
||||
LOGGER.warning(f"WARNING ⚠️ 'mode' is missing. Valid modes are {modes}. Using default 'mode={mode}'.")
|
||||
|
||||
# Mapping from task to module
|
||||
module = {"detect": yolo.v8.detect, "segment": yolo.v8.segment, "classify": yolo.v8.classify}.get(cfg.task)
|
||||
if not module:
|
||||
raise SyntaxError(f"yolo task={cfg.task} is invalid. Valid tasks are: {', '.join(tasks)}\n{CLI_HELP_MSG}")
|
||||
# Model
|
||||
if model is None:
|
||||
model = DEFAULT_CFG_DICT['model'] or 'yolov8n.pt'
|
||||
LOGGER.warning(f"WARNING ⚠️ 'model' is missing. Using default 'model={model}'.")
|
||||
from ultralytics.yolo.engine.model import YOLO
|
||||
model = YOLO(model)
|
||||
task = model.task
|
||||
|
||||
# Mapping from mode to function
|
||||
func = {
|
||||
"train": module.train,
|
||||
"val": module.val,
|
||||
"predict": module.predict,
|
||||
"export": yolo.engine.exporter.export}.get(cfg.mode)
|
||||
if not func:
|
||||
raise SyntaxError(f"yolo mode={cfg.mode} is invalid. Valid modes are: {', '.join(modes)}\n{CLI_HELP_MSG}")
|
||||
# Task
|
||||
if mode == 'predict' and 'source' not in overrides:
|
||||
overrides['source'] = DEFAULT_CFG_DICT['source'] or ROOT / "assets" if (ROOT / "assets").exists() \
|
||||
else "https://ultralytics.com/images/bus.jpg"
|
||||
LOGGER.warning(f"WARNING ⚠️ 'source' is missing. Using default 'source={overrides['source']}'.")
|
||||
elif mode in ('train', 'val'):
|
||||
if 'data' not in overrides:
|
||||
overrides['data'] = DEFAULT_CFG_DICT['data'] or 'mnist160' if task == 'classify' \
|
||||
else 'coco128-seg.yaml' if task == 'segment' else 'coco128.yaml'
|
||||
LOGGER.warning(f"WARNING ⚠️ 'data' is missing. Using default 'data={overrides['data']}'.")
|
||||
elif mode == 'export':
|
||||
if 'format' not in overrides:
|
||||
overrides['format'] = DEFAULT_CFG_DICT['format'] or 'torchscript'
|
||||
LOGGER.warning(f"WARNING ⚠️ 'format' is missing. Using default 'format={overrides['format']}'.")
|
||||
|
||||
func(cfg)
|
||||
# Run command in python
|
||||
getattr(model, mode)(verbose=True, **overrides)
|
||||
|
||||
|
||||
# Special modes --------------------------------------------------------------------------------------------------------
|
||||
|
@ -1,26 +1,26 @@
|
||||
# Ultralytics YOLO 🚀, GPL-3.0 license
|
||||
# Default training settings and hyperparameters for medium-augmentation COCO training
|
||||
|
||||
task: "detect" # inference task, i.e. detect, segment, classify
|
||||
mode: "train" # YOLO mode, i.e. train, val, predict, export
|
||||
task: detect # inference task, i.e. detect, segment, classify
|
||||
mode: train # YOLO mode, i.e. train, val, predict, export
|
||||
|
||||
# Train settings -------------------------------------------------------------------------------------------------------
|
||||
model: null # path to model file, i.e. yolov8n.pt, yolov8n.yaml
|
||||
data: null # path to data file, i.e. i.e. coco128.yaml
|
||||
model: # path to model file, i.e. yolov8n.pt, yolov8n.yaml
|
||||
data: # path to data file, i.e. i.e. coco128.yaml
|
||||
epochs: 100 # number of epochs to train for
|
||||
patience: 50 # epochs to wait for no observable improvement for early stopping of training
|
||||
batch: 16 # number of images per batch (-1 for AutoBatch)
|
||||
imgsz: 640 # size of input images as integer or w,h
|
||||
save: True # save train checkpoints and predict results
|
||||
cache: False # True/ram, disk or False. Use cache for data loading
|
||||
device: null # device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
|
||||
device: # device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
|
||||
workers: 8 # number of worker threads for data loading (per RANK if DDP)
|
||||
project: null # project name
|
||||
name: null # experiment name
|
||||
project: # project name
|
||||
name: # experiment name
|
||||
exist_ok: False # whether to overwrite existing experiment
|
||||
pretrained: False # whether to use a pretrained model
|
||||
optimizer: 'SGD' # optimizer to use, choices=['SGD', 'Adam', 'AdamW', 'RMSProp']
|
||||
verbose: False # whether to print verbose output
|
||||
optimizer: SGD # optimizer to use, choices=['SGD', 'Adam', 'AdamW', 'RMSProp']
|
||||
verbose: True # whether to print verbose output
|
||||
seed: 0 # random seed for reproducibility
|
||||
deterministic: True # whether to enable deterministic mode
|
||||
single_cls: False # train multi-class data as single-class
|
||||
@ -39,7 +39,7 @@ dropout: 0.0 # use dropout regularization (classify train only)
|
||||
val: True # validate/test during training
|
||||
save_json: False # save results to JSON file
|
||||
save_hybrid: False # save hybrid version of labels (labels + additional predictions)
|
||||
conf: null # object confidence threshold for detection (default 0.25 predict, 0.001 val)
|
||||
conf: # object confidence threshold for detection (default 0.25 predict, 0.001 val)
|
||||
iou: 0.7 # intersection over union (IoU) threshold for NMS
|
||||
max_det: 300 # maximum number of detections per image
|
||||
half: False # use half precision (FP16)
|
||||
@ -47,7 +47,7 @@ dnn: False # use OpenCV DNN for ONNX inference
|
||||
plots: True # save plots during train/val
|
||||
|
||||
# Prediction settings --------------------------------------------------------------------------------------------------
|
||||
source: null # source directory for images or videos
|
||||
source: # source directory for images or videos
|
||||
show: False # show results if possible
|
||||
save_txt: False # save results as .txt file
|
||||
save_conf: False # save results with confidence scores
|
||||
@ -59,7 +59,7 @@ line_thickness: 3 # bounding box thickness (pixels)
|
||||
visualize: False # visualize model features
|
||||
augment: False # apply image augmentation to prediction sources
|
||||
agnostic_nms: False # class-agnostic NMS
|
||||
classes: null # filter results by class, i.e. class=0, or class=[0,2,3]
|
||||
classes: # filter results by class, i.e. class=0, or class=[0,2,3]
|
||||
retina_masks: False # use high-resolution segmentation masks
|
||||
boxes: True # Show boxes in segmentation predictions
|
||||
|
||||
@ -70,7 +70,7 @@ optimize: False # TorchScript: optimize for mobile
|
||||
int8: False # CoreML/TF INT8 quantization
|
||||
dynamic: False # ONNX/TF/TensorRT: dynamic axes
|
||||
simplify: False # ONNX: simplify model
|
||||
opset: 17 # ONNX: opset version
|
||||
opset: # ONNX: opset version (optional)
|
||||
workspace: 4 # TensorRT: workspace size (GB)
|
||||
nms: False # CoreML: add NMS
|
||||
|
||||
@ -103,7 +103,7 @@ mixup: 0.0 # image mixup (probability)
|
||||
copy_paste: 0.0 # segment copy-paste (probability)
|
||||
|
||||
# Custom config.yaml ---------------------------------------------------------------------------------------------------
|
||||
cfg: null # for overriding defaults.yaml
|
||||
cfg: # for overriding defaults.yaml
|
||||
|
||||
# Debug, do not modify -------------------------------------------------------------------------------------------------
|
||||
v5loader: False # use legacy YOLOv5 dataloader
|
||||
|
Reference in New Issue
Block a user