
雨天道路目标检测数据集 3600张 雨天 带标注 voc yolo白天分类名: (图片张数 标注个数)car: (1134 10528)truck: (394 722)person: (387 1585)rider: (47 56)bike: (64, 86) .bus:(187 256)motor :(2932)总数: (1150 13265)总类(nc): 7类晚上分类名: (图片张数 标注个数)car: (2470 21655)truck: (384 499)per son:(510 1532)bus: (220 248)bike: (76 121)rider: (64, 71)motor: (43 49)总数: (2494 24175)总类(nc): 7类构建一个基于YOLOv8模型的雨天道路目标检测系统。我们将使用PyTorch 1.10.0并提供两个主要程序一个是train.py用于训练模型另一个是predict.py用于加载训练好的模型并进行预测。1. 环境准备首先确保你已经安装了所需的依赖项。你可以使用以下命令安装这些依赖项pipinstalltorch1.10.0 torchvision matplotlib opencv-python ultralytics2. 数据集准备假设你的数据集已经准备好并且分为训练集和验证集。数据集目录结构如下rainy_road_dataset/ ├── images/ │ ├── train_day/ │ ├── val_day/ │ ├── train_night/ │ └── val_night/ ├── labels_voc/ │ ├── train_day/ │ ├── val_day/ │ ├── train_night/ │ └── val_night/ ├── labels_yolo/ │ ├── train_day/ │ ├── val_day/ │ ├── train_night/ │ └── val_night/ └── data.yaml3. 数据集配置文件 (data.yaml)创建一个data.yaml文件配置数据集的路径和类别信息path:./rainy_road_dataset# 数据集路径train_day:images/train_day# 白天训练集图像路径val_day:images/val_day# 白天验证集图像路径train_night:images/train_night# 晚上训练集图像路径val_night:images/val_night# 晚上验证集图像路径nc:7# 类别数names:[car,truck,person,rider,bike,bus,motor]# 类别名称4. 转换标注格式假设标注文件是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[car,truck,person,rider,bike,bus,motor]voc_train_day_dirrainy_road_dataset/labels_voc/train_dayyolo_train_day_dirrainy_road_dataset/labels_yolo/train_dayconvert_all_voc_to_yolo(voc_train_day_dir,yolo_train_day_dir,class_names)voc_val_day_dirrainy_road_dataset/labels_voc/val_dayyolo_val_day_dirrainy_road_dataset/labels_yolo/val_dayconvert_all_voc_to_yolo(voc_val_day_dir,yolo_val_day_dir,class_names)voc_train_night_dirrainy_road_dataset/labels_voc/train_nightyolo_train_night_dirrainy_road_dataset/labels_yolo/train_nightconvert_all_voc_to_yolo(voc_train_night_dir,yolo_train_night_dir,class_names)voc_val_night_dirrainy_road_dataset/labels_voc/val_nightyolo_val_night_dirrainy_road_dataset/labels_yolo/val_nightconvert_all_voc_to_yolo(voc_val_night_dir,yolo_val_night_dir,class_names)5. 训练脚本 (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/rainy_road/best.pt)if__name____main__:data_yaml_pathrainy_road_dataset/data.yamlmodel_configyolov8n.yamlepochs100batch_size16img_size640augmentTruetrain_model(data_yaml_path,model_config,epochs,batch_size,img_size,augment)6. 预测脚本 (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[car,truck,person,rider,bike,bus,motor][label]color(0,255,0)iflabel0else(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/rainy_road/best.ptpredict_image(image_path,model_path)7. 运行脚本转换标注格式python convert_voc_to_yolo.py训练模型python train.py进行预测python predict.py8. 详细解释转换标注格式脚本 (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函数进行预测。总结通过以上步骤你可以构建一个基于YOLOv8模型的雨天道路目标检测系统。convert_voc_to_yolo.py用于将VOC格式的标注文件转换为YOLO格式train.py用于训练模型predict.py用于加载训练好的模型并进行预测