基于融合SPD+BIFPN+CBAM改进YOLOv5的奶牛检测识别分析系统开发

news2025/1/10 2:18:27

在我之前的几篇文章中分别应用了不同的tricks来改进yolov5模型如下:

加入针对小目标的SPD-Conv模块

《yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别》

加入BIFPN特征融合模块

《基于yolov5s+bifpn实践隧道裂缝裂痕检测》

加入注意力机制模块

《YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统》

感兴趣的话可以自行移步阅读。

本文主要是实际项目需要,针对摄像机拍摄到的奶牛的数据进行检测,考虑到真实情况复杂的问题,这里考虑将一些优化技术加入到原生的yolov5中以期来提升模型的检测性能。首先看下效果:

这里主要加入了:注意力模块CBAM、特征提取模块BIFPN和小目标优化技术SPD-Conv,基准模型是yolov5s,兼顾精度和速度。

直接看下yaml文件,如下:

#Parameters
nc: 1  # 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, Focus, [64, 3]],     # 0-P1/2
   [-1, 1, Conv, [128, 3, 1]],  # 1
   [-1,1,SPD,[1]],   # 2 -P2/4
   [-1, 3, C3, [128]],          # 3
   [-1, 1, Conv, [256, 3, 1]],  # 4
   [-1,1,SPD,[1]],   # 5 -P3/8
   [-1, 6, C3, [256]],          # 6
   [-1, 1, Conv, [512, 3, 1]],  # 7-P4/16
   [-1,1,SPD,[1]],   # 8 -P4/16
   [-1, 9, C3, [512]],          # 9
   [-1, 1, Conv, [1024, 3, 1]], # 10-P5/32
   [-1,1,SPD,[1]],   # 11 -P5/32
   [-1, 3, C3, [1024]],         # 12
   [-1, 1, SPPF, [1024, 5]],    # 13
  ]



#Head
head:
  [[-1, 1, Conv, [512, 1, 1]],                     #14
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],     #15
   [[-1, 9], 1, BiFPND, [256, 256]],               #16 
   [-1, 3, C3, [512, False]],                      #17

   [-1, 1, Conv, [256, 1, 1]],                     #18
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],     #19
   [[-1, 6], 1, BiFPND, [128, 128]],               #20 
   [-1, 3, C3, [256, False]],                      #21 

   [-1, 1, Conv, [512, 3, 2]],                     #22
   [[-1, 17, 9], 1, BiFPNT, [256, 256]],          #23
   [-1, 3, C3, [512, False]],                      #24 

   [-1, 1, Conv, [512, 3, 2]],                     #25
   [[-1, 14], 1, BiFPND, [256, 256]],              #26
   [-1, 3, C3, [1024, False]],                     #27 
   [-1, 1, CBAM, [1024]],                            #28

   [[21, 24, 28], 1, Detect, [nc, anchors]],       #29 Detect
  ]

数据集如下:

YOLO格式标注数据如下:

样例标注实例如下所示:

0 0.065234 0.385764 0.107031 0.095139
0 0.06582 0.539931 0.079297 0.165972
0 0.023633 0.762153 0.046484 0.165972
0 0.16875 0.738889 0.111719 0.177778
0 0.183203 0.663542 0.104688 0.200694
0 0.202344 0.571528 0.079687 0.218056
0 0.258008 0.528125 0.063672 0.189583
0 0.30293 0.500694 0.079297 0.261111
0 0.225195 0.313542 0.118359 0.127083
0 0.422461 0.544792 0.126172 0.135417
0 0.442383 0.636458 0.179297 0.095139
0 0.428711 0.715972 0.185547 0.094444
0 0.406836 0.843056 0.134766 0.223611

VOC格式标注数据如下所示:

样例标注实例如下所示:

