交通标志数据集 识别交通道路中的警告,禁止性,强制性交通标识 使用 Python 深度学习 YOLOv8训练 CCTSDB 交通标志数据集 识别交通道路中的警告禁止性强制性交通标识文章目录使用 Python 深度学习 YOLOv8训练 CCTSDB 交通标志数据集 识别交通道路中的警告禁止性强制性交通标识**1. 安装依赖****2. 准备数据集**数据集结构data.yaml 文件**3. 训练 YOLOv8 模型**训练脚本**4. 推理代码****5. 训练评估****6. 构建 GUI 应用程序****7. 运行应用程序**以下文字及代码仅供参考。CCTSDB 交通标志数据集3 个分类分别为 mandatory、prohibition、warning 。标签 txt 格式train12499 张val3571 张test1786 张 total:17856 张安装依赖、准备数据集、训练 YOLOv8 模型、推理代码、评估模型性能到构建 GUI 应用程序的详细步骤。使用 Python 和相关的深度学习工具如 Ultralytics 的 YOLOv8。1. 安装依赖首先确保你已经安装了必要的库和依赖项。# 创建虚拟环境可选python-mvenv yolov8_envsourceyolov8_env/bin/activate# Linux/MacOSyolov8_env\Scripts\activate# Windows# 升级 pippipinstall--upgradepip# 安装依赖pipinstallultralytics opencv-python matplotlib pyqt52. 准备数据集数据集结构假设你的数据集已经标注为 YOLO 格式并按照以下目录结构组织CCTSDB/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ └── ... │ ├── val/ │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ └── ... │ └── test/ │ ├── img1.jpg │ ├── img2.jpg │ └── ... ├── labels/ │ ├── train/ │ │ ├── img1.txt │ │ ├── img2.txt │ │ └── ... │ ├── val/ │ │ ├── img1.txt │ │ ├── img2.txt │ │ └── ... │ └── test/ │ ├── img1.txt │ ├── img2.txt │ └── ... └── data.yamldata.yaml文件创建一个data.yaml文件来描述数据集的配置train:CCTSDB/images/trainval:CCTSDB/images/valtest:CCTSDB/images/testnc:3# 类别数量names:[mandatory,prohibition,warning]# 类别名称3. 训练 YOLOv8 模型训练脚本使用 Ultralytics 提供的 YOLOv8 API 进行训练fromultralyticsimportYOLO# 加载预训练模型modelYOLO(yolov8n.pt)# 使用 YOLOv8 Nano 模型# 开始训练resultsmodel.train(dataCCTSDB/data.yaml,# 数据集配置文件路径epochs50,# 训练轮数imgsz640,# 输入图像大小batch16,# 批量大小device0# GPU 设备编号使用 CPU 设置为 cpu)# 导出最佳权重model.export(formatonnx)# 可导出为 ONNX 格式以用于部署4. 推理代码训练完成后可以使用保存的模型进行推理。fromultralyticsimportYOLOimportcv2# 加载训练好的模型modelYOLO(runs/detect/train/weights/best.pt)# 测试图像image_pathCCTSDB/images/test/img1.jpgresultsmodel(image_path)# 显示结果forresultinresults:boxesresult.boxes.xyxy.cpu().numpy()# 边界框classesresult.boxes.cls.cpu().numpy()# 类别索引confidencesresult.boxes.conf.cpu().numpy()# 置信度# 绘制边界框imagecv2.imread(image_path)forbox,cls,confinzip(boxes,classes,confidences):x1,y1,x2,y2map(int,box)labelf{model.names[int(cls)]}{conf:.2f}cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(image,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)# 显示图像cv2.imshow(Result,image)cv2.waitKey(0)cv2.destroyAllWindows()5. 训练评估Ultralytics 的 YOLOv8 会在训练过程中自动生成评估指标如 mAP。你可以查看runs/detect/train/results.csv文件中的详细信息。此外可以使用以下代码手动评估模型fromultralyticsimportYOLO# 加载模型modelYOLO(runs/detect/train/weights/best.pt)# 验证模型metricsmodel.val(dataCCTSDB/data.yaml)print(metrics.box.map)# 输出 mAP 值6. 构建 GUI 应用程序使用 PyQt5 构建一个简单的 GUI 应用程序用于加载图像并显示检测结果。fromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QFileDialogfromPyQt5.QtGuiimportQPixmap,QImagefromultralyticsimportYOLOimportcv2importsysclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(交通标志检测)self.setGeometry(100,100,800,600)# 加载模型self.modelYOLO(runs/detect/train/weights/best.pt)# UI 元素self.labelQLabel(self)self.label.setGeometry(50,50,700,400)self.buttonQPushButton(选择图片,self)self.button.setGeometry(300,500,200,50)self.button.clicked.connect(self.load_image)defload_image(self):# 打开文件对话框file_path,_QFileDialog.getOpenFileName(self,选择图片,,Images (*.jpg *.png))iffile_path:# 检测图像imagecv2.imread(file_path)resultsself.model(image)forresultinresults:boxesresult.boxes.xyxy.cpu().numpy()classesresult.boxes.cls.cpu().numpy()forbox,clsinzip(boxes,classes):x1,y1,x2,y2map(int,box)cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(image,self.model.names[int(cls)],(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)# 转换为 Qt 图像格式height,width,channelimage.shape bytes_per_line3*width q_imgQImage(image.data,width,height,bytes_per_line,QImage.Format_RGB888).rgbSwapped()# 显示图像self.label.setPixmap(QPixmap.fromImage(q_img))if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())7. 运行应用程序运行上述代码启动 GUI 应用程序。用户可以通过界面加载图像并查看检测结果。