From 6a3754421bd2cf1beea75ed52a1ce82b682039a1 Mon Sep 17 00:00:00 2001 From: tian Date: Mon, 16 Mar 2026 16:14:03 +0800 Subject: [PATCH] Fix ROI training batch launcher --- 12_train_roi_yolov8s_640.bat | 168 +++++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 65 deletions(-) diff --git a/12_train_roi_yolov8s_640.bat b/12_train_roi_yolov8s_640.bat index 186b9d3..a5aa504 100644 --- a/12_train_roi_yolov8s_640.bat +++ b/12_train_roi_yolov8s_640.bat @@ -1,92 +1,130 @@ @echo off +setlocal chcp 65001 >nul cls -set "REPO_DIR=%~dp0" +for %%I in ("%~dp0.") do set "REPO_DIR=%%~fI" pushd "%REPO_DIR%" -set "YOLO_LAUNCHER=" +set "YOLO_MODE=" where yolo >nul 2>nul -if %ERRORLEVEL% equ 0 set "YOLO_LAUNCHER=yolo" +if %ERRORLEVEL% equ 0 goto launcher_cli -if not defined YOLO_LAUNCHER ( - py -3.11 -c "import ultralytics" >nul 2>nul - if %ERRORLEVEL% equ 0 set "YOLO_LAUNCHER=py -3.11 -m ultralytics" -) +py -3.11 -c "import ultralytics" >nul 2>nul +if %ERRORLEVEL% equ 0 goto launcher_py -if not defined YOLO_LAUNCHER ( - python -c "import ultralytics" >nul 2>nul - if %ERRORLEVEL% equ 0 set "YOLO_LAUNCHER=python -m ultralytics" -) +python -c "import ultralytics" >nul 2>nul +if %ERRORLEVEL% equ 0 goto launcher_python -if not defined YOLO_LAUNCHER ( - echo [错误] 未找到可用的 Ultralytics 启动方式 - echo. - echo 请先确保满足以下任一条件: - echo 1. yolo 命令已加入 PATH - echo 2. py -3.11 可运行并已安装 ultralytics - echo 3. python 可运行并已安装 ultralytics - popd - pause - exit /b 1 -) - -set "DATASET=%REPO_DIR%datasets\shoe-roi-mix\data.yaml" - -if not exist "%DATASET%" ( - echo [错误] 找不到 ROI 数据集配置: %DATASET% - echo. - echo 请先构建 ROI 数据集: - echo python "%REPO_DIR%09_build_roi_shoe_dataset.py" --clean - popd - pause - exit /b 1 -) - -echo ============================================================ -echo 训练鞋子 ROI 检测模型 (YOLOv8s + 640x640) -echo ============================================================ -echo. -echo [信息] 数据集: %DATASET% -echo [信息] 模型: yolov8s.pt +echo [ERROR] No usable Ultralytics launcher was found. echo. +echo Make sure one of the following works: +echo 1. yolo is in PATH +echo 2. py -3.11 can import ultralytics +echo 3. python can import ultralytics +goto fail +:launcher_cli +set "YOLO_MODE=cli" +goto launcher_done + +:launcher_py +set "YOLO_MODE=py" +goto launcher_done + +:launcher_python +set "YOLO_MODE=python" +goto launcher_done + +:launcher_done +set "DATASET=%REPO_DIR%\datasets\shoe-roi-mix\data.yaml" +set "MODEL=yolov8s.pt" set "EPOCHS=150" set "IMGSZ=640" set "BATCH=16" -set "PROJECT=%REPO_DIR%runs\roi_yolov8s_640" +set "PROJECT=%REPO_DIR%\runs\roi_yolov8s_640" set "RUN_NAME=train_roi" -echo 训练参数: -echo - Epochs: %EPOCHS% -echo - Image Size: %IMGSZ%x%IMGSZ% -echo - Batch Size: %BATCH% -echo - Device: GPU (cuda:0) -echo - Project: %PROJECT% -echo - Run Name: %RUN_NAME% ^(已存在时会自动递增,不覆盖旧模型^) -echo. +if defined DATASET_OVERRIDE set "DATASET=%DATASET_OVERRIDE%" +if defined MODEL_OVERRIDE set "MODEL=%MODEL_OVERRIDE%" +if defined EPOCHS_OVERRIDE set "EPOCHS=%EPOCHS_OVERRIDE%" +if defined IMGSZ_OVERRIDE set "IMGSZ=%IMGSZ_OVERRIDE%" +if defined BATCH_OVERRIDE set "BATCH=%BATCH_OVERRIDE%" +if defined PROJECT_OVERRIDE set "PROJECT=%PROJECT_OVERRIDE%" +if defined RUN_NAME_OVERRIDE set "RUN_NAME=%RUN_NAME_OVERRIDE%" -echo ============================================================ -echo 开始训练 -echo ============================================================ -echo. - -call %YOLO_LAUNCHER% detect train data="%DATASET%" model="yolov8s.pt" epochs=%EPOCHS% imgsz=%IMGSZ% batch=%BATCH% device=0 project="%PROJECT%" name="%RUN_NAME%" - -if %ERRORLEVEL% neq 0 ( +if not exist "%DATASET%" ( + echo [ERROR] ROI dataset yaml not found: %DATASET% echo. - echo [错误] 训练失败! - popd - pause - exit /b 1 + echo Build the ROI dataset first: + echo python "%REPO_DIR%\09_build_roi_shoe_dataset.py" --clean + goto fail ) -echo. echo ============================================================ -echo 训练完成! +echo Train ROI Shoe Detector ^(YOLOv8s + 640x640^) echo ============================================================ echo. -echo 模型输出目录: %PROJECT% +echo [INFO] Repo: %REPO_DIR% +echo [INFO] Dataset: %DATASET% +echo [INFO] Model: %MODEL% +echo [INFO] Launcher: %YOLO_MODE% +echo. +echo Training params: +echo Epochs: %EPOCHS% +echo Image Size: %IMGSZ%x%IMGSZ% +echo Batch Size: %BATCH% +echo Device: GPU ^(cuda:0^) +echo Project: %PROJECT% +echo Run Name: %RUN_NAME% +echo. + +if defined DRY_RUN ( + echo [INFO] DRY_RUN is set. Exiting before training. + goto success +) + +if "%YOLO_MODE%"=="cli" goto run_cli +if "%YOLO_MODE%"=="py" goto run_py +if "%YOLO_MODE%"=="python" goto run_python + +echo [ERROR] Internal launcher selection error. +goto fail + +:run_cli +yolo detect train data="%DATASET%" model="%MODEL%" epochs=%EPOCHS% imgsz=%IMGSZ% batch=%BATCH% device=0 project="%PROJECT%" name="%RUN_NAME%" +goto check_result + +:run_py +py -3.11 -m ultralytics detect train data="%DATASET%" model="%MODEL%" epochs=%EPOCHS% imgsz=%IMGSZ% batch=%BATCH% device=0 project="%PROJECT%" name="%RUN_NAME%" +goto check_result + +:run_python +python -m ultralytics detect train data="%DATASET%" model="%MODEL%" epochs=%EPOCHS% imgsz=%IMGSZ% batch=%BATCH% device=0 project="%PROJECT%" name="%RUN_NAME%" +goto check_result + +:check_result +if %ERRORLEVEL% neq 0 ( + echo. + echo [ERROR] Training failed. + goto fail +) + +:success +echo. +echo ============================================================ +echo Training Complete +echo ============================================================ +echo. +echo Output project: %PROJECT% +echo. +popd +endlocal +exit /b 0 + +:fail echo. popd pause +endlocal +exit /b 1