Udacity/交通识别数据集,图片数量15000,交通识别数据集

发布时间:2026/7/7 15:02:11
Udacity/交通识别数据集,图片数量15000,交通识别数据集 Udacity/交通识别数据集图片数量15000xml和txt标签都有YOL0交通识别图片数量15000xml 和txt标签都有;class: biker car, pedestrian, trafficLight, trafficLi ght-Green, traff i cLi ght -Gr eenLefttrafficLi ght -Red, trafficLi ght -RedLeft, trafficL ight -YellowtrafficLight -Yel lowLefttruck (也可按需求除去其中- -些类别)Udacity交通识别数据集并提供基于YOLOv8的训练代码。这个数据集包含15000张图像标注了10类检测目标。标注格式为YOLO格式和XML格式可以直接用于深度模型训练。1. 数据集介绍数据集目录结构假设你的数据集已经准备好并且分为训练集、验证集和测试集。数据集目录结构如下udacity_traffic_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels_voc/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels_yolo/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml数据集标注格式YOLO格式的标注文件是TXT文件每行表示一个目标格式如下class_id center_x center_y width height其中class_id是类别的索引从0开始。center_x和center_y是目标框中心点的归一化坐标。width和height是目标框宽度和高度的归一化值。2. 数据集配置文件 (data.yaml)创建一个data.yaml文件配置数据集的路径和类别信息path:./udacity_traffic_dataset# 数据集路径train:images/train# 训练集图像路径val:images/val# 验证集图像路径test:images/test# 测试集图像路径nc:10# 类别数names:-biker-car-pedestrian-trafficLight-trafficLight-Green-trafficLight-GreenLeft-trafficLight-Red-trafficLight-RedLeft-trafficLight-Yellow-trafficLight-YellowLeft-truck# 如果需要去除某些类别可以在这里删除相应的条目3. 转换标注格式假设标注文件是VOC格式的XML文件我们需要将它们转换为YOLO格式的TXT文件。转换脚本importxml.etree.ElementTreeasETimportosdefconvert_voc_to_yolo(voc_file,yolo_file,class_names):treeET.parse(voc_file)roottree.getroot()widthint(root.find(size/width).text)heightint(root.find(size/height).text)withopen(yolo_file,w)asf:forobjinroot.findall(object):class_nameobj.find(name).textifclass_namenotinclass_names:continueclass_idclass_names.index(class_name)bboxobj.find(bndbox)x_minfloat(bbox.find(xmin).text)y_minfloat(bbox.find(ymin).text)x_maxfloat(bbox.find(xmax).text)y_maxfloat(bbox.find(ymax).text)x_center(x_minx_max)/2.0/width y_center(y_miny_max)/2.0/height w(x_max-x_min)/width h(y_max-y_min)/height f.write(f{class_id}{x_center}{y_center}{w}{h}\n)defconvert_all_voc_to_yolo(voc_dir,yolo_dir,class_names):os.makedirs(yolo_dir,exist_okTrue)forfilenameinos.listdir(voc_dir):iffilename.endswith(.xml):voc_fileos.path.join(voc_dir,filename)yolo_fileos.path.join(yolo_dir,filename.replace(.xml,.txt))convert_voc_to_yolo(voc_file,yolo_file,class_names)if__name____main__:class_names[biker,car,pedestrian,trafficLight,trafficLight-Green,trafficLight-GreenLeft,trafficLight-Red,trafficLight-RedLeft,trafficLight-Yellow,trafficLight-YellowLeft,truck# 如果需要去除某些类别可以在这里删除相应的条目]voc_train_dirudacity_traffic_dataset/labels_voc/trainyolo_train_dirudacity_traffic_dataset/labels_yolo/trainconvert_all_voc_to_yolo(voc_train_dir,yolo_train_dir,class_names)voc_val_dirudacity_traffic_dataset/labels_voc/valyolo_val_dirudacity_traffic_dataset/labels_yolo/valconvert_all_voc_to_yolo(voc_val_dir,yolo_val_dir,class_names)voc_test_dirudacity_traffic_dataset/labels_voc/testyolo_test_dirudacity_traffic_dataset/labels_yolo/testconvert_all_voc_to_yolo(voc_test_dir,yolo_test_dir,class_names)4. 训练脚本 (train.py)fromultralyticsimportYOLOdeftrain_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment):# 加载模型modelYOLO(model_config)# 训练模型resultsmodel.train(datadata_yaml_path,epochsepochs,batchbatch_size,imgszimg_size,augmentaugment)# 保存模型model.save(runs/train/udacity_traffic/best.pt)if__name____main__:data_yaml_pathudacity_traffic_dataset/data.yamlmodel_configyolov8n.yaml# 你可以选择不同的YOLOv8模型配置如yolov8s.yaml, yolov8m.yaml等epochs100batch_size16img_size640augmentTruetrain_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment)5. 预测脚本 (predict.py)importcv2importtorchfromultralyticsimportYOLOdefpredict_image(image_path,model_path,img_size640):# 加载模型modelYOLO(model_path)# 读取图像imagecv2.imread(image_path)image_rgbcv2.cvtColor(image,cv2.COLOR_BGR2RGB)# 进行预测resultsmodel(image_rgb,sizeimg_size)# 处理预测结果forresultinresults:boxesresult.boxes.xyxy.cpu().numpy()scoresresult.boxes.conf.cpu().numpy()labelsresult.boxes.cls.cpu().numpy().astype(int)forbox,score,labelinzip(boxes,scores,labels):x1,y1,x2,y2map(int,box)class_name[biker,car,pedestrian,trafficLight,trafficLight-Green,trafficLight-GreenLeft,trafficLight-Red,trafficLight-RedLeft,trafficLight-Yellow,trafficLight-YellowLeft,truck][label]color(0,255,0)iflabel2else(0,0,255)cv2.rectangle(image,(x1,y1),(x2,y2),color,2)cv2.putText(image,f{class_name}{score:.2f},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,color,2)# 显示图像cv2.imshow(Prediction,image)cv2.waitKey(0)cv2.destroyAllWindows()if__name____main__:image_pathpath_to_your_image.jpgmodel_pathruns/train/udacity_traffic/best.ptpredict_image(image_path,model_path)6. 运行脚本转换标注格式python convert_voc_to_yolo.py训练模型python train.py进行预测python predict.py7. 详细解释转换标注格式脚本 (convert_voc_to_yolo.py)导入依赖项import xml.etree.ElementTree as ET导入XML解析库。import os导入操作系统接口库。定义转换函数convert_voc_to_yolo将单个VOC格式的XML文件转换为YOLO格式的TXT文件。convert_all_voc_to_yolo将指定目录下的所有VOC格式的XML文件转换为YOLO格式的TXT文件。主函数设置类别名称和各个子集的路径。调用convert_all_voc_to_yolo函数进行转换。训练脚本 (train.py)导入依赖项from ultralytics import YOLO导入YOLOv8模型。定义训练函数train_model加载模型设置训练参数训练模型并保存最佳模型。主函数设置数据集路径、模型配置、训练参数等。调用train_model函数进行训练。预测脚本 (predict.py)导入依赖项import cv2导入OpenCV库。import torch导入PyTorch库。from ultralytics import YOLO导入YOLOv8模型。定义预测函数predict_image加载模型读取图像进行预测处理预测结果并显示带有标注的图像。主函数设置图像路径和模型路径。调用predict_image函数进行预测。8. 注意事项数据集路径确保数据集路径正确特别是data.yaml文件中的路径。模型配置可以选择不同的YOLOv8模型配置如yolov8s.yaml,yolov8m.yaml等根据你的计算资源和需求选择合适的模型。图像大小img_size可以根据实际需求调整通常使用640或1280。数据增强augment参数控制是否启用数据增强可以在训练过程中提高模型的泛化能力。9. 数据增强为了增加数据集的多样性可以使用数据增强技术。YOLOv8在训练过程中默认支持多种数据增强方法如随机裁剪、翻转、颜色抖动等。如果需要自定义数据增强可以参考YOLOv8的文档进行配置。总结通过以上步骤你可以构建一个基于YOLOv8模型的Udacity交通识别系统。convert_voc_to_yolo.py用于将VOC格式的标注文件转换为YOLO格式train.py用于训练模型predict.py用于加载训练好的模型并进行预测。