<annotation>
    <folder>0000</folder>
    <filename>60a4784df6bcca758ee48d5b.jpg</filename>
    <path>60a4784df6bcca758ee48d5b.jpg</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>2560</width>
        <height>1440</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>102</xmin>
            <ymin>111</ymin>
            <xmax>329</xmax>
            <ymax>573</ymax>
        </bndbox>
    </object>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>1</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1</xmin>
            <ymin>549</ymin>
            <xmax>275</xmax>
            <ymax>819</ymax>
        </bndbox>
    </object>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>19</xmin>
            <ymin>1062</ymin>
            <xmax>416</xmax>
            <ymax>1322</ymax>
        </bndbox>
    </object>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>497</xmin>
            <ymin>1103</ymin>
            <xmax>1165</xmax>
            <ymax>1373</ymax>
        </bndbox>
    </object>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1132</xmin>
            <ymin>1076</ymin>
            <xmax>1524</xmax>
            <ymax>1325</ymax>
        </bndbox>
    </object>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1146</xmin>
            <ymin>1306</ymin>
            <xmax>1621</xmax>
            <ymax>1438</ymax>
        </bndbox>
    </object>
    <object>
        <name>cow</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1527</xmin>
            <ymin>1089</ymin>
            <xmax>1970</xmax>
            <ymax>1435</ymax>
        </bndbox>
    </object>
</annotation>

默认设定100次epoch计算,训练完成后结果目录如下所示:

标签数据可视化:

这里只有一个类别。

混淆矩阵:

训练过程指标可视化:

F1值曲线和PR曲线:

从检测结果样例上面来直观看的话效果还是很不错的,结合F1值曲线也不难印证这一点。

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

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

相关文章

[数据结构]栈和队列

目录[数据结构]栈和队列一.栈1.栈的基本概念1.2 栈的常见基本操作1.3 栈的实现1.3.1 入栈1.3.2 出栈1.3.3获取栈顶元素1.3.4 判断栈为空1.3.5 栈实现二.队列2.1 入队2.2 出队2.3 获取队首元素2.4 实现队列[数据结构]栈和队列 一.栈 1.栈的基本概念 栈&#xff08;Stack&#…

你了解真正的数字孪生吗?

数字孪生的目的是在虚拟空间构建数字化的复杂系统“镜像”&#xff0c;可以低成本、反复的从多个视角观察、控制、分析、验证和推演&#xff0c;从而帮助人们更好的在现实世界中完成设计、生产、运营等活动。 近年来&#xff0c;数字孪生技术在航空航天、工业制造、交通物流等多…

hbase2.x HBCK Report Region Holes Overlaps问题修复

Region Holes 查看该问题可通过master UI界面的HBCK Report查看 最下方RegionInfo展示了哪两个region之间存在空洞 也可以通过master日志查看 解决步骤 解决方法很简单&#xff0c;直接使用 hbck2 提供的 fixMeta 操作即可。 在 Usage 说明中能看到 fixMeta 能够修复 ‘…

【Linux】make/Makefile的使用

本文目录 背景简介 使用方法 为什么执行的指令是make和make clean呢&#xff1f; gcc如何判断文件是否需要重新执行&#xff1f; 背景简介 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefifile定义了一系列的规则来指定…

16万字智慧医疗-医院信息化大数据建设 方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目 录 1 概述 1.1 现状分析 …

人工智能-网络编程、TCP

目录1、网络编程1.1网络介绍1.2IP地址1.3 ifconfig和ping命名1.4端口和端口号1.5端口号的分类1.6 socket介绍1.7 TCP介绍&#xff12;、TCP的网络应用程序开发2.1 python&#xff13;编码转换2.2 TCP客户端程序开发流程2.3 TCP客户端程序开发2.4 TCP服务端程序开发流程2.5 TCP…

[Android]序列化原理Parcelable

Parcelable是Android为我们提供的序列化的接口&#xff0c;Parcelable相对于Serializable的使用相对复杂一些&#xff0c;但Parcelable的效率相对Serializable也高很多&#xff0c;这一直是Google工程师引以为傲的&#xff0c;Parcelable和Serializable的效率对比Parcelable vs…

CesiumLab中对输入人工模型的格式要求 CesiumLab系列教程

