ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

yolo系列免环境训练工具 支持yolov8-13 可目标检测,obb,分类,分割,关键点训练。

2026/8/4 16:01:11 拓冰建站 浏览量
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文件,实现“免环境”运行。


🧩 一、技术栈

组件版本/用途
Python3.10+
PySide6 / PyQt5GUI 框架(推荐 PySide6)
ultralyticsYOLOv8 官方库(支持 v10/v11 推理)
onnxruntimeONNX 导出支持
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


🛠 八、使用说明(用户端)

  1. 下载.exe文件;
  2. 解压到任意目录;
  3. 双击运行;
  4. 配置参数后点击“开始训练”;
  5. 支持继续训练和导出 ONNX;
  6. 日志实时显示在右侧窗口。

您提供的截图显示的是一个基于 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实现“免环境”

🧩 一、技术栈

组件版本/用途
Python3.10+
PySide6 / PyQt5GUI 框架
ultralyticsYOLOv8 官方库(支持 v10/v11 推理)
onnxruntimeONNX 导出支持
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