使用 YOLOv8 进行训练无人机视角的可见光-红外火点和烟雾检测数据集红外可见光配对 双模态输入(多模态)无人机红外可见光火灾烟雾数据集的训练评估及推理
使用 YOLOv8 进行训练无人机视角的可见光-红外配对火点和烟雾检测数据集 双模态输入多模态无人机红外可见光火灾烟雾数据集的训练评估及推理以下文字及代码可供参考。仅供参考。文章目录**1. 环境搭建****2. 数据准备****2.1 数据格式转换COCO 到 YOLO****3. 数据划分****4. 数据配置****5. 模型训练****6. 模型推理****单张图片推理****批量推理****7. 性能评估****8. 多模态数据融合可选****8.1 图像融合****8.2 修改 YOLO 输入****总结**无人机视角可见光-红外配对的火点烟雾检测数据集1200余对可见光-红外图像拍摄森林火灾情况yolo标注1基于无人机视角的可见光-红外配对火点和烟雾检测数据集的详细处理流程。同学使用 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 的官方库)pipinstallultralytics# 其他依赖库pipinstallopencv-python matplotlib numpy只是假设2. 数据准备假设你的数据集已经标注为 YOLO 格式txt 文件每张图片对应一个 txt 文件内容如下class_id x_center y_center width height如果你的数据集是其他格式如 Pascal VOC 或 COCO需要先将其转换为 YOLO 格式。2.1 数据格式转换COCO 到 YOLO如果数据集是 COCO 格式可以使用以下脚本将其转换为 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:2# 类别数量火点和烟雾names:[fire,smoke]# 类别名称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.958. 多模态数据融合可选如果需要结合可见光和红外图像进行多模态学习可以尝试以下方法8.1 图像融合将可见光和红外图像进行特征级或像素级融合importcv2importnumpyasnpdeffuse_images(rgb_image_path,ir_image_path,output_path):rgb_imagecv2.imread(rgb_image_path)ir_imagecv2.imread(ir_image_path,cv2.IMREAD_GRAYSCALE)# 将红外图像转为伪彩色ir_colorcv2.applyColorMap(ir_image,cv2.COLORMAP_JET)# 图像融合fused_imagecv2.addWeighted(rgb_image,0.7,ir_color,0.3,0)# 保存融合图像cv2.imwrite(output_path,fused_image)# 示例调用fuse_images(path/to/rgb.jpg,path/to/ir.jpg,path/to/fused.jpg)8.2 修改 YOLO 输入在训练时可以通过修改输入通道数从 3 改为 6来支持双模态输入。总结从数据准备到模型训练、推理和评估的完整流程。同学你可以根据具体需求调整超参数或数据增强策略以进一步提升模型性能。对于多模态数据建议探索更复杂的融合方法例如深度学习中的多流网络架构。以上文章仅供参考。