yolo系列免环境训练工具 支持yolov8-13 可目标检测,obb,分类,分割,关键点训练。
yolov12免环境训练工具 支持yolov8-13 可目标检测,obb,分类,分割,关键点训练。![]()
1
1
1
✅ 项目目标:构建一个「免环境配置」的 YOLO 多版本训练工具
以下代码仅供参考
功能说明:
- 支持 YOLOv8 / v10 / v11,12(部分 v11 变体)
- 支持任务:
detect,segment,classify,obb,pose - 支持模型大小:
n,s,m,l,x - 支持
.pt模型加载与继续训练 - 支持导出 ONNX 模型
- 图形化界面(PyQt5/6)
- 自动检测 GPU / CPU
- 日志实时输出
- 免安装依赖(打包成 exe)
📌 本方案将使用Python + PyQt5 + ultralytics实现,最终打包为 Windows
.exe文件,实现“免环境”运行。
🧩 一、技术栈
| 组件 | 版本/用途 |
|---|---|
| Python | 3.10+ |
| PySide6 / PyQt5 | GUI 框架(推荐 PySide6) |
| ultralytics | YOLOv8 官方库(支持 v10/v11 推理) |
| onnxruntime | ONNX 导出支持 |
| PyInstaller | 打包为 .exe |
📁 二、项目目录结构
YoloTrainTool/ ├── main.py # 主程序入口 ├── ui_main.py # UI 界面(由 Qt Designer 生成) ├── train.py # 训练逻辑封装 ├── export_onnx.py # ONNX 导出函数 ├── requirements.txt # 依赖包 └── dist/ # 打包后输出目录📦 三、依赖文件(requirements.txt)
ultralytics==8.3.0 PySide6==6.6.0 onnxruntime==1.14.0 opencv-python==4.8.0 numpy==1.24.0 torch==2.0.1+cu118 torchvision==0.15.2+cu118安装命令:
pipinstall-rrequirements.txt🖼️ 四、UI 界面设计(ui_main.py)
使用 Qt Designer 设计界面,然后保存为
.ui文件,再用pyuic6转换为 Python 代码。
示例界面功能(对应截图):
| 控件 | 功能 |
|---|---|
| 下拉菜单 | 选择训练设备(GPU/CPU) |
| 下拉菜单 | 选择任务类型(detect, segment, etc.) |
| 下拉菜单 | 选择模型版本(v8, v10, v11) |
| 下拉菜单 | 选择模型大小(n/s/m/l/x) |
| 输入框 | 图像尺寸(640) |
| 输入框 | 训练次数(100) |
| 下拉菜单 | 是否启用 AMP 加速 |
| 输入框 | Batch Size(32) |
| 下拉菜单 | 线程数(4) |
| 复选框 | 是否继续训练 |
| 文本框 | 模型路径(.pt) |
| 按钮 | “开始训练”、“停止训练” |
| 按钮 | “导出 ONNX 模型” |
| 文本区域 | 日志输出窗口 |
🧠 五、核心训练逻辑(train.py)
# train.pyimportosfromultralyticsimportYOLOimporttorchclassYOLOTrainer:def__init__(self):self.model=Noneself.task="detect"self.model_version="v8"self.model_size="s"self.imgsz=640self.epochs=100self.batch=32self.device="cuda"iftorch.cuda.is_available()else"cpu"self.amp=Trueself.workers=4self.continue_train=Falseself.pt_path=Nonedefload_model(self):model_name=f"yolov{self.model_version}{self.model_size}.pt"ifself.pt_pathandos.path.exists(self.pt_path):self.model=YOLO(self.pt_path)else:self.model=YOLO(model_name)# 默认加载预训练模型returnself.modeldeftrain(self,data_yaml):try:self.load_model()results=self.model.train(data=data_yaml,epochs=self.epochs,imgsz=self.imgsz,batch=self.batch,device=self.device,workers=self.workers,amp=self.amp,name=f"yolo_{self.model_version}_{self.task}",exist_ok=True,resume=self.continue_train)returnresultsexceptExceptionase:print(f"❌ 训练失败:{e}")returnNone🎯 六、主程序(main.py)
# main.pyimportsysimportosfromPySide6.QtWidgetsimportQApplication,QMainWindow,QFileDialogfromui_mainimportUi_MainWindowfromtrainimportYOLOTrainerimportthreadingimporttimeclassMainWindow(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)self.trainer=YOLOTrainer()self.log_text=""self.running=Falseself.thread=None# 连接按钮事件self.pushButton_start.clicked.connect(self.start_training)self.pushButton_stop.clicked.connect(self.stop_training)self.pushButton_export.clicked.connect(self.export_onnx)self.pushButton_browse.clicked.connect(self.browse_pt_file)# 设置默认值self.comboBox_task.setCurrentText("detect")self.comboBox_model.setCurrentText("v8")self.comboBox_size.setCurrentText("s")defbrowse_pt_file(self):file_path,_=QFileDialog.getOpenFileName(self,"选择 .pt 模型","","PT Files (*.pt)")iffile_path:self.lineEdit_pt.setText(file_path)defstart_training(self):ifself.running:returnself.running=Trueself.pushButton_start.setEnabled(False)self.pushButton_stop.setEnabled(True)# 获取参数self.trainer.task=self.comboBox_task.currentText()self.trainer.model_version=self.comboBox_model.currentText()self.trainer.model_size=self.comboBox_size.currentText()self.trainer.imgsz=int(self.lineEdit_imgsz.text())self.trainer.epochs=int(self.lineEdit_epochs.text())self.trainer.batch=int(self.lineEdit_batch.text())self.trainer.amp=self.checkBox_amp.isChecked()self.trainer.workers=int(self.lineEdit_workers.text())self.trainer.continue_train=self.checkBox_resume.isChecked()self.trainer.pt_path=self.lineEdit_pt.text()# 启动训练线程self.thread=threading.Thread(target=self.run_training)self.thread.start()defrun_training(self):data_yaml="data.yaml"# 假设用户已放置数据集self.append_log("🚀 开始训练...")results=self.trainer.train(data_yaml)ifresults:self.append_log("✅ 训练完成!")else:self.append_log("❌ 训练失败!")self.running=Falseself.pushButton_start.setEnabled(True)self.pushButton_stop.setEnabled(False)defstop_training(self):self.running=Falseself.append_log("🛑 训练已停止。")defappend_log(self,msg):self.textEdit_log.append(msg)self.textEdit_log.verticalScrollBar().setValue(self.textEdit_log.verticalScrollBar().maximum())defexport_onnx(self):model_path="runs/detect/yolo_v8_detect/weights/best.pt"ifnotos.path.exists(model_path):self.append_log("❌ 未找到最佳模型!")returnfromultralyticsimportYOLO model=YOLO(model_path)model.export(format='onnx')self.append_log("✅ ONNX 模型已导出!")if__name__=="__main__":app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec())📦 七、打包为可执行文件(PyInstaller)
# 创建 spec 文件pyinstaller--onefile--windowedmain.py--name"YoloTrainTool"# 或者手动指定pyinstaller--onefile\--windowed\--icon=icon.ico\--name="YoloTrainTool"\main.py输出路径:
dist/YoloTrainTool.exe
🛠 八、使用说明(用户端)
- 下载
.exe文件; - 解压到任意目录;
- 双击运行;
- 配置参数后点击“开始训练”;
- 支持继续训练和导出 ONNX;
- 日志实时显示在右侧窗口。
您提供的截图显示的是一个基于 YOLOv13 的免环境训练工具界面,但需要明确:
❌目前不存在官方的 YOLOv13 模型。
Ultralytics 官方最新版本为YOLOv8,后续 v9/v10/v11 是社区或第三方实现。
因此,该“YOLOv13”实为对 YOLOv8 或 YOLOv10 的封装与重命名,通过 GUI 界面简化训练流程,并支持多任务(检测、分割、关键点等)。
✅ 项目目标:构建「YOLOv13 免环境训练工具」(实际基于 YOLOv8)
功能说明:
- 支持
detect,segment,pose,classify,obb - 支持模型大小:
n,s,m,l,x - 支持
.pt模型加载与继续训练 - 支持导出 ONNX 模型
- 图形化界面(PyQt5/6)
- 自动检测 GPU / CPU
- 日志实时输出
- 打包为
.exe实现“免环境”
🧩 一、技术栈
| 组件 | 版本/用途 |
|---|---|
| Python | 3.10+ |
| PySide6 / PyQt5 | GUI 框架 |
| ultralytics | YOLOv8 官方库(支持 v10/v11 推理) |
| onnxruntime | ONNX 导出支持 |
| PyInstaller | 打包为 .exe |
📁 二、项目目录结构
YoloV13_TrainTool/ ├── main.py # 主程序入口 ├── ui_main.py # UI 界面(由 Qt Designer 生成) ├── train.py # 训练逻辑封装 ├── export_onnx.py # ONNX 导出函数 ├── requirements.txt # 依赖包 └── dist/ # 打包后输出目录📦 三、依赖文件(requirements.txt)
ultralytics==8.3.0 PySide6==6.6.0 onnxruntime==1.14.0 opencv-python==4.8.0 numpy==1.24.0 torch==2.0.1+cu118 torchvision==0.15.2+cu118安装命令:
pipinstall-rrequirements.txt🖼️ 四、UI 界面设计(ui_main.py)
使用 Qt Designer 设计界面,保存为
.ui文件,再用pyuic6转换为 Python 代码。
示例界面功能(对应截图):
| 控件 | 功能 |
|---|---|
| 下拉菜单 | 选择设备(GPU/CPU) |
| 下拉菜单 | 选择任务类型(detect, segment, etc.) |
| 下拉菜单 | 选择模型版本(v8, v10, v11) |
| 下拉菜单 | 选择模型大小(n/s/m/l/x) |
| 输入框 | 图像尺寸(640) |
| 输入框 | 训练次数(100) |
| 输入框 | 模型保存频率(10) |
| 下拉菜单 | 是否启用 AMP 加速 |
| 输入框 | Batch Size(48) |
| 输入框 | Workers(8) |
| 复选框 | 是否继续训练 |
| 文本框 | 模型路径(.pt) |
| 按钮 | “开始训练”、“停止训练” |
| 按钮 | “导出模型” |
| 文本区域 | 日志输出窗口 |
🧠 五、核心训练逻辑(train.py)
# train.pyimportosfromultralyticsimportYOLOimporttorchclassYOLOTrainer:def__init__(self):self.model=Noneself.task="detect"self.model_version="v8"self.model_size="s"self.imgsz=640self.epochs=100self.save_period=10self.batch=48self.workers=8self.amp=Trueself.device="cuda"iftorch.cuda.is_available()else"cpu"self.continue_train=Falseself.pt_path=Nonedefload_model(self):model_name=f"yolov{self.model_version}{self.model_size}.pt"ifself.pt_pathandos.path.exists(self.pt_path):self.model=YOLO(self.pt_path)else:self.model=YOLO(model_name)# 默认加载预训练模型returnself.modeldeftrain(self,data_yaml):try:self.load_model()results=self.model.train(data=data_yaml,epochs=self.epochs,imgsz=self.imgsz,batch=self.batch,device=self.device,workers=self.workers,amp=self.amp,name=f"yolo_{self.model_version}_{self.task}",exist_ok=True,resume=self.continue_train,save_period=self.save_period)returnresultsexceptExceptionase:print(f"❌ 训练失败:{e}")returnNone🎯 六、主程序(main.py)
# main.pyimportsysimportosfromPySide6.QtWidgetsimportQApplication,QMainWindow,QFileDialogfromui_mainimportUi_MainWindowfromtrainimportYOLOTrainerimportthreadingimporttimeclassMainWindow(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)self.trainer=YOLOTrainer()self.log_text=""self.running=Falseself.thread=None# 连接按钮事件self.pushButton_start.clicked.connect(self.start_training)self.pushButton_stop.clicked.connect(self.stop_training)self.pushButton_export.clicked.connect(self.export_onnx)self.pushButton_browse.clicked.connect(self.browse_pt_file)# 设置默认值self.comboBox_task.setCurrentText("detect")self.comboBox_model.setCurrentText("v8")self.comboBox_size.setCurrentText("s")defbrowse_pt_file(self):file_path,_=QFileDialog.getOpenFileName(self,"选择 .pt 模型","","PT Files (*.pt)")iffile_path:self.lineEdit_pt.setText(file_path)defstart_training(self):ifself.running:returnself.running=Trueself.pushButton_start.setEnabled(False)self.pushButton_stop.setEnabled(True)# 获取参数self.trainer.task=self.comboBox_task.currentText()self.trainer.model_version=self.comboBox_model.currentText()self.trainer.model_size=self.comboBox_size.currentText()self.trainer.imgsz=int(self.lineEdit_imgsz.text())self.trainer.epochs=int(self.lineEdit_epochs.text())self.trainer.save_period=int(self.lineEdit_save_period.text())self.trainer.batch=int(self.lineEdit_batch.text())self.trainer.workers=int(self.lineEdit_workers.text())self.trainer.amp=self.checkBox_amp.isChecked()self.trainer.continue_train=self.checkBox_resume.isChecked()self.trainer.pt_path=self.lineEdit_pt.text()# 启动训练线程self.thread=threading.Thread(target=self.run_training)self.thread.start()defrun_training(self):data_yaml="data.yaml"# 假设用户已放置数据集self.append_log("🚀 开始训练...")results=self.trainer.train(data_yaml)ifresults:self.append_log("✅ 训练完成!")else:self.append_log("❌ 训练失败!")self.running=Falseself.pushButton_start.setEnabled(True)self.pushButton_stop.setEnabled(False)defstop_training(self):self.running=Falseself.append_log("🛑 训练已停止。")defappend_log(self,msg):self.textEdit_log.append(msg)self.textEdit_log.verticalScrollBar().setValue(self.textEdit_log.verticalScrollBar().maximum())defexport_onnx(self):model_path="runs/detect/yolo_v8_detect/weights/best.pt"ifnotos.path.exists(model_path):self.append_log("❌ 未找到最佳模型!")returnfromultralyticsimportYOLO model=YOLO(model_path)model.export(format='onnx')self.append_log("✅ ONNX 模型已导出!")if__name__=="__main__":app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec())📦 七、打包为可执行文件(PyInstaller)
# 创建 spec 文件pyinstaller--onefile--windowedmain.py--name"YoloV13TrainTool"# 或者手动指定pyinstaller--onefile\--windowed\--icon=icon.ico\--name="YoloV13TrainTool"\main.py输出路径:
dist/YoloV13TrainTool.exe
