一种基于idt-yolov5-cbam混合算法的密集小
目标检测方法
技术领域
1.本发明属于计算机视觉目标检测技术领域,特别是涉及一种基于idt-yolov5-cb am混合算法的密集小目标检测方法。
背景技术:
2.随着深度学习的不断发展,目标检测技术逐步从基于传统的手工检测方法向基于深度神经网络的检测方法转变。在众多基于深度学习的目标检测方法中,基于深度学习的单阶段目标检测方法因其网络结构较简单、运行速度较快以及具有更高的检测效率而被广泛运用。
3.现有的基于深度学习的单阶段目标检测方法由于小目标物体包含的
特征信息较少、分辨率较低、背景信息较复杂、细节信息不明显以及定位精度要求较高等原因,导致在检测过程中对小目标物体的检测效果不理想,使得模型检测精度降低。
4.总的来说,当前广泛应用的深度学习目标检测方法对于面积、体积较大、遮挡不严重的目标进行检测能取得较好的效果。但对于一些体型较小、密集且遮挡严重的目标,比如树上的果实、航拍图中的车辆、人等等,其检测效果和精度仍然是一个挑战。
技术实现要素:
5.发明目的:本发明的目的是提供一种基于idt-yolov5-cbam混合算法的密集小目标检测方法,针对yolov5算法对密集目标检测精度不高的问题,在原yolov5模型的基础上引入模糊isodata动态聚类技术、增加检测层、引入cbam注意力机制,使模型能够快速精确并尽可能多地识别出检测目标,极大的降低了模型的漏检率和误检率。
6.技术方案:一种基于idt-yolov5-cbam混合算法的密集小目标检测方法,包括以下步骤:
7.(1)对预先获取的待检测小目标图像进行预处理,制作数据集:
8.(2)对原yolov5网络结构进行改进,得到改进后的idt-yolov5-cbam网络结构;
9.(3)对改进之后的网络模型进行参数的调整:在idt-yolov5-cbam网络模型中,根据用户所需的识别效果和训练速度,设置
卷积神经网络输入图像的尺寸、识别种类的数量、迭代次数;
10.(4)对改进后的模型分别从准确率、召回率、map值三个方面对训练好的idt-yolov5-cbam网络模型进行评估。
11.进一步地,所述步骤(1)包括以下步骤:
12.(11)图像的获取:用户使用手机、数码相机或其他图像采集设备对待检测小目标进行图像采集;
13.(12)图像的标注:将采集到的图片进行标注,标注出小目标的类别和位置信息;
14.(13)图像的扩增:运用augmentor图像数据增强库对图像进行扩增;通过对
样本添加噪声、水平镜像、垂直镜像、剪裁、旋转、平移和亮度调整操作实现样本的扩增,达到识别
所需要求;
15.(14)数据集的划分:将扩增后的图像按8:2的比例划分为训练集和验证集。
16.进一步地,所述步骤(2)包括以下步骤:
17.(21)在yolov5原有三个检测层的基础上增加一个检测层;
18.(22)在嵌入第四个检测层的基础上,分别将第20层与第2层,第25层与第4层和第30层与第6层进行concat多尺度融合;
19.(23)在yolov5中的neck网络引入cbam注意力机制模块,实现空间维度和通道维度的全方位兼顾;
20.(24)将原始模型neck层中原有的上采样更换为反卷积,用反卷积模块去增强特征图的分辨率;
21.(25)考虑低层特征低语义高细节和高层特征高语义低细节的特点,采用并行策略add替换neck层中的concat融合操作;
22.(26)采用模糊isodata动态聚类的方法对k-means算法进行优化;通过增加模糊矩阵,并且在迭代过程中增加合并和分裂两个步骤,动态确定出k值的大小,避免局部最优解的情况发生。
23.进一步地,所述步骤(3)实现过程如下:
24.图片大小imgsz=[640,640],置信度阈值conf_thres=0.5,iou阈值iou_thres=0.45,初始学习率ir=0.0032,学习率动量momentum=0.843,权重衰减系数weight_decay=0.00036,设置epoch=200。
[0025]
进一步地,步骤(21)所述增加的检测层,具体对应整体结构的第17~21层,首先经过一个csp2_1模块和cbs模块,其次由第19层进行一个反卷积操作,输出结果与第二层进行add融合,最后再由第21层的csp2_1模块对add融合的结果做一个输出,实现输出的feature map变为对原始输入进行4倍的下采样操作。
[0026]
进一步地,所述步骤(22)实现过程如下:
[0027]
在第18层输出结果80
×
80
×
64的feature map进行上采样操作,使其变成160
×
160
×
64大小的高层特征信息,然后与第2层160
×
160
×
64的低层特征信息进行concat融合;对第24层经过csp2_1模块,大小为80
×
80
×
128的feature map与同等大小的第4层的低层特征信息进行concat融合;对第29层经过csp2_1模块,大小为40
×
40
×
256的feature map与同等大小的第6层的低层特征信息进行concat融合。
[0028]
进一步地,所述步骤(25)实现过程如下:
[0029]
设两路输入的通道分别为a1、a2…ac
和b1、b2…bc
,公式如下
[0030][0031][0032]
其中,c表示通道数;ai、bi分别表示两路输入的通道;ki表示对应通道的卷积核。
[0033]
进一步地,所述步骤(26)包括以下步骤:
[0034]
s1:设定预期anchor数k0=12,随机选取聚类中心,初始化12个anchor;
[0035]
s2:计算隶属度矩阵u:
[0036][0037]
其中,k表示有k个聚类中心;9
ij
为隶属度矩阵u中的元素;d
ij
表示第j个样本到第i个聚类中心的距离;d
pj
表示第j个样本到第p个聚类中心的距离;m表示类间模糊程度;
[0038]
s3:计算聚类中心:
[0039][0040]
其中,zi表示第i个聚类中心;n表示样本总个数;l表示迭代次数;
[0041]
s4:判断是否进行分裂,若满足以下其中之一条件则进行分裂:
①
最终聚类数目小于预期值的1/2或最终聚类数目大于预期值的2倍;
②
迭代运算次数是偶数次;
③
同类别中的样本距离标准差向量的最大值大于样本标准差的阈值,即σ
jmax
》θs,其中,θs为样本标准差的阈值,分裂为新的聚类中心z1、z2:
[0042]
z1=zi+fσ
jmax z1=z
i-fσ
jmax
ꢀꢀ
(14)
[0043]
其中,σ
jmax
表示样本距离标准差向量的最大值;f表示分裂系数,满足0《f《1;
[0044]
s5:判断是否进行合并,若满足以下其中之一条件则进行合并:
①
计算各类之间的距离d
ij
,若小于各类样本中心之间距离的阈值,即d
ij
《θk,θk为各类样本中心之间距离的阈值;
②
若某类中的样本数小于规定的个数阈值θn,新的聚类中心为zk:
[0045]
zk=(nizi+njzj)/(ni+nj)
ꢀꢀ
(15)
[0046]
其中,zi、zj分别表示第i、j类的样本中心;ni、nj分别表示第i、j类的样本个数;
[0047]
s6:计算新的聚类结果,计算个样本到各个聚类中心的距离d
ij
;
[0048]
s7:根据公式(12)计算新的隶属度矩阵;
[0049]
s8:返回步骤s3,重复迭代,直到迭代完成。
[0050]
与现有技术相比,本发明的有益效果如下:1、本发明针对原始anchorbox的尺寸和数量不适合自制数据集的问题,采用模糊isodata动态聚类的方法对k-means算法进行优化,通过增加模糊矩阵,并且在迭代过程中增加合并和分裂两个步骤,动态确定出k值的大小,尽可能避免局部最优解的情况发生;2、本发明针对原始yolov5模型对小目标物体检测效果不好的缺陷,在原有三个检测层的基础上增加一个检测层,使得每个gridcell对应到原图中的感受野更小,增强小目标的检测能力;3、本发明针对原始yolov5模型对小目标物体检测精度不高的问题,使用并行策略add替换concat融合操作,一方面,增加了每一维度下的信息量;另一方面,对应的特征图共享一个卷积核,使计算时参数量大大减少;在有效提升检测精度的同时,保证了检测速度;4、本发明针对原始yolov5模型对图片特征提取效果不好的缺陷,在模型中的neck网络引入cbam注意力机制模块,实现空间维度还是通道维度的全方位兼顾,提高了特征融合的效果。
附图说明
[0051]
图1为本发明的流程图;
[0052]
图2为idt-yolov5-cbam模型结构示意图;
[0053]
图3为cbam注意力机制的结构图;
[0054]
图4为yolov5原始模型对单棵果树上苹果的识别效果图;
[0055]
图5为idt-yolov5-cbam模型对单棵果树上苹果的识别效果图;
[0056]
图6为yolov5原始模型对多棵果树大面积聚簇苹果的识别效果图;
[0057]
图7为idt-yolov5-cbam模型对多棵果树大面积聚簇苹果的识别效果图。
具体实施方式
[0058]
下面结合附图对本发明作进一步详细说明。
[0059]
本发明的目的是提供一种基于idt-yolov5-cbam混合算法的密集小目标检测方法,针对yolov5算法对密集目标检测精度不高的问题,在原yolov5模型的基础上采用模糊isodata动态聚类技术、增加检测层、引入cbam注意力机制等方式,使它能够快速精确并尽可能多地识别出检测目标,极大的降低了模型的漏检率和误检率;如图1所示,具体包括以下步骤:
[0060]
步骤1:制作数据集。
[0061]
使用手机、数码相机或其他图像采集设备对果树上的苹果进行图像采集,并将采集到的图像按照yolov5数据集要求的格式将图片命名,并创建名为images、labels的两文件夹,每个文件夹下分别创建名为train、val的两个文件夹。将采集到的图片用labelimg软件对图像中的苹果进行标注。首先进入命令窗口,输入conda activate pyxxx激活虚拟环境;然后输入labelimg启动程序。其次,标注出苹果的类别和位置信息。最后进行标注信息的保存。
[0062]
在做图像标注时应遵守如下规则:
[0063]
1)框选为苹果时,标签可命名为apple。
[0064]
2)框选为密集聚簇重叠的苹果时,通过手工准确逐一框选。
[0065]
3)框选为遮挡超过90%时,则舍弃当前目标。
[0066]
4)框选为目标小于8
×
8的像素面积时,则舍弃当前目标。
[0067]
若用户采集到的图像不能达到识别单个品种所需2000张图片的要求,在样本较少的情况下,为了满足深度卷积神经网络的训练和提升模型的泛化性,数据扩增无疑是目前解决这一问题的首选手段。数据扩增一方面可以扩大数据的样本量,另一方面可以增加样本的多样性。用户则可以运用augmentor图像数据增强库对图像进行扩增;用户选定图像的保存路径和标记信息txt文件路径,并制定扩增后的图像及txt文件输出路径,本发明主要通过对样本添加噪声、水平镜像、垂直镜像、剪裁、旋转、平移和亮度调整等操作实现样本的扩增,达到识别所需要求。
[0068]
在images文件夹下的train、val里分别存放用于测试、训练和验证的图片,并按照80%、20%的比例放入。对应的labels文件夹下则用来存放各自的标签,且要求标签格式为txt文件。
[0069]
步骤2:对原yolov5网络结构进行改进,得到改进后的idt-yolov5-cbam网络结构,如图2所示。
[0070]
(1)在原有的yolov56.0版本的基础上嵌入一个检测层,用于提高小尺寸目标的检
测能力。原始的yolov5网络结构中有三个检测层,输出尺寸的大小是分别对输入图像进行8倍、16倍和32倍的下采样,若原始图片尺寸输入为640
×
640的大小,那么将会分别得到80
×
80、40
×
40和20
×
20的feature map。通过嵌入一个检测层,使得输出的feature map变为对原输入图像进行4倍、8倍、16倍和32倍的下采样,其中160
×
160的feature map将待检测的图像分成160
×
160个grid cell,每个grid cell对应到原图中的感受野最小,有利于极小目标的检测。同理,小目标交由80
×
80的feature map,中等目标交由40
×
40的feature map,大目标交由20
×
20的feature map进行处理。
[0071]
具体对应整体结构的第17~21层,首先经过一个csp2_1模块和cbs模块,其次由第19层进行一个反卷积操作,输出结果与第二层进行add融合,最后再由第21层的csp2_1模块对add融合的结果做一个输出,实现输出的feature map变为对原始输入进行4倍的下采样操作。
[0072]
(2)本发明在嵌入第四个检测层的基础上,分别将第20层与第2层,第25层与第4层和第30层与第6层进行concat多尺度融合。因为低层特征的分辨率更高,包含更多的位置、细节等信息,但是由于经过的卷积层数少,其语义性更低且噪声更多。高层特征携带着非常多的语义信息,不过分辨率太低,所以对细节的感知能力较差。如果只用最后的特征图进行检测,会丢失很多细节信息,但如果用低层特征进行检测又丢失了语义,因此不管用哪个特征图都会影响检测效果。所以本发明在这里对第18层输出结果80
×
80
×
64的feature map进行上采样操作,使其变成160
×
160
×
64大小的高层特征信息,然后与第2层160
×
160
×
64的低层特征信息进行concat融合。同理,本发明对第24层经过csp2_1模块,大小为80
×
80
×
128的feature map与同等大小的第4层的低层特征信息进行concat融合。对第29层经过csp2_1模块,大小为40
×
40
×
256的feature map与同等大小的第6层的低层特征信息进行concat融合。使它们在拥有高层语义信息的同时,保留了更多的细节信息,有效提升了检测的精度。
[0073]
(3)在yolov5模型中的neck网络引入cbam注意力机制模块(convolutional blockattention module,cbam);如图3所示,基于上述模型改进的基础上,分别在第11层、16层和21层引入cbam注意力机制。之所以在neck层引入,是因为cbam注意力机制模块的权值是随机初始化的,如果引入到backbone(主干网络),可能会破坏掉主干网络的权值,而主干网络的特征又是后面特征提取的基础,最终可能会导致提取的特征不太好用。cbam是一种基于卷积模块的注意力机制,结合了空间与通道对输入特征进行加权融合,相比于单一的通道注意力机制(senet)对特征融合的效果更好。
[0074]
卷积操作其实就是发现输入图片各个区域的特征,而这个特征是一个高维的语义特征,每个通道负责各自的信息。通道注意力机制就是自适应的决定哪一个部分比较重要则增加其对应的权值,那一部分不那么重要就削弱其对应的权值。空间注意力机制则更加关注于空间维度下,哪部分区域更重要。比如:人脸识别,显然一张图片中除人脸以外的其他部分都是不重要的,那么空间注意力机制的作用就是自动的削弱它们的权值。而cbam注意力机制无论是空间维度还是通道维度都得到了全方位的兼顾,不仅关注通道的比重,而且还关注每个像素的比重。
[0075]
cbam注意力机制是通道注意力机制和空间注意力机制的结合。首先将大小为h
×w×
c的feature map输入通道注意力机制模块,通过公式(1)得到最有意义的特征f1;然后将
加强后的特征输入空间注意力机制模块,通过公式(2)得到信息最多的特征f2。
[0076][0077][0078]
其中,f表示大小为h
×w×
c的feature map;f1表示对输入特征f进行通道注意力机制加强后的特征;f2表示对加强特征f1进行空间注意力机制加强后的特征;mc(f)表示对输入特征f进行通道注意力机制加强后习得的权重参数;ms(f1)表示对加强特征f1进行空间注意力机制加强后习得的权重参数;表示element-wise的点乘。
[0079]
在通道注意力机制中,对于一个出入为h
×w×
c的feature map,首先从空间维度上分别对每个像素进行maxpool(全局最大池化)操作和avgpool(全局平均池化)操作,分别通过公式(3)和公式(4)实现空间维度上的特征压缩。使其由原来h
×w×
c的feature map分别变成一个1
×1×
c的张量,得到c个标量。
[0080][0081][0082]
其中,zc表示得到的结果张量;h表示输入的feature所在高的维度;w表示输入的feature所在宽的维度;fc表示通道数为c的输入特征;fc(i,j)表示在特征中的位置。
[0083]
分别将得到的2个1
×1×
c的张量输入到sharedmlp(共享的全连接层中),分别进行两次全连接fc——》relu——》fc——》sigmoid,实现一个先降维再升维的操作,降维的目的是保证在拥有较好性能的前提下减少参数量,提升计算速度。升维的目的是为了最后得到更多的信息特征。第一次全连接后使用的是relu激活函数,第二次全连接后使用的是sigmoid激活函数。
[0084]
将上述结果输出的2个1
×1×
c的张量先进行加和操作,然后在用sigmoid函数进行激活,生成权重mc,如公式(5)所示。
[0085]
mc(f)=σ(mlp(f
max
)+mlp(f
avg
))
ꢀꢀ
(5)
[0086]
其中,mc(f)表示对输入特征f进行通道注意力机制加强后习得的权重参数;f
max
表示对输入特征f进行全局最大池化操作;f
avg
表示对输入特征f进行全局平均池化操作;mlp(f)表示对输入特征f进行共享全连接操作;σ表示进行sigmoid激活操作。
[0087]
将上述操作习得的mc(各个通道对应的权重参数)与输入对应通道的所有像素相乘,将重要的特征进行增强,对不重要的特征进行削弱。
[0088]
在空间注意力机制中,对于一个出入为h
×w×
c的feature map,首先从通道维度上分别对每个像素进行maxpool(全局最大池化)操作和avgpool(全局平均池化)操作,实现通道维度上的特征压缩。使其由原来h
×w×
c的feature map分别变成一个w
×h×
1的张量。
[0089]
对上述形成的2个w
×h×
1的张量先进行concat融合,进行通道数的倍增。然后再经过一个卷积操作实现通道数的减半,最后使用sigmoid函数进行激活,生成权重ms,如公式(6)所示。
[0090]ms
(f1)=σ(concat7×7[f
1,max
;f
1,avg
])
ꢀꢀꢀ
(6)
[0091]
其中,ms(f1)表示对加强特征f1进行空间注意力机制加强后习得的权重参数;f
1,max
表示对输入特征f1进行全局最大池化操作;f
1,avg
表示对输入特征f1进行全局平均池化操作;concat7×7[f
1,max
;f
1,avg
]表示使用7
×
7的卷积核对f
1,max
和f
1,avg
进行concat融合。
[0092]
将上述操作习得的ms(各个通道对应的权重参数)与输入的feature map做乘法操作。
[0093]
(4)本发明在上述改进的基础上,将neck层中原有的上采样替换为反卷积。这是由于在检测的过程中会包含很多的上下文信息,我们将yolov5 neck层中原有的上采样更换为反卷积,用反卷积模块去增强特征图的分辨率,然后在与底层卷积网络相融合的过程中能够获得更高分辨率的特征图,通过反卷积的学习能力去让网络自己学习如何进行上采样,使之增强对目标图像中小目标的检测效果。相比于上采样的方法,反卷积不仅仅是实现像素的填充,还增加了参数学习过程,可以在增大特征图分辨率的同时,得到更多的小目标信息。
[0094]
本发明使用扩张卷积的方式进行反卷积,扩张卷积就是对基础卷积核加入间隔,例如常规卷积时,一个3
×
3的卷积核,其dilationrate=1,间隔为0。如果对其进行间隔为1的卷积时,对应的dilationrate变为2,对应的图像块就从3
×
3扩大到了7
×
7,感受野就会随着卷积核的增大而增大。以第12层为例,对上一层传入的20
×
20的特征图进行2倍的反卷积后与第6层40
×
40的特征图进行特征融合以得到更多小目标的特征语义信息,公式如下,其中卷积核大小为4
×
4,步长为2,填充为1。
[0095]
y=(x-1)s+k-2p
ꢀꢀ
(7)
[0096]
其中x表示输入的特征图尺寸;y表示输出的特征图尺寸;s表示步长;k表示卷积核大小;p表示填充。
[0097]
(5)本发明采用并行策略add替换neck层中的concat融合操作。这是由于concat融合仅是进行通道数的合并,使特征图的通道数加倍,而每一通道下的信息并没有增加。而add进行特征融合后虽然维度并没有增加,但是增加了每一维度下的信息量。同时,concat每个通道对应着相应的卷积核。而add形式则将对应的特征图相加,再进行下一步卷积操作,相当于加了一个先验:对应通道的特征图语义类似,从而对应的特征图共享一个卷积核,使计算时参数量大大减少。在只看单个通道输出时,设两路输入的通道分别为a1、a2…ac
和b1、b2…bc
,公式如下
[0098][0099][0100]
其中c表示通道数;ai、bi分别表示两路输入的通道;ki表示对应通道的卷积核。
[0101]
(6)本发明采用模糊isodata动态聚类的方法对k-means算法进行优化。在yolov5的原始模型中,采用了k-means算法在公共数据集ms coco上聚类得到了9个anchorbox,此数据集包含了20个类别的目标,大到汽车、小到猫狗,目标尺寸的差别很大。无论是anchorbox的数量还是尺寸,在我们自制的数据集上都不适用。尤其是对于数据集中的新类别:大面积聚簇的苹果和密集人的口罩来说,所以使用原始anchor会降低yolov5模型检
测的准确率,影响模型性能。
[0102]
传统的k-means算法将欧氏距离作为度量指标,使得大尺寸的boundingbox会比小尺寸的boundingbox产生更多的误差,因此我们引入了新的距离公式,iou距离公式:
[0103]d(box,centriod)
=1-iou
(box,cfntriod)
ꢀꢀ
(10)
[0104]
目标函数为:
[0105][0106]
其中,box表示bounding box(预测框);cfntriod表示bounding box的中心;iou表示预测框于真实框的交并比;k表示anchor的个数;truth表示真实框。
[0107]
原始的k-means聚类算法的缺点是k值需要人工设定,一旦设定好之后就无法改变,在数据集足够大,维度足够高的情况下,很难估计出一个合适的k值。其次,k-means聚类算法中初始值k的随机选取很容易让结果陷入局部最优。
[0108]
本发明采用模糊isodata动态聚类的方法对k-means算法无法自动确定k值的缺点进行改进,其核心思想是不仅增加了模糊矩阵,而且在迭代过程中增加了合并和分裂两个步骤,如果聚类结果某一类中的样本太少,或类间距离太近,那么就将他们合并成一个类。如果某一类中的类内方差太大,说明该类中的样本形态各异,不适合放在同一个类中,那么就将他们分类为两个类。当然,类别的数目不会是无限制的,如果预期的聚类结果为k0,那最终聚类结果的范围是
[0109]
模糊isodata动态聚类的步骤如下:
[0110]
s1:由于改进后的网络模型嵌入了检测层,所以anchor数由原来的9个变为12个。设定预期k0=12,随机选取聚类中心,初始化12个anchor。
[0111]
s2:根据公式(12)计算隶属度矩阵u。
[0112][0113]
其中,k表示有k个聚类中心;μ
ij
为隶属度矩阵u中的元素;d
ij
表示第j个样本到第i个聚类中心的距离;d
pj
表示第j个样本到第p个聚类中心的距离;m表示类间模糊程度。
[0114]
s3:根据隶属度矩阵u及公式(13)计算聚类中心。
[0115][0116]
其中,zi表示第i个聚类中心;n表示样本总个数;l表示迭代次数。
[0117]
s4:判断是否进行分裂,若满足以下其中之一条件则进行分裂:条件一,最终聚类数目小于预期值的1/2或最终聚类数目大于预期值的2倍;条件二,迭代运算次数是偶数次;条件三,同类别中的样本距离标准差向量的最大值大于样本标准差的阈值,即σ
jmax
》θs(样本标准差的阈值)分裂为新的聚类中心z1、z2。
[0118]
z1=zi+fσ
jmax z1=z
i-fσ
jmax
ꢀꢀ
(14)
[0119]
其中,σ
jmax
表示样本距离标准差向量的最大值;f表示分裂系数,满足0《f《1。
[0120]
s5:判断是否进行合并,若满足以下其中之一条件则进行合并:条件一,计算各类之间的距离d
ij
,若小于各类样本中心之间距离的阈值,即d
ij
《θk(各类样本中心之间距离的阈值);条件二,若某类中的样本数小于规定的个数阈值θn,新的聚类中心为zk。
[0121]
zk=(nizi+njzj)/(ni+nj)
ꢀꢀ
(15)
[0122]
其中,zi、zj分别表示第i、j类的样本中心;ni、nj分别表示第i、j类的样本个数。
[0123]
s6:计算新的聚类结果,计算个样本到各个聚类中心的距离d
ij
。
[0124]
s7:根据公式(12)计算新的隶属度矩阵。
[0125]
s8:返回步骤s3,重复迭代,直到迭代完成。
[0126]
步骤3:对改进之后的网络模型进行参数的调整:在idt-yolov5-cbam网络模型中,根据计算机内存、显存的大小,用户所需的识别效果和训练速度,设置卷积神经网络输入图像的尺寸、识别种类的数量、迭代次数;且用户需使用支持cuda加速的显卡类型。
[0127]
本发明基于pytorch1.8和python 3.8的版本进行试验,实验时使用nvdiageforce rtx2080 ti的gpu参与运算,16g内存,11g显存,cuda版本为10.2。
[0128]
在训练之前,先对模型的参数进行配置,图片大小imgsz=[640,640],置信度阈值conf_thres=0.5,iou阈值iou_thres=0.45,初始学习率ir=0.0032,学习率动量momentum=0.843,权重衰减系数weight
decay
=0.00036,通过多次实验,证明训练200个epoch左右时效果最佳。
[0129]
通过模糊isodata动态聚类重新修改anchor数量和尺寸。通过多次试验,选取了平均iou值最大的聚类结果,即the average iou=0.81590,确定anchor数量为12,分为4组。每组尺寸分别为anchors are:[18,20,29,32,42,44]、[55,55,60,74,72,68]、[86,91,111,110,135,141]、[179,190,253,262,395,408]。最后,修改train.py文件中的相关参数,训练过程中未使用预训练模型并设置epoch=200,batch_size=10。
[0130]
步骤4:对改进后的模型分别从准确率、召回率、map值三个方面对训练好的idt-yolov5-cbam网络模型进行评估。
[0131]
评估指标如表1、表2和表3所示,与原模型相比是否有明显的提升?如果出现一升一降,考虑是否值得做出以上改进,同时寻下降原因,调整参数再次进行训练。直到满足实际检测要求则进行下一步操作。
[0132]
模型训练完毕后的指标如下:
[0133]
表1目标改进阶段与上一阶段的指标结果比较
[0134][0135]
表2目标改进阶段与原始yolov5模型的指标结果比较
[0136][0137]
表3目标改进阶段与yolov5+aug的指标结果比较
[0138][0139]
其中,yolov5表示未改进的原始模型;+aug表示进行了数据扩增;+four表示嵌入了检测层;+iso表示引入模糊isodata动态聚类算法;+mul表示进行多尺度特征的融合;+cbam表示引入cbam注意力机制模块;+f表示引入扩张卷积替换上采样;+add表示引入并行策略替换concat融合。
[0140]
步骤5:运用训练完成的网络模型权重文件best.pt进行识别:在计算机上准备好待检测的图像,更改detect.py中配置文件yaml、训练完成的权重和待检测的图片路径,通过执行detect.py,加载网络模型配置文件yaml和网络模型权重,最终计算机将检测结果以图片的形式进行保存。
[0141]
为了测试改进后的idt-yolov5-cbam模型对密集小目标的检测效果,本发明通过与yolov5原始模型进行对比,分别选择待检测目标密集度逐渐增大的单颗果树上的苹果和多棵果树上大面积聚簇的苹果作为测试对象,如图4~7所示。分别使用yolov5原始模型和改进之后的idt-yolov5-cbam模型对单颗果树上的苹果进行测试,两个模型中使用的各参数保持一致。测试结果表明,yolov5原始模型对小目标的检测效果相对较弱,并且误检率高,如图4所示。而改进之后的idt-yolov5-cbam模型与yolov5原始模型相比,性能有了极大的提升,除了可以检测到更多的目标外,在图4中出现误检的情况也随之消失,如图5所示。分别使用yolov5原始模型和改进之后的idt-yolov5-cbam模型对多颗果树上大面积聚簇的苹果进行测试,如图6、图7所示,尽管在该场景下待检测目标的密集程度很高,但改进之后的idt-yolov5-cbam模型所展示出的效果是令人相当满意的。从测试的效果可以看出改进之后的idt-yolov5-cbam模型极大的提高了对密集小目标的检测能力,避免了漏检率和误检率的发生。
技术特征:
1.一种基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,包括以下步骤:(1)对预先获取的待检测小目标图像进行预处理,制作数据集:(2)对原yolov5网络结构进行改进,得到改进后的idt-yolov5-cbam网络结构;(3)对改进之后的网络模型进行参数的调整:在idt-yolov5-cbam网络模型中,根据用户所需的识别效果和训练速度,设置卷积神经网络输入图像的尺寸、识别种类的数量、迭代次数;(4)对改进后的模型分别从准确率、召回率、map值三个方面对训练好的idt-yolov5-cbam网络模型进行评估。2.根据权利要求1所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,所述步骤(1)包括以下步骤:(11)图像的获取:用户使用手机、数码相机或其他图像采集设备对待检测小目标进行图像采集;(12)图像的标注:将采集到的图片进行标注,标注出小目标的类别和位置信息;(13)图像的扩增:运用augmentor图像数据增强库对图像进行扩增;通过对样本添加噪声、水平镜像、垂直镜像、剪裁、旋转、平移和亮度调整操作实现样本的扩增,达到识别所需要求;(14)数据集的划分:将扩增后的图像按8:2的比例划分为训练集和验证集。3.根据权利要求1所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,所述步骤(2)包括以下步骤:(21)在yolov5原有三个检测层的基础上增加一个检测层;(22)在嵌入第四个检测层的基础上,分别将第20层与第2层,第25层与第4层和第30层与第6层进行concat多尺度融合;(23)在yolov5中的neck网络引入cbam注意力机制模块,实现空间维度和通道维度的全方位兼顾;(24)将原始模型neck层中原有的上采样更换为反卷积,用反卷积模块去增强特征图的分辨率;(25)考虑低层特征低语义高细节和高层特征高语义低细节的特点,采用并行策略add替换neck层中的concat融合操作;(26)采用模糊isodata动态聚类的方法对k-means算法进行优化;通过增加模糊矩阵,并且在迭代过程中增加合并和分裂两个步骤,动态确定出k值的大小,避免局部最优解的情况发生。4.根据权利要求1所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,所述步骤(3)实现过程如下:图片大小imgsz=[640,640],置信度阈值conf_thres=0.5,iou阈值iou_thres=0.45,初始学习率ir=0.0032,学习率动量momentum=0.843,权重衰减系数weight_decay=0.00036,设置epoch=200。5.根据权利要求3所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,步骤(21)所述增加的检测层,具体对应整体结构的第17~21层,首先经过一个
csp2_1模块和cbs模块,其次由第19层进行一个反卷积操作,输出结果与第二层进行add融合,最后再由第21层的csp2_1模块对add融合的结果做一个输出,实现输出的feature map变为对原始输入进行4倍的下采样操作。6.根据权利要求3所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,所述步骤(22)实现过程如下:在第18层输出结果80
×
80
×
64的feature map进行上采样操作,使其变成160
×
160
×
64大小的高层特征信息,然后与第2层160
×
160
×
64的低层特征信息进行concat融合;对第24层经过csp2_1模块,大小为80
×
80
×
128的feature map与同等大小的第4层的低层特征信息进行concat融合;对第29层经过csp2_1模块,大小为40
×
40
×
256的feature map与同等大小的第6层的低层特征信息进行concat融合。7.根据权利要求3所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,所述步骤(25)实现过程如下:设两路输入的通道分别为a1、a2…
a
c
和b1、b2…
b
c
,公式如下,公式如下其中,c表示通道数;a
i
、b
i
分别表示两路输入的通道;k
i
表示对应通道的卷积核。8.根据权利要求3所述的基于idt-yolov5-cbam混合算法的密集小目标检测方法,其特征在于,所述步骤(26)包括以下步骤:s1:设定预期anchor数k0=12,随机选取聚类中心,初始化12个anchor;s2:计算隶属度矩阵u:其中,k表示有k个聚类中心;μ
ij
为隶属度矩阵u中的元素;d
ij
表示第j个样本到第i个聚类中心的距离;d
pj
表示第j个样本到第p个聚类中心的距离;m表示类间模糊程度;s3:计算聚类中心:其中,z
i
表示第i个聚类中心;n表示样本总个数;l表示迭代次数;s4:判断是否进行分裂,若满足以下其中之一条件则进行分裂:
①
最终聚类数目小于预期值的1/2或最终聚类数目大于预期值的2倍;
②
迭代运算次数是偶数次;
③
同类别中的样本距离标准差向量的最大值大于样本标准差的阈值,即σ
j max
>θ
s
,其中,θ
s
为样本标准差的阈值,分裂为新的聚类中心z1、z2:z1=z
i
+fσ
j max z1=z
i-fσ
j max (14)其中,σ
j max
表示样本距离标准差向量的最大值;f表示分裂系数,满足0<f<1;
s5:判断是否进行合并,若满足以下其中之一条件则进行合并:
①
计算各类之间的距离d
ij
,若小于各类样本中心之间距离的阈值,即d
ij
<θ
k
,θ
k
为各类样本中心之间距离的阈值;
②
若某类中的样本数小于规定的个数阈值θ
n
,新的聚类中心为z
k
:z
k
=(n
i
z
i
+n
j
z
j
)/(n
i
+n
j
)
ꢀꢀꢀ
(15)其中,z
i
、z
j
分别表示第i、j类的样本中心;n
i
、n
j
分别表示第i、j类的样本个数;s6:计算新的聚类结果,计算个样本到各个聚类中心的距离d
ij
;s7:根据公式(12)计算新的隶属度矩阵;s8:返回步骤s3,重复迭代,直到迭代完成。
技术总结
本发明公开了一种基于IDT-YOLOv5-CBAM混合算法的密集小目标检测方法,采用模糊ISODATA动态聚类的方法对k-means算法进行优化,避免局部最优解的情况发生;嵌入一个检测层,使得每个gridcell对应到原图中的感受野更小,增强小目标的检测能力;同时,采用并行策略add进行多尺度特征的融合,使它们在拥有高层语义信息的同时,保留了更多的细节信息;在模型中的Neck网络引入CBAM注意力机制模块,实现空间维度和通道维度的全方位兼顾;同时,将上采样更换为反卷积,通过反卷积的学习能力去让网络自己学习如何进行上采样,使之增强对目标图像中小目标的检测效果。本发明能够快速精确并尽可能多地识别出检测目标,极大的降低了模型的漏检率和误检率。型的漏检率和误检率。型的漏检率和误检率。
技术研发人员:
张浩 董锴龙 孙欣 随亮辉 王敏 华奇凡 张格 高尚兵 梁坤 孔德财 周桂良
受保护的技术使用者:
淮阴工学院
技术研发日:
2022.07.15
技术公布日:
2022/11/22