尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

yolo系列免环境训练工具 支持yolov8-13 可目标检测,obb,分类,分割,关键点训练。 yolov12免环境训练工具 支持yolov8-13 可目标检测obb分类分割关键点训练。111✅ 项目目标构建一个「免环境配置」的 YOLO 多版本训练工具以下代码仅供参考功能说明支持 YOLOv8 / v10 / v1112部分 v11 变体支持任务detect,segment,classify,obb,pose支持模型大小n,s,m,l,x支持.pt模型加载与继续训练支持导出 ONNX 模型图形化界面PyQt5/6自动检测 GPU / CPU日志实时输出免安装依赖打包成 exe 本方案将使用Python PyQt5 ultralytics实现最终打包为 Windows.exe文件实现“免环境”运行。 一、技术栈组件版本/用途Python3.10PySide6 / PyQt5GUI 框架推荐 PySide6ultralyticsYOLOv8 官方库支持 v10/v11 推理onnxruntimeONNX 导出支持PyInstaller打包为 .exe 二、项目目录结构YoloTrainTool/ ├── main.py # 主程序入口 ├── ui_main.py # UI 界面由 Qt Designer 生成 ├── train.py # 训练逻辑封装 ├── export_onnx.py # ONNX 导出函数 ├── requirements.txt # 依赖包 └── dist/ # 打包后输出目录 三、依赖文件requirements.txtultralytics8.3.0 PySide66.6.0 onnxruntime1.14.0 opencv-python4.8.0 numpy1.24.0 torch2.0.1cu118 torchvision0.15.2cu118安装命令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 Size32下拉菜单线程数4复选框是否继续训练文本框模型路径.pt按钮“开始训练”、“停止训练”按钮“导出 ONNX 模型”文本区域日志输出窗口 五、核心训练逻辑train.py# train.pyimportosfromultralyticsimportYOLOimporttorchclassYOLOTrainer:def__init__(self):self.modelNoneself.taskdetectself.model_versionv8self.model_sizesself.imgsz640self.epochs100self.batch32self.devicecudaiftorch.cuda.is_available()elsecpuself.ampTrueself.workers4self.continue_trainFalseself.pt_pathNonedefload_model(self):model_namefyolov{self.model_version}{self.model_size}.ptifself.pt_pathandos.path.exists(self.pt_path):self.modelYOLO(self.pt_path)else:self.modelYOLO(model_name)# 默认加载预训练模型returnself.modeldeftrain(self,data_yaml):try:self.load_model()resultsself.model.train(datadata_yaml,epochsself.epochs,imgszself.imgsz,batchself.batch,deviceself.device,workersself.workers,ampself.amp,namefyolo_{self.model_version}_{self.task},exist_okTrue,resumeself.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.trainerYOLOTrainer()self.log_textself.runningFalseself.threadNone# 连接按钮事件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.runningTrueself.pushButton_start.setEnabled(False)self.pushButton_stop.setEnabled(True)# 获取参数self.trainer.taskself.comboBox_task.currentText()self.trainer.model_versionself.comboBox_model.currentText()self.trainer.model_sizeself.comboBox_size.currentText()self.trainer.imgszint(self.lineEdit_imgsz.text())self.trainer.epochsint(self.lineEdit_epochs.text())self.trainer.batchint(self.lineEdit_batch.text())self.trainer.ampself.checkBox_amp.isChecked()self.trainer.workersint(self.lineEdit_workers.text())self.trainer.continue_trainself.checkBox_resume.isChecked()self.trainer.pt_pathself.lineEdit_pt.text()# 启动训练线程self.threadthreading.Thread(targetself.run_training)self.thread.start()defrun_training(self):data_yamldata.yaml# 假设用户已放置数据集self.append_log( 开始训练...)resultsself.trainer.train(data_yaml)ifresults:self.append_log(✅ 训练完成)else:self.append_log(❌ 训练失败)self.runningFalseself.pushButton_start.setEnabled(True)self.pushButton_stop.setEnabled(False)defstop_training(self):self.runningFalseself.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_pathruns/detect/yolo_v8_detect/weights/best.ptifnotos.path.exists(model_path):self.append_log(❌ 未找到最佳模型)returnfromultralyticsimportYOLO modelYOLO(model_path)model.export(formatonnx)self.append_log(✅ ONNX 模型已导出)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec()) 七、打包为可执行文件PyInstaller# 创建 spec 文件pyinstaller--onefile--windowedmain.py--nameYoloTrainTool# 或者手动指定pyinstaller--onefile\--windowed\--iconicon.ico\--nameYoloTrainTool\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实现“免环境” 一、技术栈组件版本/用途Python3.10PySide6 / 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.txtultralytics8.3.0 PySide66.6.0 onnxruntime1.14.0 opencv-python4.8.0 numpy1.24.0 torch2.0.1cu118 torchvision0.15.2cu118安装命令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 Size48输入框Workers8复选框是否继续训练文本框模型路径.pt按钮“开始训练”、“停止训练”按钮“导出模型”文本区域日志输出窗口 五、核心训练逻辑train.py# train.pyimportosfromultralyticsimportYOLOimporttorchclassYOLOTrainer:def__init__(self):self.modelNoneself.taskdetectself.model_versionv8self.model_sizesself.imgsz640self.epochs100self.save_period10self.batch48self.workers8self.ampTrueself.devicecudaiftorch.cuda.is_available()elsecpuself.continue_trainFalseself.pt_pathNonedefload_model(self):model_namefyolov{self.model_version}{self.model_size}.ptifself.pt_pathandos.path.exists(self.pt_path):self.modelYOLO(self.pt_path)else:self.modelYOLO(model_name)# 默认加载预训练模型returnself.modeldeftrain(self,data_yaml):try:self.load_model()resultsself.model.train(datadata_yaml,epochsself.epochs,imgszself.imgsz,batchself.batch,deviceself.device,workersself.workers,ampself.amp,namefyolo_{self.model_version}_{self.task},exist_okTrue,resumeself.continue_train,save_periodself.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.trainerYOLOTrainer()self.log_textself.runningFalseself.threadNone# 连接按钮事件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.runningTrueself.pushButton_start.setEnabled(False)self.pushButton_stop.setEnabled(True)# 获取参数self.trainer.taskself.comboBox_task.currentText()self.trainer.model_versionself.comboBox_model.currentText()self.trainer.model_sizeself.comboBox_size.currentText()self.trainer.imgszint(self.lineEdit_imgsz.text())self.trainer.epochsint(self.lineEdit_epochs.text())self.trainer.save_periodint(self.lineEdit_save_period.text())self.trainer.batchint(self.lineEdit_batch.text())self.trainer.workersint(self.lineEdit_workers.text())self.trainer.ampself.checkBox_amp.isChecked()self.trainer.continue_trainself.checkBox_resume.isChecked()self.trainer.pt_pathself.lineEdit_pt.text()# 启动训练线程self.threadthreading.Thread(targetself.run_training)self.thread.start()defrun_training(self):data_yamldata.yaml# 假设用户已放置数据集self.append_log( 开始训练...)resultsself.trainer.train(data_yaml)ifresults:self.append_log(✅ 训练完成)else:self.append_log(❌ 训练失败)self.runningFalseself.pushButton_start.setEnabled(True)self.pushButton_stop.setEnabled(False)defstop_training(self):self.runningFalseself.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_pathruns/detect/yolo_v8_detect/weights/best.ptifnotos.path.exists(model_path):self.append_log(❌ 未找到最佳模型)returnfromultralyticsimportYOLO modelYOLO(model_path)model.export(formatonnx)self.append_log(✅ ONNX 模型已导出)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec()) 七、打包为可执行文件PyInstaller# 创建 spec 文件pyinstaller--onefile--windowedmain.py--nameYoloV13TrainTool# 或者手动指定pyinstaller--onefile\--windowed\--iconicon.ico\--nameYoloV13TrainTool\main.py输出路径dist/YoloV13TrainTool.exe
返回列表