首页 > 其他分享 >结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入 完美复现论文【附代码】

结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入 完美复现论文【附代码】

时间:2024-09-07 21:50:43浏览次数:12  
标签:Transformer parser help -- 模型 IR argument YOLOv8 weights

文章目录


前言

这期博客是在上期博客的基础上,使用YOLOv8结合Transformer完整复现了论文《Cross-Modality Fusion Transformer for Multispectral Object Detection》。此外,还使用LLVIP数据集跑了一个模型,达到了约96的精度,效果相当不错。接下来,我打算出YOLOv10多模态以及YOLOv10与Transformer结合的相关代码以及博客。如果大家有什么其他想法,欢迎在评论区告诉我~

上期博客地址:
地址:多模态YOLOv8 融合可见光+红外光(RGB+IR)双输入【附代码】

双模态模型结构图:
在这里插入图片描述


视频效果

b站链接:https://www.bilibili.com/video/BV18JpteVEav

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="S0lkKLZE-1725715644179" src="https://player.bilibili.com/player.html?aid=113095179502223"></iframe>

结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入 完美复现论文【附代码】


代码获取

完整项目获取地址:结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入


文章概述

本文将详细讲解结合Transformer的YOLOv8多模态训练、验证和推理流程。内容涵盖数据结构的定义、代码运行方法以及关键参数的含义


必要环境

  1. 配置yolov8/v10环境 可参考往期博客
    地址:搭建YOLOv10环境 训练+推理+模型评估

  2. 实现过程中参考的论文
    地址:Cross-Modality Fusion Transformer for Multispectral Object Detection


一、模型训练

1、 定义数据

1.1、数据集结构

如下图所示,分别定义红外光与可见光的数据,images文件夹下存放图像 labels图像存放标注结果(.txt)
在这里插入图片描述

上图训练案例下载链接:
https://pan.baidu.com/s/1D6CAY1dDfEfa73ezgc_gQg?pwd=pd4y

1.2、定义data.yaml

根据1.1定义的结构 依次填写路径
在这里插入图片描述

2、 运行方法

python train.py --weights yolov8n.pt --cfg models/yolov8n-transformerx3.yaml --data data.yaml --epoch 200 --batch-size 64 --workers 8

运行效果

正常训练时会打印模型在yaml文件中定义的网络结构以及rgb和ir的数据
在这里插入图片描述

关键参数详解:

  • –weights: 填写预训练模型路径,不使用预训练模型时这里为空
  • –cfg:填写网络结构的yaml文件路径,此处为models/yolov8n.yaml
  • –data: 填写定义数据集的yaml文件路径
  • –epoch: 模型每轮训练的批次,增加轮数有助于提升模型性能,但同时也会增加训练时间
  • –batch-size: 模型每轮训练的批次,可根据实际显存大小进行调整
  • –workers: 设置数据加载进程数 linux系统下一般设置为8或16,windows系统设置为0

二、模型验证

训练结束后会在最后一轮输出模型的完整指标,但如果想要单独评估一下模型,可以通过如下命令来进行

运行方法

python test.py --weights runs\train\exp\weights\best.pt --data data.yaml --batch-size 128 --conf-thres 0.001 --iou-thres 0.5

运行效果

运行成功后会输出map0.5、map0.75、map0.5:0.95、P、R以及每个类别的AP等指标
在这里插入图片描述

关键参数详解:

  • –weights: 填写想要评估模型的路径
  • –batch-size: 用于评估的批次,一般是训练时的2倍,可根据实际显存大小进行调整
  • –conf-thres: 置信度阈值,设置的越大保存的目标框越精确,同理目标数量会减小,评估阶段是默认设置为0.001,可根据实际需求进行调整
  • –iou-thres: nms阈值,设置的越小保存的目标框越精确,同理目标数量会减小,评估阶段是默认设置为0.5,可根据实际需求进行调整

三、模型推理

1. 参数定义

parser = argparse.ArgumentParser()
# 检测参数
parser.add_argument('--weights', default=r"weights\transformer_LLVIP\weights\best.pt", type=str, help='Path to model weights file.')
parser.add_argument('--image_rgb', default=r"test\rgb", type=str, help='Directory for RGB images.')
parser.add_argument('--image_ir', default=r"test\ir", type=str, help='Directory for IR images.')
parser.add_argument('--conf_thre', type=int, default=0.3, help='Confidence threshold for detections.')
parser.add_argument('--iou_thre', type=int, default=0.6, help='IoU threshold for NMS.')
parser.add_argument('--save_image', default=r"./results", type=str, help='Directory to save result images.')
parser.add_argument('--vis', default=True, action='store_true', help='Visualize images with detections.')
parser.add_argument('--device', type=str, default="0", help='Device: "0" for GPU, "cpu" for CPU.')
parser.add_argument('--imgsz', type=int, default=640, help='Input image size for inference.')
parser.add_argument('--merge_nms', default=False, action='store_true', help='Merge detections across classes.')
opt = parser.parse_args()

