探索实践低光照场景下YOLOv5s模型上限,融合CBAM注意力机制开发构建基于改进YOLOv5s的低光照条件下目标检测识别分析系统

news2024/11/13 9:00:52

在现实生活场景里面,很多场景下光线光照条件都是比较差的,比如夜晚、室内等,这时候以往的目标检测模型是否还能够胜任我们所需的目标检测任务呢?这里主要的想法就是基于地光线条件下的数据集来开发构建目标检测系统,探索分析传统轻量级的检测模型在这样场景下是否还具备竞争力。

首先看下效果图:

简单看下数据集,数据集来源于网络源:

 可以看到:整体数据的光线光照条件都是很一般的。

标注文件如下所示:

 实例标注内容如下:

4 0.344675 0.89645 0.204142 0.100592
11 0.702663 0.885602 0.156805 0.094675
7 0.840237 0.894477 0.189349 0.100592
6 0.230769 0.822485 0.053254 0.031558
8 0.482249 0.861933 0.100592 0.051282
0 0.428994 0.844181 0.065089 0.043393

 这里主要的基准模型是yolov5s,如下:

# Parameters
nc: 12
depth_multiple: 0.33
width_multiple: 0.50


anchors:
  - [10,13, 16,30, 33,23]
  - [30,61, 62,45, 59,119] 
  - [116,90, 156,198, 373,326]



backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],    # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],    # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],    # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],   # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],      # 9
  ]



head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

加入CBAM注意力机制的改进模型如下:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 12  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32



#Backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]