人工模型数据&#xff08;或者手工模型数据&#xff09;是三维 GIS 行业发展的最早的需求来源&#xff0c;通过3dsmax&#xff0c;maya 等建模工具人工建模的数据。 ​ 编辑 人工模型 这张图是cesiumlab上对人工模型来源的流程&#xff0c;在上面我们只罗列了四个建模工具&a…

Rabbitmq消息队列详解(二)——消息模式API

官网提供的消息模式&#xff1a; 依赖&#xff1a; <!-- 加入rabbitmq --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency>hello模型 没有交换机&…

电商物流第三方云仓到底是什么?

仓库能够简单地定义为一个规划空间&#xff0c;通常是一个用于处置和贮存货物的大型商业建筑。因而&#xff0c;仓储是指在这样一个规划空间中存储和处置货物所触及的一切过程。仓库中常见的货物包括&#xff1a;;机械零配件、建筑资料、废品农产品、家具和电子产品。仓库中的一…

Git、GitHub、Gitee、GitLab

Git、GitHub、Gitee、GitLab 文章目录前言一、Git1.1 Git概述1.2 版本控制1.3 为什么需要版本控制1.4 版本控制工具1.5 Git简史1.6 Git工作机制1.7 Git和代码托管中心二、Git安装三、 Git常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.3.1 首次查看&#xff08…

【c++】 仿函数的概念详解与基础实现

四、仿函数 函数对象(仿函数)是一个类&#xff0c;不是一个函数。 函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。分类:假定某个类有一个重载的operator()&#xff0c;而且重载的operator()要求获取一个参数&#xff0c;我们就将这个类称为“一元仿函数”&…

【算法笔记】最近公共祖先(LCA)算法求解——倍增算法

0. 前言 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 这种算法应用很广泛&#xff0c;可以很容易解决树上最短路等问题。 为了方便&#xff0c;我们记…

再获认可!知道创宇入选《2022中国各地区科创之星势力图3.0版》

近日&#xff0c;由数据智能产业创新服务领域的垂直、专业深度媒体数据猿推出的《2022中国各地区科创之星势力图3.0版》正式公布。知道创宇凭借网络安全领域过硬的技术实力与创新能力入选“科创之星势力图”。二度认可知道创宇再获科创之星优秀企业本次数据猿公布的《2022中国各…

第十九章AJAX学习

文章目录什么是AJAX服务器端渲染Ajax渲染&#xff08;局部更新&#xff09;前后端分离同步与异步同步异步前端提交到数据到后端的方式JSON什么是JSONJSON数据格式JSON对象JSON格式表示简单数组对象数组使用二维数组保存对于客户端对于服务器端引入GSON的jar包使用例子Axios简介…

MySQL数据库:库和表的基本操作

SQL注意事项 1.每条sql语句都要以英文分号结尾。 2.sql语句不区分大小写。 3.定义库、表&#xff0c;或是表中的字段&#xff0c;名称不要使用关键字。 一、数据库的操作 1.显示所有的数据库 show databases; 2.创建数据库 方式一&#xff1a; create database 数据库名称…

vue+elementui导入Excel文件(基于vue-element-admin中的uploadExcel组件), 然后 go-zero进行逻辑处理功能

#前端代码 html代码 <el-button v-waves class"filter-item" type"primary" icon"add" click"downLoadExlce">模板下载</el-button> <el-upload class"upload" action :multiple"false" :show-…

2.两数相加(链表)

题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会…

【Linux】动静态库的制作和使用

目录 一、可执行文件的形成 二、静态库 2.1 制作静态库 2.2 使用静态库 三、动态库 3.1 动态库的制作 3.2 动态库链接 2.3 动态库的加载 一、可执行文件的形成 在C语言中&#xff0c;函数库文件分为两种类型&#xff1a; 静态库&#xff08;库程序是直接注入目标程序…

想要做成一件事,就得有方法,怎么做到呢

想要完成一件事&#xff0c;没有详细的计划和方法是做不好的。如果没有计划&#xff0c;没有方案&#xff0c;没有策略&#xff0c;没有规划&#xff0c;没有方法&#xff0c;那就是一只无头苍蝇&#xff0c;到处乱撞&#xff0c;不能达到什么目的。想做成一件事&#xff0c;就…