news 2026/4/23 15:00:59

使用 YOLOv8 进行训练无人机视角的可见光-红外火点和烟雾检测数据集红外可见光配对 双模态输入(多模态)无人机红外可见光火灾烟雾数据集的训练评估及推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 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_envpython=3.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_ok=True)withopen(coco_json,'r')asf:data=json.load(f)images={img['id']:imgforimgindata['images']}annotations=data['annotations']foranninannotations:img_id=ann['image_id']img_info=images[img_id]img_w,img_h=img_info['width'],img_info['height']bbox=ann['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 width=bbox[2]/img_w height=bbox[3]/img_h class_id=ann['category_id']txt_file=os.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_ratio=0.8,val_ratio=0.1):os.makedirs(os.path.join(output_dir,'images/train'),exist_ok=True)os.makedirs(os.path.join(output_dir,'images/val'),exist_ok=True)os.makedirs(os.path.join(output_dir,'images/test'),exist_ok=True)os.makedirs(os.path.join(output_dir,'labels/train'),exist_ok=True)os.makedirs(os.path.join(output_dir,'labels/val'),exist_ok=True)os.makedirs(os.path.join(output_dir,'labels/test'),exist_ok=True)images=os.listdir(image_dir)random.shuffle(images)train_split=int(len(images)*train_ratio)val_split=int(len(images)*(train_ratio+val_ratio))train_images=images[:train_split]val_images=images[train_split:val_split]test_images=images[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# 加载预训练模型model=YOLO('yolov8n.pt')# 可选择其他模型:'yolov8s.pt', 'yolov8m.pt'# 配置超参数并训练model.train(data='path/to/data.yaml',epochs=100,batch=16,imgsz=640,device=0)# 使用 GPU

6. 模型推理

训练完成后,可以加载模型进行推理。

单张图片推理
fromultralyticsimportYOLO# 加载训练好的模型model=YOLO('runs/detect/train/weights/best.pt')# 推理单张图片results=model('path/to/image.jpg')# 可视化结果results.show()
批量推理
fromultralyticsimportYOLO# 加载训练好的模型model=YOLO('runs/detect/train/weights/best.pt')# 批量推理results=model(['path/to/image1.jpg','path/to/image2.jpg'])# 保存结果fori,rinenumerate(results):r.save(filename=f'result_{i}.jpg')

7. 性能评估

使用验证集评估模型性能。

fromultralyticsimportYOLO# 加载训练好的模型model=YOLO('runs/detect/train/weights/best.pt')# 评估模型metrics=model.val()# 自动使用验证集print(metrics.box.map)# mAP@0.5print(metrics.box.map50)# mAP@0.5:0.95

8. 多模态数据融合(可选)

如果需要结合可见光和红外图像进行多模态学习,可以尝试以下方法:

8.1 图像融合

将可见光和红外图像进行特征级或像素级融合:

importcv2importnumpyasnpdeffuse_images(rgb_image_path,ir_image_path,output_path):rgb_image=cv2.imread(rgb_image_path)ir_image=cv2.imread(ir_image_path,cv2.IMREAD_GRAYSCALE)# 将红外图像转为伪彩色ir_color=cv2.applyColorMap(ir_image,cv2.COLORMAP_JET)# 图像融合fused_image=cv2.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)来支持双模态输入。


总结

从数据准备到模型训练、推理和评估的完整流程。同学你可以根据具体需求调整超参数或数据增强策略以进一步提升模型性能。对于多模态数据,建议探索更复杂的融合方法,例如深度学习中的多流网络架构。

以上文章仅供参考。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:59:33

踩坑实战pywebview:用 Python + Web 技术打造轻量级桌面应用

如果你想用 Python 快速做一个桌面应用&#xff0c;但又不想陷入复杂的原生 UI 开发&#xff08;如 Qt、Win32、Cocoa&#xff09;中&#xff0c;那么 pywebview 是一个非常值得关注的方案。 它的核心思想很直接&#xff1a;用 Web 页面做界面&#xff0c;用 Python 写业务逻辑…

作者头像 李华
网站建设 2026/4/23 14:56:19

手把手教你用Keil uVision仿真器调试STM32代码(无开发板也能跑)

手把手教你用Keil uVision仿真器调试STM32代码&#xff08;无开发板也能跑&#xff09; 在嵌入式开发领域&#xff0c;硬件资源往往是初学者的第一道门槛。当手头没有开发板时&#xff0c;很多人会陷入"巧妇难为无米之炊"的困境。但你可能不知道&#xff0c;Keil uVi…

作者头像 李华
网站建设 2026/4/23 14:47:57

如何轻松下载国内七大视频平台内容:Video-Downloader完整指南

如何轻松下载国内七大视频平台内容&#xff1a;Video-Downloader完整指南 【免费下载链接】Video-Downloader 下载youku,letv,sohu,tudou,bilibili,acfun,iqiyi等网站分段视频文件&#xff0c;提供mac&win独立App。 项目地址: https://gitcode.com/gh_mirrors/vi/Video-D…

作者头像 李华
网站建设 2026/4/23 14:46:51

彻底解决Deno模块导入路径异常问题:5个实用技巧指南

彻底解决Deno模块导入路径异常问题&#xff1a;5个实用技巧指南 【免费下载链接】deno A modern runtime for JavaScript and TypeScript. 项目地址: https://gitcode.com/GitHub_Trending/de/deno Deno作为一款现代JavaScript和TypeScript运行时&#xff0c;以其安全默…

作者头像 李华
网站建设 2026/4/23 14:45:11

从产线实战出发:干法刻蚀终点检测的三大方法(OES/白光干涉/参数记录)如何选型与避坑

半导体干法刻蚀终点检测&#xff1a;产线工程师的选型决策框架与实战指南 在28纳米以下节点的半导体制造中&#xff0c;干法刻蚀终点检测的精度直接决定器件性能的良率边界。我曾亲眼见证某12英寸产线因终点误判导致整批晶圆过度刻蚀30%&#xff0c;造成近千万损失——这个惨痛…

作者头像 李华