#Head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
   [-1, 1, CBAM, [1024]], 

   [[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

默认都是100次epoch的迭代计算,看下模型对比结果。

原生YOLOv5s模型结果如下:

 

改进后的YOLOv5s模型结果如下:

这里着重对比的就是模型的F1和PR曲线,这是能够比较全面综合体现模型性能指标的,但是不够直观不够立体,这里绘制对比曲线来进行详细对比。

首先是模型的F1值对比曲线,如下:

 可以看到:最初的时候改进模型略占下风,之后和原生模型部分伯仲,最终超出原生模型。

接下来是精确率曲线:

 接下来是召回率对比曲线:

最后我们还对比分析了两款模型整体训练-验证loss曲线,如下:

 整体呈现出来的规律都是接近或者是相似的。

轻量级的YOLOv5s表现出来的性能已经是相对可以的了。

这里突然想到,m系列的模型是否会更好呢,这里我也同样做了原始YOLOv5m和改进版YOLOv5m的模型,整体的构建原理与YOLOv5s是一致的,这里就不再赘述了,直接看下最终的对比结果好了。

 从图表数据呈现出来的结果来看:m系列的模型要更胜一筹,不过本身m的参数量级就更大,结果好也是预料之中的事情,感兴趣的话可以继续坐下l系列和x系列的模型,相信结果会更好的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flowable6.x导出/查看/跟踪流程图(续)

书接上回 项目源码仓库 无论是待办、已办,亦或是流转中、已结束的流程实例,通过使用JS绘制SVG格式的交互式流程图,与以上篇博文中三种方式相比,在效果上都具有明显优势。 运行效果如下图所示: 整合、改造Flowable中…

110.【23种设计模式--创建者模式】

Java 23种设计模式 (一)、设计模式相关内容介绍1.软件设计模式概述(1).软件设计模式的产生背景(2).软件设计模式的概念(3).学习设计模式的重要性(4).设计模式分类 2.UML图(1).类图概述(2).类图的作用(3).类图表示法 3.软件设计原则(1).开闭原则 (重写不修改)(2).里氏代换原则 (…

node的安装与卸载

node的安装与卸载 今天遇到个问题 使用npm命令时报错显示栈溢出,所以将node重装了一下, 一.卸载node: 1.在程序与功能里卸载node.js,然后删除node相关文件夹,此次安装我将node安装在C盘里,将他的全局缓存…

10万字信用大数据一体化监管平台建设方案word

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1.1、 系统主要功能需求分析 XX公共信用信息管理系统的主要业务流程包括信用信息资源编录管理流程、信用信息归集流程、信用信息服务流程和信用信息异议处理流程。 一.1.1…

NLP作业01:利用HMM实现词性标注

作业头 这个作业属于哪个课程自然语言处理这个作业要求在哪里利用HMM实现词性标注作业要求我在这个课程的目标实现词性标注这个作业在哪个具体方面帮助我实现目标代码实现参考文献1.隐马尔科夫模型 2.基于HMM的词性标注  3.基于HMMViterbi算法的词性标注 Python 文章目录 作…

【LeetCode: 673. 最长递增子序列的个数 | 动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

LeetCode 热题 HOT 100:从前序与中序遍历序列构造二叉树、二叉树展开为链表、二叉树中的最大路径和

LeetCode 热题 HOT 100 105. 从前序与中序遍历序列构造二叉树 题目: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历, 请构造二叉树并返回其根节点。 示例 1&#xff1…

webassembly——同源策略问题的处理(浏览器不能加载本地资源的问题)

原因:在用chatGPT生成可视化地图前端文件后,打开不能正常显示 WebAssembly是一种新的二进制代码格式,它可以提供更高的性能和更好的安全性。WebAssembly遵循同源策略,这意味着只有与运行WebAssembly代码相同域名下的JavaScript代码…

Linux --- 常用命令

一、常用命令 1.1、常用命令演示 在这一部分中,我们主要介绍几个常用的命令,让大家快速感受以下Linux指令的操作方式。主要包含 以下几个指令: 1.2、Linux命令使用技巧 在我们使用Linux系统命令时,可以使用以下几个技巧&#x…

丹麦PR electronics信号隔离器3185A1 3185A2安全栅

应用 1:1 标准电流信号隔离,信号范围 0(4)...20 mA。标准 DIN 导轨安装。无论在技术或是成本上,都是电流信号电气隔离的选择。能有效抑制浪涌电流,保护控制系统远离信号噪声和瞬变的影响。消除接地环路和测量浮地信号。安装于安全区域或 Zon…

03、Cadence使用记录之超多引脚元器件的快速创建方法(OrCAD Capture CIS)

03、Cadence使用记录之超多引脚元器件的快速创建方法(OrCAD Capture CIS) 参考的教程是B站的视频:allegro软件入门视频教程全集100讲 前置教程: 01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrC…

个人建议:真的不要去小公司...

软件测试人员如果想要有更好的发展真的不要去小公司! 为什么? 小公司的测试团队相对较小,往往只有一两个人,缺乏资源和技术支持,难以优化测试流程和提高测试效率。 小公司一般缺乏完善的软件开发流程和质量管理体系&a…

基于LSTM神经网络的通用股票预测源代码+模型+数据集

基于神经网络的通用股票预测模 下载地址:基于LSTM神经网络的通用股票预测源代码模型数据集 0 使用方法 How to use 使用getdata.py下载数据,或者使用自己的数据源,将数据放在stock_daily目录下 使用data_preprocess.py预处理数据&#xff…

基于RK3568的Linux驱动开发——GPIO知识点(一)

authordaisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主系列基于RK3568的Linux驱动开发—— GPIO知识点(二)_daisy.skye的博客-CSDN博客 gpio bank RK3568 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0-A7、B0-B7、 C0-C7、 D0…

CSS基础样式

1.高度和宽度 .c1{height:300px;width:500px; } 注意事项: 宽度,支持百分比 行内标签:默认无效 块级标签:默认有效(右侧区域就算是空白,也不给占用) 2.块级和行内标签 css样式:标签…

软件工程实验:用例图设计

目录 前言 实验目的 实验要求 实验步骤 结果展示 总结 前言 软件工程导论实验是一门旨在培养学生掌握软件开发过程中的基本方法和技能的课程。本实验的主题是用例图设计,用例图是一种描述系统功能需求的图形化工具,它可以帮助分析和设计系统的行为…

初识Tkinter弹窗

Tkinter弹窗 Tkinter是什么 Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面&#xff…

【蓝桥杯省赛真题17】python删除字符串 青少年组蓝桥杯python编程省赛真题解析

目录 python删除字符串 一、题目要求 1、编程实现 2、输入输出 二、解题思路

Qt创建SDK库(dll动态库)并调用SDK库(dll动态库)

Qt创建SDK库(dll动态库)并调用SDK库(dll动态库) 一、项目场景 在日常的项目中,我们经常会遇到调用别人的数学库、线程库、图形库等操作。这些库通常就被称为SDK,SDK全称是Software Development Kit(软件开发工具包),…

【C++ 五】结构体

结构体 文章目录 结构体前言1 结构体基本概念2 结构体定义和使用3 结构体数组4 结构体指针5 结构体嵌套结构体6 结构体做函数参数7 结构体中 const 使用场景8 结构体案例8.1 案例一8.2 案例二 总结 前言 本文包含结构体基本概念、结构体定义和使用、结构体数组、结构体指针、结…