|
|
|
import shutil
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
import hydra
|
|
|
|
|
|
|
|
import ultralytics
|
|
|
|
from ultralytics import yolo
|
|
|
|
|
|
|
|
from .utils import DEFAULT_CONFIG, LOGGER, colorstr
|
|
|
|
|
|
|
|
|
|
|
|
@hydra.main(version_base=None, config_path="configs", config_name="default")
|
|
|
|
def cli(cfg):
|
|
|
|
cwd = Path().cwd()
|
|
|
|
LOGGER.info(f"{colorstr(f'Ultralytics YOLO v{ultralytics.__version__}')}")
|
|
|
|
task, mode = cfg.task.lower(), cfg.mode.lower()
|
|
|
|
|
|
|
|
if task == "init": # special case
|
|
|
|
shutil.copy2(DEFAULT_CONFIG, cwd)
|
|
|
|
LOGGER.info(f"""
|
|
|
|
{colorstr("YOLO:")} configuration saved to {cwd / DEFAULT_CONFIG.name}.
|
|
|
|
To run experiments using custom configuration:
|
|
|
|
yolo task='task' mode='mode' --config-name config_file.yaml
|
|
|
|
""")
|
|
|
|
return
|
|
|
|
|
|
|
|
elif task == "detect":
|
|
|
|
module = yolo.v8.detect
|
|
|
|
elif task == "segment":
|
|
|
|
module = yolo.v8.segment
|
|
|
|
elif task == "classify":
|
|
|
|
module = yolo.v8.classify
|
|
|
|
elif task == "export":
|
|
|
|
func = yolo.trainer.exporter.export_model
|
|
|
|
else:
|
|
|
|
raise SyntaxError("task not recognized. Choices are `'detect', 'segment', 'classify'`")
|
|
|
|
|
|
|
|
if mode == "train":
|
|
|
|
func = module.train
|
|
|
|
elif mode == "val":
|
|
|
|
func = module.val
|
|
|
|
elif mode == "predict":
|
|
|
|
func = module.predict
|
|
|
|
elif mode == "export":
|
|
|
|
func = yolo.trainer.exporter.export_model
|
|
|
|
else:
|
|
|
|
raise SyntaxError("mode not recognized. Choices are `'train', 'val', 'predict', 'export'`")
|
|
|
|
func(cfg)
|