关键参数详解:

  • –weights: 指定用于推理的模型路径,可通过更改此路径来加载不同的权重文件
  • –image_rgb: 指定包含可见光图像的路径
  • –image_ir: 指定包含红外光图像的路径
  • –save_image: 指定推理图像保存的路径
  • –vis: 可选的标志,启用后将实时显示推理的图像,默认为True
  • –device: 指定用于处理的设备,默认是“0”表示使用cuda:0,如果设置为“cpu”,则使用CPU处理
  • –merge_nms: 可选标志,启用后将在NMS过程中合并不同类别的检测结果,默认False

2. 运行方法

改好上述参数后直接运行detect_slim.py即可

python detect_slim.py

运行效果

在这里插入图片描述

四、效果展示

白天

在这里插入图片描述

夜间

在这里插入图片描述


总结

本期博客就到这里啦,喜欢的小伙伴们可以点点关注,感谢!

最近经常在b站上更新一些有关目标检测的视频,大家感兴趣可以来看看 https://b23.tv/1upjbcG

学习交流群:995760755

标签:Transformer,parser,help,--,模型,IR,argument,YOLOv8,weights
From: https://blog.csdn.net/Dora_blank/article/details/141994743

相关文章

  • POLIR-Society-Organization-Political:Self and Identity
    POLIR-Society-Organization-Political:SelfandIdentityDon'tallowyourIdentitytobeattachedtowhatyourdid,insteadofwhoyouarecreatedtobe.Andtheproblemwiththatis,youknow,somuchofourlifecircumstancesmakeupouridentity.......
  • 天翼云存储SpinTires问题解析:d3dx9_43.dll文件丢失应对指南
    在使用天翼云存储或运行SpinTires等游戏时,有时会遇到系统提示“d3dx9_43.dll文件丢失”的错误。这个问题通常是由于DirectX组件中的d3dx9_43.dll文件未正确安装、损坏或丢失所导致的。以下是一些应对指南,帮助您解决这一问题:一、了解d3dx9_43.dll文件的重要性d3dx9_43.dll是D......
  • 情侣小窝 Like_Girl源码免费分享
    源码免费下载情侣小窝Like_Girl源码V5.1.1源码介绍前后端都是使用了grid栅格flex弹性布局高斯模糊效果前端简约配色没有过多的复杂效果前端首页分四个子页面点点滴滴留言板关于我们恋爱列表LikeGirl5.1.0调整前端点点滴滴页面内容标签样式调整前端留言......
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
    背景当您在使用npm时遇到npmERR!codeCERT_HAS_EXPIRED错误时,这通常是因为您的本地计算机上的根证书已过期。这个错误可能是由于您的操作系统或Node.js环境中的证书问题导致的。本文将介绍如何解决这个常见的问题,以确保您可以顺利使用npm进行包管理。原文链接:https://blog.c......
  • Spring 注解 @Resource 和 @Autowired 区别对比
    原文:Spring注解@Resource和@Autowired区别对比@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。共同点两者都可以写在字段和setter方法上。两者如果......
  • 事务发件箱模式在 .NET 云原生开发中的应用(基于Aspire)
    原文:TransactionalOutboxin.NETCloudNativeDevelopmentviaAspire作者:OleksiiNikiforov总览这篇文章提供了使用Aspire、DotNetCore.CAP、AzureServiceBus、AzureSQL、Bicep和azd实现Outbox模式的示例。源代码:https://github.com/NikiforovAll/cap-aspire......
  • CF1945F Kirill and Mushrooms
    题意营地里的人一睡着,基里尔就偷偷溜出帐篷,去智者橡树那里采蘑菇。众所周知,橡树下生长着\(n\)种蘑菇,每种蘑菇都有\(v_i\)的魔力。基里尔非常想用这些蘑菇制作一种魔力最大的灵药。灵药的强度等于其中蘑菇的数量与这些蘑菇中最小魔力的乘积。为了配制灵药,基里尔将依次采摘......
  • 前端常用工具网站分享:MemFire Cloud,懒人开发者的福音
    你是否曾梦想过,有那么一款工具,能够让你像变魔术一样快速搭建起一个应用,而无需深陷复杂的后端搭建和接口开发的泥潭?今天,我要为你介绍的,就是这样一个神奇的存在——MemFireCloud,一款专为懒人开发者准备的一站式开发应用的神器。懒人开发者的救星在前端开发的海洋中,MemFire......
  • Speaking-Asking for or giving directions
    1)onthesecondfloor2)taketheelevatorontheelevator 3)whenyougetoffthe elevator,turnleft4)attheendofthecorridorontherightside5)turnrightatthecornerandgostraightahead.It'sonyourright,nexttothebakeryahead......
  • 【shell脚本】使用firewall-cmd批量增加IP访问规则
    原创wsdhla想惑1025增加单个IP,并指定端口:firewall-cmd--permanent--zone=public--add-rich-rule="rulefamily="ipv4"sourceaddress="xxx.xx.xx.xxx"portprotocol="tcp"port="54321"accept"批量增加IP访问规则,使用脚本:batch-ad......