使用深度学习框架目标检测算法 YOLOv8 训练交通红绿灯数据集建立基于深度学习卷积神经网络的道路交通红绿灯检测系统 从环境搭建、数据准备模型训练及评估。文章目录使用深度学习框架目标检测算法 YOLOv8 训练交通红绿灯数据集建立基于深度学习卷积神经网络的道路交通红绿灯检测系统 从环境搭建、数据准备模型训练及评估。**1. 环境搭建****2. 数据准备****2.1 数据格式转换****3. 数据划分****4. 数据配置****5. 模型训练****6. 模型推理****单张图片推理****批量推理****7. 性能评估**交通红绿灯数据集 红绿灯检测数据集 交通信号灯检测数据集10742张3类8:1:1比例划分YOLO适用的txt格式。可以直接用于模型训练使用 YOLOv8 训练交通红绿灯数据集的详细步骤和代码。从环境搭建、数据准备、格式转换、数据划分、模型训练到性能评估一步步进行。—1. 环境搭建确保安装了 Python 和必要的依赖库。推荐使用conda创建虚拟环境。# 安装 conda如果未安装wgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbashMiniconda3-latest-Linux-x86_64.sh# 创建虚拟环境conda create-nyolov8_envpython3.9conda activate yolov8_env# 安装 PyTorch 和 torchvisionpipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# CUDA 11.8# 如果没有 GPU可以使用 CPU 版本# pip install torch torchvision torchaudio# 安装 ultralytics (YOLOv8 的官方库)pipinstallultralytics2. 数据准备假设你的数据集已经标注为 YOLO 格式txt 文件每张图片对应一个 txt 文件内容如下class_id x_center y_center width height如果没有标注需要先使用工具如 LabelImg 或 CVAT完成标注并将标注文件转换为 YOLO 格式。2.1 数据格式转换如果你的数据集是 COCO 或 Pascal VOC 格式可以使用以下脚本将其转换为 YOLO 格式importosimportjsondefconvert_coco_to_yolo(coco_json,output_dir):os.makedirs(output_dir,exist_okTrue)withopen(coco_json,r)asf:datajson.load(f)images{img[id]:imgforimgindata[images]}annotationsdata[annotations]foranninannotations:img_idann[image_id]img_infoimages[img_id]img_w,img_himg_info[width],img_info[height]bboxann[bbox]# [x_min, y_min, width, height]# 转换为 YOLO 格式x_center(bbox[0]bbox[2]/2)/img_w y_center(bbox[1]bbox[3]/2)/img_h widthbbox[2]/img_w heightbbox[3]/img_h class_idann[category_id]txt_fileos.path.join(output_dir,os.path.splitext(img_info[file_name])[0].txt)withopen(txt_file,a)asf_txt:f_txt.write(f{class_id}{x_center:.6f}{y_center:.6f}{width:.6f}{height:.6f}\n)# 示例调用convert_coco_to_yolo(path/to/coco_annotations.json,path/to/yolo_labels)3. 数据划分按照 8:1:1 的比例划分训练集、验证集和测试集。importosimportrandomimportshutildefsplit_dataset(image_dir,label_dir,output_dir,train_ratio0.8,val_ratio0.1):os.makedirs(os.path.join(output_dir,images/train),exist_okTrue)os.makedirs(os.path.join(output_dir,images/val),exist_okTrue)os.makedirs(os.path.join(output_dir,images/test),exist_okTrue)os.makedirs(os.path.join(output_dir,labels/train),exist_okTrue)os.makedirs(os.path.join(output_dir,labels/val),exist_okTrue)os.makedirs(os.path.join(output_dir,labels/test),exist_okTrue)imagesos.listdir(image_dir)random.shuffle(images)train_splitint(len(images)*train_ratio)val_splitint(len(images)*(train_ratioval_ratio))train_imagesimages[:train_split]val_imagesimages[train_split:val_split]test_imagesimages[val_split:]forimgintrain_images:shutil.copy(os.path.join(image_dir,img),os.path.join(output_dir,images/train,img))shutil.copy(os.path.join(label_dir,os.path.splitext(img)[0].txt),os.path.join(output_dir,labels/train,os.path.splitext(img)[0].txt))forimginval_images:shutil.copy(os.path.join(image_dir,img),os.path.join(output_dir,images/val,img))shutil.copy(os.path.join(label_dir,os.path.splitext(img)[0].txt),os.path.join(output_dir,labels/val,os.path.splitext(img)[0].txt))forimgintest_images:shutil.copy(os.path.join(image_dir,img),os.path.join(output_dir,images/test,img))shutil.copy(os.path.join(label_dir,os.path.splitext(img)[0].txt),os.path.join(output_dir,labels/test,os.path.splitext(img)[0].txt))# 示例调用split_dataset(path/to/images,path/to/labels,path/to/split_data)4. 数据配置创建data.yaml文件定义数据集路径和类别信息train:path/to/split_data/images/trainval:path/to/split_data/images/valtest:path/to/split_data/images/testnc:3# 类别数量names:[red_light,yellow_light,green_light]# 类别名称5. 模型训练使用ultralytics库进行模型训练。fromultralyticsimportYOLO# 加载预训练模型modelYOLO(yolov8n.pt)# 可选择其他模型yolov8s.pt, yolov8m.pt# 配置超参数并训练model.train(datapath/to/data.yaml,epochs100,batch16,imgsz640,device0)# 使用 GPU6. 模型推理训练完成后可以加载模型进行推理。单张图片推理fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(runs/detect/train/weights/best.pt)# 推理单张图片resultsmodel(path/to/image.jpg)# 可视化结果results.show()批量推理fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(runs/detect/train/weights/best.pt)# 批量推理resultsmodel([path/to/image1.jpg,path/to/image2.jpg])# 保存结果fori,rinenumerate(results):r.save(filenamefresult_{i}.jpg)7. 性能评估使用验证集评估模型性能。fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(runs/detect/train/weights/best.pt)# 评估模型metricsmodel.val()# 自动使用验证集print(metrics.box.map)# mAP0.5print(metrics.box.map50)# mAP0.5:0.95y以下文字及代码仅供参考。