























咳咳,这里是猫猫,事先说明,本文纯属自娱自乐,是第一次接触计算机视觉的时候写的,某种意义上来说只能算作学习笔记的总结和有点另类的科普文。并且由于只用了一个月不到,所以数据集仅有8000张,且只分了两类,类别之间还极度不平衡,甚至没做消融实验,因此优化效果完全没有通用性,代码也没有实用价值。
数据集果然是这种研究最大的阻碍……尤其是对于临时起意的猫猫。至于为什么没做消融实验,那就是一个关于显卡损坏的悲伤故事了(;д;)
总结之前本来还有一段演示程序的设计,大概就是一小节可以运行计算机视觉模型的GUI程序的讲解,被我删掉了。
总之,这篇文章最大的作用或许就是当做学位论文的基础写作框架来参考,认真你就输了喵。
如果非要拷打的话……全部模型训练脚本和其它代码已经开源在Github,点击这里领取喵φ(>ω<*)
啊,不过,如果要进行“参考”的话务必要修改之后才行,否则的话可能会某天被教育局查水表……如果那样的话,猫猫也救不了你,毕竟猫猫只是一只猫猫ρ(-ω-、)ヾ(゜ω゜;)
都曾是学生,猫猫懂的……d(´ω`*)
摘 要:目标检测是计算机视觉领域中重要的研究课题之一,本文介绍了目标检测算法的发展历程,指出了虽然目前对大中型目标的检测技术已经十分成熟,但对小型目标的检测还存在很多改进空间的现状。在详细阐述关于深度学习与卷积神经网络的理论基础后,本文结合诸多学者在小目标检测问题上提出的一些建设性改进思路,以YoloV8为基础,通过添加小目标检测头分支、引入全维度动态卷积ODConv和深度可分离卷积DWConv、添加全局多头自注意力机制MHSA模块的四种方式,针对小目标识别场景对YoloV8的架构进行了一定的优化,改进了原版YoloV8模型。最后本文对改进的YoloV8进行了性能分析与比对实验,实验结果表明,这些优化的组合对YoloV8有着不错的效果,在面对小目标时,模型的检测效果相较原版YoloV8与一些经典模型有所改进。
关键词:计算机视觉;目标检测;YOLO
目标检测是计算机视觉的重要应用之一,它的目标在于实现在图片与视频中识别期望的对象位于其中的位置。而随着计算机软硬件的发展,目标检测技术也逐渐得以在更多的实际应用场景大展身手。
而伴随着无人机遥感技术的快速发展,与目标识别技术结合的无人机在交通监控、城市规划、环境保护、灾后救援、军事侦察等多个领域的应用日益广泛。尤其是在交通监控和城市管理领域,无人机影像提供了广阔的视野和高效的数据采集方式,能够实时获取大量的图像信息。通过对遥测数据的分析,可以在车流量监控、城市建设规划等领域发挥重要作用。
与传统的地面监控系统相比,无人机影像具有覆盖范围广、视野开阔、灵活性高、调度弹性等优势。这使得它们在智慧城市、智慧交通、环境保护等领域能够提供更为精准的数据支持,促进更高效的决策和管理。
然而,这种大范围遥测图像的分析与应用也有着诸多技术上的难题。特别是图像中的小型目标识别,这是当前计算机视觉和目标检测技术中的一个难题。
在无人机影像中,常常包含大量的小型目标,这些目标可能是交通工具(如小型汽车、电动车、摩托车等)、建筑物、动物,甚至是行人。尽管目标检测技术在一些大目标的识别上已经取得了显著进展,但在小型目标的检测与识别上,仍然存在诸多问题——因为遥测图像往往分辨率和传输带宽受限,并且小目标在图像中占据的像素较少、背景复杂多变,导致传统算法难以在保证精度的同时,保持高效性。
而近年来,基于深度学习的目标检测算法在处理高分辨率图像、提高检测速度和精度方面取得了显著进展。为了提升小目标识别的精度,研究者们提出了多种改进方案,如多尺度特征提取、注意力机制、数据增强等方法。这些技术不仅可以优化小目标的检测效果,也为不同领域的应用提供了泛用的解决方案。
本研究旨在基于深度学习的目标检测技术,结合YOLOv8模型对无人机影像中的小型目标进行精准识别。通过对YOLO模型进行优化,尝试引入特征融合、注意力机制等最新技术,力求在无人机航拍的场景下实现对各种小目标的高效检测。
目前,目标检测算法主要分为两类[1],即基于传统机器学习的目标检测算法和基于深度学习的目标检测算法。
基于机器学习的目标检测算法的发展是以解决特定场景的需求为起点的。
2001年,首个机器学习检测框架在对人脸检测的需求下诞生,即Viola等人[2]提出的Viola-Jones检测器。这种检测器通过Haar-like特征描述局部纹理,结合级联(Adaboost)分类器逐层丢弃负样本,快速筛选人脸区域,大幅提升了检测速度,在实时性上取得了较大突破。这也是目标检测算法首次在实时性上取得突破,在当时让它一举成为了早期人脸检测方案的标杆。
Viola-Jones检测器的成功启发了更多学者将Viola等人的思路迁移其它领域,例如2005年Dalal等人[3]提出的方向梯度直方图HOG算法。HOG算法不再局限于过往的刚性目标检测,而是通过统计图像局部区域的梯度方向分布来描述物体轮廓,这使得它在行人检测等小目标检测方面表现相较以往方案有了大幅进步。尽管HOG算法本身由于采用固定窗口等原因导致发展遇到瓶颈,但它的设计思想为此后目标检测算法的发展提供了指导和基础[4]。
此后的学者也继续对这些方案进行着改进。如2008年Felzenszwalb等人[5]提出了可变形部件模型DPM算法,这种算法将目标分解为根滤波器和多个可形变的部件滤波器,通过潜变量SVM联合学习部件位置和形变代价,改进了HOG特征,并引入基于图结构的识别方法,进一步提升了对复杂非刚性物体的检测。这种方案的思路是将目标拆解为多个可形变的部件,通过建模部件间的相对位置关系提升检测鲁棒性。例如识别人类时,该方案会分别将人的头、身体、四肢作为部件,这样,检测时就可以根据识别出的头、身体、四肢之间的相对关系是否符合位置关系建模,达到确定目标整体是否是一个人的目的。
由此,基于机器学习的目标检测算法形成了"人工设计特征+分阶段处理"的典型模式,表现在识别流程上则是候选区域生成、特征提取和分类检测三个阶段。
但这种架构在检测存在一些难以避免的性能浪费与理论瓶颈。其中,性能浪费和基于机器学习的目标检测算法的运行流程有关。理论瓶颈则表现为人工特征的设计高度依赖先验知识。
在选择候选区阶段,由于目标在图像上的位置随机性较高,无法通过先验性知识确定,因此通常是多尺度的窗口在欲检测的图像上滑动,遍历图像上所有内容,并计算窗口所在区域内图像的粗略预测值,用以在下一步中进行选取特征的提取。这意味着,实际应用时会有大量的重复计算浪费在无效选区的提取上。例如对500×500像素的图片以10种尺度扫描,那么需要处理的候选区将会达到百万量级,而实际成功识别的候选区可能只有数个。在这种架构下,候选区阶段的性能浪费是无法避免的。
在提取特征阶段,需要通过人工设计的算法对选中的候选区内的信息进行提取,在这一步里算法也遇到了瓶颈问题,例如HOG算法通过目标的梯度变化来提取特征,对刚性目标边缘轮廓识别效果较好,但在目标形变的情况下却效果不佳,例如表现为可以识别静态的某种动物,但难以识别运动的同种动物。DPM算法引入了部件相对位置建模,但是它高度依赖人类的先验经验,需要人工定义形变约束,同时导致了计算复杂度的急剧上升和难以泛化的问题。
而分类检测阶段,分类器的性能也高度依赖特征设计的质量,这同样极度依赖人类的先验经验进行人工设计。难以设计出泛用的特征导致了针对不同目标设计算法时的成本激增。
综上所述,基于机器学习的目标检测算法存在着巨大的局限性,无论是执行过程的性能浪费还是算法设计过程的缺乏泛用方案,都使得这些检测方法难以在许多场景应用,只能在特殊环境下使用。
随着深度学习的兴起,目标检测算法在机器学习时代所遇到的问题迎来了解决的转机。
深度学习算法的学习模式是端到端的,这使得算法可以直接从数据中习得本质的抽象特征,以提高目标检测的泛化能力。
最初基于深度学习的目标检测算法是两阶段的。
2014年,Girshick等人[6]提出了第一个两阶段的目标检测算法R-CNN,标志着卷积神经网络在目标检测领域的首次应用。
该算法会通过选择性搜索框定2000个候选区域,并对每个候选区域独立进行卷积运算以提取特征,然后通过支持向量机完成分类和回归定位。这个方案使R-CNN相较于过去基于机器学习的算法在精度上取得了极大的进步,在VOC2007数据集中取得了58%的mAP,这与当时的机器学习算法相比有至少10%以上的提升。
但作为初期方案,R-CNN也有明显的缺点。例如:每个候选区域都要分别通过CNN前向传播,从而造成重复计算和性能浪费;特征数据采用分阶段存储,占用内存极大。
为了解决这些问题,Girshick等人[7]于次年2015年提出了Fast R-CNN算法。Fast R-CNN引入了感兴趣区域池化层,算法能够对整幅图像和候选区域进行特征提取,并将任意尺寸的候选区域特征转化为固定维度的特征向量,从而提高检测速度。但是Fast R-CNN在候选区域生成阶段仍然使用经典的选择性搜索,旧方法的短板效应制约了Fast R-CNN的性能发挥。
同年,Ren等人[8]进一步提出了Faster R-CNN算法以进一步解决候选区域生成与特征提取之间的计算割裂问题,通过引入了区域候选网络RPN,在卷积神经网络输出的特征图上滑动,以锚点(Anchor)机制生成多尺度、多宽高比的候选框,并同步预测每个候选框的目标存在概率与边界框偏移量的方式,使得候选区域生成与目标检测任务共享卷积特征,相较于过去选择性搜索(Selective Search)大幅提升了特征图像的提取速度。
通过上述的发展历程,基于深度学习的目标检测算法实现了端到端的实时监测,在准确度上也逐渐得到主流学界认可。
但由于两阶段检测的设计,加上当时的硬件水平限制,这些算法的单帧推理时间普遍较长,即使是Faster R-CNN也依旧无法达到实时监测的要求。这使得后续研究逐渐转向一阶段的目标检测算法,但上述历程不同学者所提出的核心思想仍深刻影响着目标检测领域的后续研究。
在一阶段目标检测算法中,SSD[9]和YOLO[10]算法是最具代表性的。相较于两阶段目标检测算法,它们都大大降低了计算复杂度、提升了单帧推理速度。
其中,SSD融合了多尺度特征图与预设锚框,以达到保持类似Faster R-CNN的准确度的同时实现实时检测,但其对小目标检测效果较差,且模型复杂度较高的特点使得后续针对其的优化改进研究较少。
而YOLO则将检测流程直接简化为单次回归问题:通过将图像划分为S×S的网格,以直接对整个图像回归的方式免去了用RPN 提取区域候选框的全部计算流程,大幅提升了检测效率。YOLO算法的名称"你只需看一次"(You Only Look Once)来源也正是对其独特检测过程的阐述。
2017年,YOLO系列的提出者Redmon等人[11]在YOLOv2(YOLO9000)算法中重新引入锚框机制,并构建Darknet-19骨干网络,通过特征金字塔融合与多尺度预测使检测精度提升至与SSD相当的水平。
2018年,Redmon等人[12]进一步在YOLOv3引入了Darknet-53骨干网络,其中还参考了金字塔网络(FPN)的思想和ResNet网络结构,实现了多尺度特征融合,在保证与YOLOv2相近的检测速度的基础上,大幅提升了检测精度。此后,YOLO系列的开创者Redmon逐渐退出了该系列算法的开发,后续的开发被其它学者接收。
2020年,Bochkovskiy等人[13]提出YOLOv4算法,通过集成加权残差连接、Mish激活函数和跨阶段局部网络,有效提升了训练模型的检测准确度和鲁棒性。
同年,来自Ultralytics公司的Glenn-jocher等人发布的YOLOv5,YOLOv5采用PyTorch框架重构,通过向骨干网络引入Focus和CSP模块,把FPN+PAN架构应用到neck端,YOLOv5在经典场景的检测效率有了质的飞跃,这也标志着基于深度学习的目标检测算法在实际应用场景中的可用度达到了相当的高度,相关技术逐渐应用在广大的边缘设备当中。直到今天,YOLOv5极其改型依然是许多应用场景下的优秀选择。但YOLOv5也存在着在抗畸变、抗噪声方面的不足,例如难以适应视角的变化、由环境光或天气导致的图像模糊与形变等。
之后,来自美团的Li等人[14]于2022年发布的YOLOv6与Ultralytics公司于2023年基于YOLOv5改进的YOLOv8成为了目前应用场景中的主要选择。其中YOLOv6的关键改进是引入了RepVGG风格的EfficientRep骨干网络,并将neck端优化为更轻量化的RepPAN多尺度特征融合模块,大幅提升了推理速度。YOLOv8则抛弃了YOLOv2以来的锚框机制与YOLOv5的Focus模块,采用无锚点(Anchor-free)检测头,并通过任务解耦头和动态卷积Cf2模块进一步优化了性能。
作为一个跨学科的研究领域,计算机视觉的首要目标是赋予计算机系统分析和理解视觉信息的能力。
计算机视觉综合了模式识别、图像工程和认知科学等多个领域的知识。它的发展过程经历了从早期基于规则的符号处理到现代数据驱动范式的重大转变。在技术演进的过程中,计算机视觉逐渐形成了一个完整的技术体系,涵盖了低级特征提取(如边缘检测)、中级语义分析(如场景理解)、高级认知推理(如行为识别)等方面。
随着新的传感器技术和计算体系架构的发展,计算机视觉的应用正从最初的工业品质控制和军事目标识别等特定领域扩展到图像分类、物体检测、人脸识别、自动驾驶等创新应用场景。特别是涉及时空数据分析的领域,深度学习的时间卷积网络与三维视觉建模技术相结合,在动态场景理解和多模态信息融合方面取得了前所未有的精度,为构建智能视觉感知系统提供了坚实的技术支撑。
深度学习是一种基于人工神经网络的机器学习方法,主要用途是通过大量数据训练提取目标的特征,从而实现在期望场景下对目标的预测和分类。
深度学习的历史可以追溯到20世纪50年代的感知器模型,但彼时受制于算力与算法发展,深度学习还只是一种停留在数学理论与实验室雏形阶段的概念。
随着20世纪的世纪之交到来,计算机算力的提升、数据采集技术的成熟以及算法的改进使得深度学习逐渐走出实验室,迈向实用阶段。
1986年,Rumelhart等人[15]提出的反向传播BP算法,首次系统化地提出了基于链式求导法则的误差反向传播算法,解决了多层神经网络参数优化的核心难题。反向传播算法打破了此前单层感知器的局限,为深层网络训练奠定数学基础,是之后所有基于深度学习的算法的基础。
1998年,LeCun等人[16]提出的LeNet-5在手写数字识别上取得了优秀的成绩,同时也奠定了卷积神经网络(CNN)交替堆叠卷积层加池化层的标准架构。这也是首个在商业场景应用的卷积神经网络技术。
而以2012年Krizhevsky等人[17]提出的AlexNet为标志,深度学习逐渐从数学理论和实验室话题转变为具有实用价值的技术。AlexNet之所以得到广泛认可,是因为其发布之初就在ImageNet大赛中以绝对领先的优势取得优胜。由此开始,以卷积神经网络进行特征提取的思路在深度学习中得到广泛应用。
卷积神经网络是前馈神经网络的一种,设计上参考生物的视觉神经系统。图2.1展示了一个典型的卷积神经网络结构,这是最基础的卷积神经网络结构,多数早期模型都采用这种结构。
图2.1 卷积神经网络结构 |
后来的研究中,在这个基础上又新增了一些步骤以优化效率,接下来我们逐一介绍。
输入层的作用是对数据进行一些预处理,例如统一灰度处理、归一化等。
卷积神经网络通过卷积层(Convolutional Layer)自动提取输入数据的空间特征。卷积层通常有多个卷积核,每一个卷积核都对应一种滤波器。卷积层在对图像进行处理时会使卷积核在图像上滑动,计算生成该图像的特征图。
接下来以多通道输入与输出为例,描述卷积层的计算过程。设输入特征图为三维张量 $X \in R^{H \times W \times C}$,其中$H$和$W$为空间尺寸,$C$为通道数。卷积层通过$D$个尺寸为$K \times K$的滤波器组$W \in R^{K \times K \times C \times D}$提取特征,若有步长$S$、填充量$P$,则输出特征图$Y \in R^{H' \times W' \times D}$的尺寸为:
$$H' = \left\lbrack \frac{H + 2P - K}{S} \right\rbrack + 1,\ W' = \left\lbrack \frac{W + 2P - K}{S} \right\rbrack + 1$$
若有非线性激活函数$\sigma( \bullet )$,记第d个通道的偏置项为$b_{d}$,则输出位置$(i,j,d)$的值为:
$$Y_{i,j,d} = \sigma\left( \sum_{C = 1}^{C}{\sum_{m = 0}^{K - 1}{\sum_{n = 0}^{K - 1}{W_{m,n,c,d} \bullet X_{S \bullet i + m - P,S \bullet j + n - P,C} + b_{d}}}} \right)$$
图2.2 卷积层 |
图2.2中描述了上述公式的计算流程。可以发现,卷积核会以自身权重对输入的重叠区域内每个区块进行相乘求和,这样的步骤不断重复,当输入被完整遍历后,就可以得到描述该图像的特征图了。
通过这一步骤,我们可以得到对输入图像的抽象表达。
卷积层后通常是池化层(Pooling layer),它的作用是进行下采样,即通过对卷积层计算所得的特征图进行空间维度的降维,压缩模型的参数量,以降低内存消耗和加快运算速度,同时提升模型的鲁棒性。
一般地,池化层分为两种,即最大池化和平均池化。
在最大池化中,池化窗口内只会保留其中的最大值。通过这种策略,可以有效提取图像中最明显的特征,例如边缘和纹理。这样可以有效增强模型对特征的感知能力、提升抗干扰能力,但与此同时一些相对不显著的信息就会被忽略。
平均池化则通过对池化窗口内所有像素值进行平局平均计算,从而保留整体的特征信息。通过这种方式,可以使得算法在对细节信息要求较高的场景下取得更好的效果。但也因为不强调特征的处理方法,使得它在通过特征识别目标的目标检测场景应用较少。
一般而言,在目标检测中主要使用最大池化的方式,这是因为目标检测一般是通过欲检测目标的最显著宏观特征进行的,平均池化反而会使得对目标特征的提取效果不佳。
接下来以上一节中得到的特征图为例,简述两种池化的计算流程。在得到特征图$Y \in R^{H' \times W' \times D}$的情况下,当池化窗口尺寸为$K_{p} \times K_{p}$时,若有步长$S_{p}$,则池化层对每个通道进行独立操作时有采样特征图$Y_{pool} \in R^{H'' \times W'' \times D}$,其空间尺寸满足:
$$H'' = \left\lbrack \frac{H' - K_{p}}{S_{p}} \right\rbrack + 1,\ W'' = \left\lbrack \frac{W' - K_{p}}{S_{p}} \right\rbrack + 1$$
在池化过程中,池化窗口$K_{p} \times K_{p}$会按照步长$S_{p}$在特征图$Y \in R^{H' \times W' \times D}$上滑动,通常是从特征图的坐上开始按照步长滑动,直到遍历整个特征图。其中,所有被池化窗口覆盖的区域都会根据池化类型计算其最大值或平均值。
图2.3 池化示意图 |
单个池化窗口内的操作如图2.3所示,左侧为池化窗口在特征图$Y \in R^{H' \times W' \times D}$上的一个选区,右侧为这个选区计算所得的结果,最终其会被计入采样特征图$Y_{pool} \in R^{H'' \times W'' \times D}$中的对应位置。
最大池化的计算流程可以描述为:
$$\left( Y_{pool} \right)_{i,j,d} =_{0 \leq m,n < K_{p}}^{\max}\left( Y_{S_{p} \bullet i + m,S_{p} \bullet j + n,d} \right)$$
平均池化的计算过程可以描述为:
$$\left( Y_{pool} \right)_{i,j,d} = \frac{1}{K_{p}^{2}}\sum_{m = 0}^{K_{p} - 1}{\sum_{n = 0}^{K_{p} - 1}Y_{S_{p} \bullet i + m,S_{p} \bullet j + n,d}}$$
完成计算后,将计算得到的值填入采样特征图中作为新的值,并继续滑动窗口直到计算完毕,就可以得到满足前述空间尺寸的采样特征图。
全连接层(Fully Connected Layer, FC Layer)作为特征空间到决策空间的桥梁,位于卷积神经网络的输出端,常衔接于池化层之后。此时,经过多次卷积操作和空间下采样,提取出的高维特征映射将通过全连接层进行全局特征聚合与非线性变换。
当池化层输出采样特征图$Y_{pool} \in R^{H'' \times W'' \times D}$后,全连接层会将其展平为向量$v \in R^{H'' \times W'' \times D}$,设全连接层神经元数量为$M$,当存在权重矩阵$W \in R^{M \times (H''W''D)}$、偏置向量$b \in R^{M}$,则激活函数$\sigma( \bullet )$的结果为:
$$z = \sigma(W \bullet v + b)\ \ \ \ \epsilon\ R^{M}$$
图2.4 全连接层 |
图2.4展示了一个基本的全连接层结构示意图,其中输入层接收的是前一层的输出,例如池化层的采样特征图。这里的输入、输出是相对于全连接层而言的,在输入层,接受的采样特征图会被展平为向量,而隐藏层则使用权重函数和偏置向量进行特征聚合与非线性变换,最后通过激活函数产生的结果会在输出成产生。
激活函数(Activation Function)是卷积神经网络进行非线性表达的核心组成部分。主要作用是对神经元输出进行非线性映射,使卷积神经网络具备学习复杂的特征信息与边界决策的能力,赋予网络分层抽象特征的能力。
从梯度特性与输出范围的角度来看,可将激活函数分为饱和型(Saturated)与非饱和型(Non-Saturated)两类。数学上,两者的区别在于导数是否在无穷趋近于0。
接下来,会介绍一些不同场景使用的函数:
(1) Sigmoid函数
Sigmoid函数[15]是一种典型的饱和型函数,一般用于输出层。该函数的特点是输出值在$(0,1)$的区间内,数学表达式为:
$$\sigma(x) = \frac{1}{1 + e^{- x}}\ \ \ \ \in \ (0,1)$$
可以发现,当$|x| \gg 0$时,函数的梯度趋于零,即$\sigma'(x) \rightarrow 0$导致梯度消失,这使得该函数在反向传播中难以更新参数。
(2) Tanh函数
Tanh函数[16]也是一种常见的饱和型函数,常用于在隐藏层中代替Sigmoid函数作为改进,其数学表达式为:
$$\tanh(x) = \frac{e^{x} - e^{- x}}{e^{x} + e^{- x}}\ \ \ \ \in \ ( - 1,1)$$
可以发现,相较于Sigmoid函数,Tanh函数在原点附近的梯度更大,能够缓解Sigmoid函数的梯度消失问题,增强反向传播时的参数更新速度。并且,由于Tanh函数的输出范围为$( - 1,1)$、均值为$0$,与Sigmoid函数的输出范围$(0,1)$、均值为$0.5$相比,这种数学特性使得下一层输入的分布更对称,梯度更新方向更一致,能够有效减少权重震荡、加速收敛。
这些特性使得Tanh函数在隐藏层中能取得比Sigmoid函数更高的效率。但在输出层,由于Sigmoid函数的输出范围为$(0,1)$,可以直接映射为概率分布,因此多数情况下依然是比Tanh函数更好的选择。
(3) ReLU函数
ReLU函数(Rectified Linear Unit)[17][18]是一种典型的非饱和型函数,常用于全连接层中的隐藏层,其数学表达式为:
$$ReLU(x) = max(0,x)$$
可以发现,ReLU函数中当$x \leq 0$时$ReLU(x) = 0$,当$x>0$时$ReLU(x) = x$。这意味着当$x > 0$时导数为$1$,但整体却呈现非线性状态,有效地解决了梯度消失的问题,这种简单的数学特性使得ReLU函数的计算速度远快于Sigmoid函数和Tanh函数。并且,由于负输入被重置为0,可以使导致部分神经元模拟未激活的状态,起到增强模型稀疏性、减少过拟合的作用。这种特性使得ReLU在隐藏层中可以有效防止过拟合,提升训练效率。
但输入负值一律输出0的数学特性,也使得在部分情况下输入恒为负时,神经元会因梯度归零完全失效,这被称为Dead ReLU问题。
(4) Leaky ReLU函数
Leaky ReLU函数[19]通过在ReLU函数的负区间引入斜率$\alpha$,以保留负值信息,在一定程度上缓解了Dead ReLU问题,其数学表达式为:
$$ \mathrm{LReLU}(x) = \begin{cases} x, & x \ge 0 \\ \alpha x, & x < 0 \end{cases} \quad (\alpha \in (0,1)) $$
可以发现,当$\alpha$的设定值较低时,Leaky ReLU函数可以在负区间保持一定的梯度,这种设计保证了反向传播时的参数更新,缓解了神经元失效的Dead ReLU问题。
不过,由于$\alpha$的值需要事先指定,这会导致不同参数在模型训练中的效果不同,使得寻找最优参数的时间和算力成本增加。
(5) Softmax函数
Softmax函数[20]是一种梯度非典型的激活函数,其数学表达式为:
$$Softmax\left( x_{i} \right) = \frac{e^{x_{i}}}{\sum_{j = 1}^{M}e^{x_{j}}}\ \ \ \ \in \ (0,1)\ \ \ \ \left( i = \left\{ i|1 \leq i \leq M,i \in Z \right\} \right)$$
其中,输入$x_{i}$为全连接层的第$i$个神经元的输出值,$M$为全连接层的神经元总数。
可以发现,对于某一个输出节点,当$x_{i}$的值远大于其它输入时,有$Softmax\left( x_{i} \right) \rightarrow 1$,可以算得梯度为$\frac{\delta Softmax\left( x_{i} \right)}{\delta x_{i}} = Softmax\left( x_{i} \right) \bullet \left( 1 - Softmax\left( x_{i} \right) \right) \rightarrow 0$,即发生了梯度消失的饱和现象。
但在实际应用中,Softmax函数通常与一些损失函数联用,用来解决梯度消失的现象。
例如与交叉熵损失(Cross-Entropy Loss)联用时,若真实标签为独热编码向量$y = \{\, y_i \mid 1 \le i \le M,\ i \in \mathbb{Z} \,\}$,则交叉熵损失函数为$\mathcal{L} = - \sum_{i = 1}^{M}{y_{i} \bullet \log\left( Softmax\left( x_{i} \right) \right)}$,此时对该$x_{i}$有梯度$\frac{\delta\mathcal{L}}{\delta x_{i}} = Softmax\left( x_{i} \right) - y_{i}$。
现在可以发现,现在的梯度与Softmax函数本身的导数无关,而是函数结果与真实标签的差值,即模型的预测误差。这就使得Softmax函数作为一种梯度非典型的函数在多分类任务中得到广泛的使用。
不过,尽管在隐藏层,ReLU函数取代了此前大多数激活函数;在输出层,Softmax函数也有着优异表现。但在一些特殊情况下,一些理论性能较差的函数也有着特殊的作用。
例如在二分类任务中,Sigmoid函数由于因其输出范围在$(0,1)$的区间内而能够将输出直接映射为概率的特性,使其在二分类任务中的表现不仅优于同为饱和型函数的Tanh函数,在很多时候也比Softmax函数优秀。
因此,就目前而言,根据具体任务在不同层级选用最适合的激活函数是较为普遍的做法。
本次实验所采用的方案如图3.1所示。
首先,通过网络查找与开源数据等整理符合要求的数据集,并进行清洗和数据标注,形成数据集,然后以7:2:1的比例将它们划分为训练集、验证集和测试集。
然后,使用该数据集对Faster R-CNN、YoloV5、YoloV8进行复现。
再通过增加小目标检测头分支、全维度动态卷积模块、卷积和注意力融合模块对YoloV8进行优化。
最后通过实验分析,将优化后的YoloV8与Faster R-CNN、YoloV5、YoloV8进行性能对比和分析,验证优化实验的有效性。
图3.1 流程图 |
本次实验采用了以无人机航拍、遥感的复杂环境下拍摄的地面车辆图像构建数据集,以对地面的小型车辆、大型车辆两类目标作为检测类型。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| 图3.2 数据集样例 | ||
为实现针对小目标的目标检测优化,需要先收集合适的包含大量小目标特征的数据集,本次实验选取的具体场景是在无人机遥感拍摄的视角下对地面车辆小目标进行识别。
经过搜集和筛选,一共选取了8000张图片作为本次实验的数据集,这些数据集以7:2:1的比例随机划分为训练集、验证集以及测试集。
如图3.2所示,上面展示了数据集中的几类典型的图像类型,包含不同视角方向、拍摄高度、环境光照以及光学畸变。并且待检测目标在图像中目标尺度差异大、像素占比低,对模型的小目标检测能力要求较高。
在数据集收集完成后,需对图像中的目标进行精确标注。本次实验使用了LabelImg[21]工具对图像中的小目标进行手动标注。LabelImg提供了直观的图形用户界面,使标注过程更加高效。通过人工观察图像,可在界面中直接绘制边界框,并为不同类别的目标赋予相应的标签。
图3.3 使用Labelimg对图像进行标注 |
如图3.3所示,图示界面将地面车辆分为大型车辆和小型车辆,分别将标签标记为Large_Truck和Car,并分别进行了标注。LabelImg支持将标注结果导出为多种格式。
完成对图像的标注后,会得到供模型训练脚本使用的标注文件,与图像配套使用,其中,适用于Faster R-CNN的Pascal VOC格式多为XML文件,典型结构如下:
<annotation>
<filename>image1.jpg</filename>
<size>
<width>1280</width>
<height>720</height>
</size>
<object>
<name>Car</name>
<bndbox>
<xmin>220</xmin>
<ymin>160</ymin>
<xmax>460</xmax>
<ymax>300</ymax>
</bndbox>
</object>
</annotation> 文件中包括图像的文件名、分辨率,以及若干个以<object>包裹的目标坐标,帮助算法定位到图像中需要学习的目标。
适用于Yolo的TXT中则以若干行格式为[class_id x_center y_center width height]的文本构成,例如0 0.265 0.320 0.188 0.194。其中,所有坐标信息均为归一化后的比例值,一行代表一个标注目标。
经过上述流程,我们得到了用于本次实验后续流程的全部数据集,接下来对数据集的数据分布进行说明。
如图3.4所示,这是将所有数据集图像归一化为固定尺寸后,叠加所有训练集标注框的中心点位置及尺寸分布产生的中心点热力图(左)和边界框尺寸散点图(右)。其中,中心点热力图以颜色深浅表示目标在图像中的空间分布密度,边界框尺寸散点图的横纵坐标为归一化的宽高比例,以散点大小与颜色深浅反映相应尺寸的目标的出现频次。
图3.4 数据集中目标的空间分布热力图 |
图3.5 目标在图像中的位置与目标尺寸的坐标相关性图 |
从中心点热力图可以看出,数据集中标注的目标主要集中在大体呈十字的区域,左下和右下的边缘也较为集中,这和数据集图像多选用十字路口场景有关。而从边界框尺寸散点图可以看出,目标尺寸基本集中在width≈0.03-0.04、height≈0.02-0.04的尺寸,这是因为数据集全部采用航拍或遥感产生的图像,作为检测目标的车辆在图像中占比较小,属于小目标。
如图3.5所示,坐标相关性图展示了标注中各个标签属性之间的分布关系。其中x和y表示标注框中心点在图像中的归一化坐标,而width和height则分别表示标注框在水平方向与垂直方向的归一化尺寸。
从图中可以发现,目标尺寸与其在图像中出现的位置(x,y)之间没有显著的相关性,无论目标位于图像的哪个区域,其width和height的分布均相对稳定。这说明数据集中大部分目标的尺寸较为一致,符合本实验面向小目标检测的研究方向,同时也与航拍视角下地面车辆尺寸相对接近的特点相吻合。
图3.6 YoloV8结构图 |
本次实验是对YoloV8进行优化,我们首先阐述YoloV8的结构。
如图3.6所示,YoloV8由骨干网络(Backbone)、颈部网络(Neck)、检测头(Head)三个部分组成。
骨干网络采用多层级卷积堆叠的结构,通过基础卷积层Conv与跨阶段特征融合模块C2f逐级提取图像语义特征。
其中,C2f模块(Cross Stage Partial fusion with 2 convolutions)在YoloV5的C3结构基础上引入残差连接与分支简化策略,通过梯度分流机制增强表层特征的复用率,使得梯度流动更丰富,同时起到降低计算产生的冗余消耗的效果。
如图3.7所示,当输入特征图$X \in R^{H \times W \times C}$后,首先通过一个$1 \times 1$的卷积压缩通道数,然后分为两个并行支路。主支路由若干个Bottleneck轻量化单元堆叠而成,每个Bottleneck单元包含$3 \times 3$卷积与残差连接,用于逐层提取图像的局部特征,单元的数量会根据网络深度动态调整。旁路支路直接保留原始输入的部分特征,通过Split操作截取前$\frac{C}{2}$通道的特征切片,作为浅层信息的补充。
图3.7 C2f结构图 |
空间金字塔池化模块(Spatial Pyramid Pooling Layer, SPPF)则会进一步聚合多尺度上下文信息,形成高语义密度的特征表达。
颈部网络采用双向特征金字塔架构(Bi-directional Feature Pyramid Network, BiFPN),通过多尺度特征融合机制增强模型对目标尺寸变化的鲁棒性。
如图3.6所示的颈部网络部分,颈部网络首先对骨干网络输出的深层语义特征进行上采样(UpSample)操作,将其空间分辨率恢复至与浅层特征图一致。
随后通过跨层拼接(Concat)将上采样后的深层特征与来自骨干网络不同层级的浅层特征沿通道维度融合。
拼接后的特征图由C2f模块进一步处理,确保融合特征在增强语义表达的同时减少空间细节的丢失。通过不断重复上采样、拼接的操作,构建包含多粒度信息的特征金字塔。
最后,经多级双向融合后的特征图通过C2f模块输出,或由检测头接收,或进一步执行跨层拼接,以匹配不同尺寸的检测头。
YoloV8采用解耦式检测头设计,以轻量化CBS模块与Conv2d卷积层为核心,扬弃了YoloV5中的类别预测分支。在这种设计下,边界框位置与框内目标类别的概率被拆分成两个分支处理,图3.6中每个检测头的两个分支分别处理边界框位置与框内目标类别概率。这样一来,在模型的训练过程中两个分支各司其职,能有效提升收敛效率与检测精度。
在了解YoloV8整体架构的基础上,本次实验尝试从结构、模块的方面优化YoloV8,提升其小目标检测能力。
YoloV8默认采用三尺度检测头架构,即256×256、128×128、64×64三种尺寸的检测头,分别作用于骨干网络与颈部网络融合生成的20×20、40×40、80×80的三个层级的特征图,分别处理大、中、小尺寸的目标。
在这种情况下,YoloV8对小目标的检测存在一定的局限性。这是因为浅层网络的理解能力有限,而高分辨率的浅层特征图语义信息不足,深层网络理解能力更强,但低分辨率的深层特征图又因为下采样次数过多而丢失空间细节。这就使得小目标的特征信息易被消融。
如图3.8所示,通过在原版YoloV8的基础上引入一个尺寸更小的32×32的检测头分支,作用于160×160的浅层特征图,可以更好地保留空间细节、提升小目标的检测效果。
图3.8 添加小目标检测头分支后的YoloV8结构图 |
通过增加小目标检测头分支的方式,可以有效地提升模型对小目标检测的能力。但是浅层特征本身仍然存在语义表达能力弱、背景噪声大等问题,因此本次实验在颈部网络中进一步引入了全维度动态卷积模块(Omni-dimensional Dynamic Convolution, ODConv)[22],对特征图在空间维度与通道维度上进行联合建模与动态加权,进一步增强特征表示能力并提升模型对目标的感知精度。
ODConv是动态卷积(Dynamic Convolution, DConv)的一种,DConv的核心思想是引入多个并行卷积核,基于输入特征图生成动态权重门控(gating weights),设输入特征图$x \in R^{C_{in} \times H \times W}$,当有固定卷积核$W \in R^{C_{out} \times C_{in} \times k \times k}$时,Conv和DConv在数学上分别可以表示为:
$$ \left\{ \begin{array}{l} \mathrm{Conv}(x) = W \ast x \\ \mathrm{DConv}(x) = \sum_{i=1}^{N} \alpha_i(x)\, F_i(x) \end{array} \right. $$
对于Conv卷积,式中运算符代表其定义的卷积计算,这一计算流程是恒定的,缺乏对不同输入的适应性。例如在小目标或图像畸变等非典型场景中,无论如何定义卷积运算,其表现往往有局限性。
对于DConv卷积,式中的N表示并行卷积核数量,$\alpha_{i}(x)$表示输入特征图通过门控机制生成的第i个卷积核的权重,$F_{i}(x)$表示第i个卷积核进行卷积后的输出。
在此基础上,ODConv相较于其它DConv还对输入通道、输出通道、空间维度分别就行了建模与融合,即对DConv的$\alpha_{i}(x)$部分进行了改进,将激活函数记为$\sigma( \bullet )$,其数学表达就可以写作:
$$\alpha_{i}(x) = \sigma\left( \alpha_{i}^{in}(x) \right) \bullet \sigma\left( \alpha_{i}^{out}(x) \right) \bullet \sigma\left( \alpha_{i}^{spatial}(x) \right)$$
ODConv通过根据输入数据自适应调整卷积核权重,还通过改进门控机制,使得模型能够关注空间和通道的融合信息,提升了浅层语义理解能力,在小目标检测任务中,能够更好地区分目标与背景,达到提升检测率的目的。
图3.9 引入ODConv后的C2f_OD结构图 |
图3.9展示了基于ODConv改进后的C2f结构,本次实验会用它替换所有颈部网络中的C2f结构。
在引入小目标检测头和全维度动态卷积的基础上,为进一步提升模型对全局上下文信息的建模能力,本次实验在YoloV8的骨干网络添加了全局多头自注意力模块(Multi-Head Self-Attention, MHSA)[23]。
由于小目标像素在图像中占比低、分布随机性强,在局部区域内特征无法充分表征。而自注意力机制通过计算特征图中任意两个位置的相关性,能够自适应地聚焦于关键区域,从而增强模型对小目标的定位和特征判别能力。
图3.10 自注意力机制 |
图3.10展示了自注意力机制的运行方式,图示的是单个自注意力头的结构,实际使用时往往是多个自注意力头并联,最后将每层的输出整体进行Concat后输出到下一个结构中。
其中,$\bigotimes$为矩阵乘法,$\bigoplus$为元素相加,$R_{h}$和$R_{w}$分别为高度与宽度的相对位置,$r$是两者的和。向量$Q$、$K$、$V$分别代表查询(Query)、键值(Key)、数值(Value),由输入特征$x$的线性变换算出,并且$Q,K,V \in R^{H \times W \times D'}$,三者沿通道维度被拆分为$h$个独立头(head),并分别通过缩放点积注意力计算局部注意力权重,这一过程可以表示为:
$$Attention\left( Q_{h},K_{h},V_{h} \right) = Softmax\left( \frac{Q_{h} \bullet K_{h}^{T}}{\sqrt{\frac{D'}{h}}} \right) \bullet V_{h}\ \ \ \ \in R^{(H \times W) \times \left( \frac{D'}{h} \right)}$$
然后,将多头注意力的输出沿通道维度拼接,并通过线性变换恢复通道维度,将特征图传递给下一个模块。
这种设计使模型能够动态聚焦于不同空间位置的关联性特征,同时捕捉不同的特征,多个自注意力头的协同工作可以互补各自学习到的特征,从而提高模型的鲁棒性和泛化能力。
图3.11展示了添加小目标检测头分支、在颈部网络的C2f模块引入ODConv,并在骨干网络引入MHSA模块后的YoloV8结构。
图3.11 引入ODConv和MHSA模块后的YoloV8结构图 |
由于上述改进一定程度上增加了模型在运行过程中的计算量,为了优化性能,本次实验进一步将骨干网络中CBS模块中的Conv卷积替换为深度可分离卷积(Depthwise Separable Convolution, DWConv)[24],进一步轻量化模型。
与前文作用于颈部网络的ODConv不同,骨干网络使用的DWConv相较于原本的Conv2d并没有带来检测能力的提升,而是在不影响检测效果的前提下,通过轻量化的设计减少参数量,以达到高效运行、优化性能的目的。
我们首先考察Conv的计算量,当输入特征图记为$X \in R^{H \times W \times C_{in}}$、输出特征图记为$Y \in R^{H \times W \times C_{out}}$时,若卷积核尺寸为$K \times K$,则有浮点计算量:
$${FLOPs}_{Conv} = K^{2} \bullet H \bullet W \bullet C_{in} \bullet C_{out}$$
显然,当通道数增加,其计算量也随着平方指数增长。
图3.12以三通道输入为例,展示了标准卷积和深度可分离卷积的流程区别。
图3.12 三通道输入时的标准卷积与深度可分离卷积的流程 |
深度可分离卷积分为逐深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)两部分。
逐深度卷积的卷积核是单通道的,需要对输入的每一个通道进行卷积,这样就会得到和输入特征图通道数一致的输出特征图,数学上,它可以表示为:
$${Y'}_{x,y,C_{in}} = \sum_{c = 1}^{C_{in}}{\sum_{m = 0}^{K - 1}{\sum_{n = 0}^{K - 1}W_{m,n,c}^{DW} \bullet X_{x + m - \left\lbrack \frac{K}{2} \right\rbrack,y + n - \left\lbrack \frac{K}{2} \right\rbrack,c}}}$$
这种情况下,有浮点计算量:
$${FLOPs}_{Depthwise} = K^{2} \bullet H \bullet W \bullet C_{in}$$
在逐深度卷积计算完成后,为得到和标准卷积相同的结果,还需要进行逐点卷积。
逐点卷积的实质是通过一个$1 \times 1$的卷积核对逐深度卷积得到的特征图进行升维,一般而言逐点过滤器的尺寸为$1 \times K \times K$,其中$K$为逐深度卷积输出的特征图数量,这一过程在数学上的表达是:
$$Y_{x,y,C_{out}} = \sum_{c = 1}^{C_{in}}{W_{c,C_{out}}^{PW} \bullet {Y'}_{x,y,C_{in}}}$$
实际应用中,会有多个逐点过滤器同时工作,以输出多个最终经深度可分离卷积处理的特征图,其中,浮点计算量可以表示为:
$${FLOPs}_{Pointwise} = H \bullet W \bullet C_{in} \bullet C_{out}$$
则深度可分离卷积DWConv的总浮点计算量为:
$${FLOPs\ }_{DWConv} = H \bullet W{\bullet C}_{in} \bullet \left( K^{2} + C_{out} \right)$$
通过计算两种卷积的比值,可以得到:
$$\frac{{FLOPs}_{DWConv}}{{FLOPs}_{Conv}} = \frac{H \bullet W{\bullet C}_{in} \bullet \left( K^{2} + C_{out} \right)}{K^{2} \bullet H \bullet W \bullet C_{in} \bullet C_{out}} = \frac{1}{C_{out}} + \frac{1}{K^{2}}$$
可以发现,DWConv的浮点计算量与Conv相比有了很大的降低,就本次实验的架构而言,有$K = 3$、$C_{out} = 256$,则单个CBS模块的浮点计算量会变为原本的$\frac{265}{2304}$,即约11.5%左右,相当于在这些环节优化了近90%的浮点计算量。
图3.13 在骨干网络引入DWConv后的YoloV8结构图 |
图3.13展示了引入DWConv后的YoloV8结构图,其中将三个CBS-C2f结构改为了DBS-C2f结构,DBS结构中包含了完整的DWConv流程。
其中,图像输入后的头两个CBS依然保持标准卷积Conv的结构,这是因为浅层特征图尺寸较大,但通道数却比较低,这种情况下,标准卷积的计算量不高,因而对浅层网络进行轻量化处理的效果不大。同时,浅层特征对空间细节高度敏感,标准卷积能够充分捕获局部细微变化,避免轻量化卷积因通道独立计算导致的细节丢失。两相叠加,在骨干网络浅层保留标准卷积结构的效果反而比较好。
由此,通过添加小目标检测头分支、使用全维度动态卷积改进颈部网络的C2f模块、在骨干网络末尾引入全局多头自注意力机制模块、对骨干网络深层的CBS模块引入DWConv进行改进,我们完成了对YoloV8的算法优化。
在完成对YoloV8的优化后,我们需要对其进行性能分析,通过与Faster R-CNN、YoloV5以及原版YoloV8进行一系列指标的对比,从而验证优化的有效性。
接下来介绍实验进行的计算机环境。
| 表4.1 实验环境 | |
| 配置项 | |
| 操作系统 | Windows 10 IoT LTSC 2021(21H2 19044) |
| CPU | AMD Ryzen 7 5800H |
| GPU | NVIDIA GeForce RTX 3050 |
| 可用显存 | 8GB |
| CUDA版本 | 11.7.1 |
| 编程语言 | Python 3.9.13 |
| 编程IDE | PyCharm Professionl 2024.3.5 |
| 深度学习框架 | PyTorch 1.13.1 |
混淆矩阵是在分类模型性能测试中常用的一种评价体系,如表4.2所示,混淆矩阵有四种状态。
表4.3列出了在目标检测任务中四种状态的具体含义。
| 表4.2 混淆矩阵 | ||
| 预测为正(Positive) | 预测为负(Negative) | |
| 实际为真(True) | TP | FN |
| 实际为假(False) | FP | TN |
| 表4.3 混淆矩阵四种状态在目标检测任务中的含义 | |||
| 状态 | 目标实际状态 | 模型预测 | 代表 |
| TP | 目标存在 | 目标存在 | 模型检测错误(正确检测) |
| TN | 目标不存在 | 目标不存在 | 模型检测正确(正确忽略) |
| FN | 目标存在 | 目标不存在 | 模型检测错误(漏检) |
| FP | 目标不存在 | 目标存在 | 模型检测错误(误检) |
通过混淆矩阵,我们可以进一步地得出几个基础的指标:
(1) 准确率
准确率(Accuracy)能够反映出模型整体的正确率,但由于混淆矩阵本身不区分具体类别,因此无法反映模型在具体类别上的正确率,其数学表达如下:
$$Accuracy = \frac{TP + TN}{TP + FP + TN + FN}$$
(2) 召回率
召回率(Recall)衡量模型对正确样本的识别能力,又称查全率,为检测出的正确样本占测试集样本的比值,数学表达如下:
$$Recall = \frac{TP}{TP + FN}$$
(3) 精确率
精确率(Precision)衡量模型的精确度,为检测出的正确样本占所有正确样本的比值,在数学上表达如下:
$$Precision = \frac{TP}{TP + FP}$$
(4) F1分数
F1分数(F1-Score)是精确率和召回率的调和平均数,能够反映数据分布不平衡的情况下模型的性能,数学上的表达如下:
$$F1 = \frac{2 \bullet Precision \bullet Recall}{Precision + Recall}$$
由于准确率指标过于宽泛,本次实验选择了召回率、精确率和F1分数作为评价指标。
在此基础上,本次实验又引入了平均精度均值(mean Average Precision, mAP)作为评价指标。
要得出mAP,首先要算出模型的平均精度(Average Precision, AP),而这需要先绘制精确率-召回率曲线(Precision-Recall Curve, P-R Curve),这是一条以召回率为横坐标、准确率为纵坐标的曲线。得到曲线后,计算图像在$Recall \in \lbrack 0,1\rbrack$的区间内的积分面积,即可得到AP值,数学上表达为:
$$AP = \int_{0}^{1}{P(r)dr}$$
得到AP后,就可以以此计算mAP,mAP是所有类别的AP值的算术平均数,设类别数为N,则mAP在数学上表达为:
$$mAP = \frac{1}{N}\sum_{c = 1}^{N}{AP}_{c}$$
本次实验采用IoU阈值为0.5的计算方式,即[email protected]标准。
图4.1详细地展示了改进型YoloV8的性能指标。
在精确率-置信度曲线中我们可以知道,在置信度阈值设置为0.840时,模型的精确率达到1.00,这说明在验证集验证时,当预测框的置信度大于0.84后,模型不存在任何误检。
同时,F1分数在置信度阈值0.538时达到峰值0.96,说明该模型在精确率与召回率方面平衡较好,说明此种算法在针对小目标的情况下可以训练出较为通用的高性能模型。
而当置信度降至0.00时,模型的召回率达到0.99,这说明模型的漏检率较低。验证了本次实验对小目标和遮挡目标的检测能力的增强。
在与原版YoloV8的对比中,改进型YoloV8也有着不错的成绩。
图4.2和图4.3分别展示了改进型YoloV8和原版YoloV8在本次实验数据集下的边界框损失曲线、置信度损失曲线、类别损失曲线,以及精确率曲线、召回率曲线和mAP曲线。
(a)F1分数-置信度曲线 |
(b)精确率-置信度曲线 |
(c)精确率-召回率曲线 |
(d)召回率-置信度曲线 |
| 图4.1 改进型YoloV8的性能曲线 | |
图4.2 改进型YoloV8的收敛曲线
图4.3 原版YoloV8的收敛曲线 |
|
通过观察,我们可以发现,改进型YoloV8在精确率曲线、召回率曲线和mAP曲线上的收敛速度显然更快,训练接近完成阶段的曲线收敛状态也更加稳定和平滑,可以说,改进型YoloV8的收敛性比原版YoloV8优秀。
通过与包括原版YoloV8在内的其它模型进行对比,能够更直观地验证本次实验优化的有效性。
图4.4 Faster R-CNN、YoloV5、YoloV8及改进型YoloV8的主要性能对比 |
图4.4对比了使用本次实验数据集训练的Faster R-CNN、YoloV5、YoloV8及本次实验改进的YoloV8的mAP@50、准确率、召回率与F1分数。可以看出,改进后的YoloV8在四个指标上都显著高于另外三个模型。
图4.5 各模型训练轮次中F1分数的比较 |
图4.6 各模型训练轮次中准确率的比较 |
图4.7 各模型训练轮次中召回率的比较 |
图4.8 各模型训练轮次中mAP@50的比较 |
对算法的优化还能够从训练的不同轮次中各指标的变化体现,图4.5-图4.8展示了四个算法在训练过程中mAP@50、准确率、召回率与F1分数随轮次的变化。
如图4.5所示,这是各模型在训练过程中F1分数的变化,其中Faster R-CNN作为早期两阶段检测器,收敛速度和最终得分都远远低于三个Yolo模型,而Yolo模型中,改进型YoloV8在收敛速度上略高于两者,在最终得分上明显高于两者。和YoloV8相比,提升幅度相当于YoloV8对YoloV5的提升程度。
如图4.6所示,这是各模型在训练中准确率随轮次变化的曲线。可以看到,在轮次小于50轮的阶段,改进型YoloV8的准确率提升速度稍慢,但更优异的收敛性已经有所体现,在轮次大于100后,凭借极好的收敛性与小目标检测精度,在准确性上稳定低超过其它模型。这是因为引入DWConv后,早期轮次由于通道交互不足,导致特征学习较慢,才使得在前50轮的训练中准确率总体落后,但随着训练的进行,DWConv的轻量化设计缓解了标准Conv的过参数化与过拟合问题,因此准确率和收敛性都明显超过其它模型。
如图4.7所示,这是各模型训练轮次中召回率的变化曲线,在整个训练流程中,改进型YoloV8的收敛性都显然高于其它模型,并且最终召回率高于原版YoloV8。这说明,小目标检测头有效地增强了对小目标的检测能力,从而减少了漏检现象,这在图4.5所示的F1分数上也有所印证。
如图4.8所示,这是这是各模型训练轮次中mAP@50的变化曲线,图中可以发现,在轮次50以后,改进型YoloV8相对于原版YoloV8始终保持着一些优势,并且收敛性明显好于原版YoloV8。这是由于MHSA模块在深层网络中逐步学习到全局上下文关联,因此在处理小目标时可以通过动态权重分配来增强关键区域的特征响应,从而提升mAP值。
与其它模型进行性能的对比充分说明了本次实验中对YoloV8算法的优化方案的有效性,说明算法优化方向和思路的正确。
本次研究从无人机遥感视角的小目标检测问题切入,介绍了机器学习与深度学习的发展概况与卷积神经网络的数学理论基础,分析了YoloV8算法的架构。
在深入了解YoloV8架构的基础上,本次研究通过添加小目标检测头分支、在颈部网络的C2f模块引入全维度动态卷积ODConv、在骨干网络添加全局多头自注意力机制MHSA模块和在骨干网络的CBS模块中引入深度可分离卷积DWConv四项优化改进了YoloV8的架构,增强了模型在小目标识别场景下的检测效果,并以轻量化优化提升了模型的推理速度。
在性能分析与对比实验中,改进型YoloV8以明显的优势在各项性能指标上超越了原版YoloV8及一些经典模型,证明了本次实验的优化思路与方式的正确和有效。
未来,可以对颈部网络的整体架构进行进一步优化,例如虽然本次实验通过引入ODConv优化了颈部网络的C2f模块,但对骨干网络的C2f模块未进行改动;本次实验添加了小目标检测头分支,但对所有检测头本身的结构未作改动。这是因为适用于颈部网络的ODConv未必适合骨干网络、适合骨干网络的DWConv未必适合检测头,这些方面都是有待进一步优化的。
本次实验的优化思路也可以与一些整体架构改良的研究结合在一起,实现更轻量化的、适用于边缘设备的小目标检测模型,进一步推动轻量化的小目标检测模型的发展和计算机视觉技术的发展。
[1] 南晓虎, 丁雷. 深度学习的典型目标检测算法综述[J]. 计算机应用研究, 2020, 37(S2): 15-21.
[2] VIOLA P, JONES M. Rapid object detection using a boosted cascade of simple features[C]//Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. IEEE, 2001.
[3] Dalal N, Triggs B. Histograms of oriented gradients for human detection[C]//2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR'05). IEEE, 2005.
[4] 韩强. 面向小目标检测的改进YOLOv8算法研究[D]. 吉林大学, 2023.
[5] Felzenszwalb P., McAllester D., Ramanan D. A discriminatively trained, multiscale, deformable part model[C]//2008 IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2008.
[6] Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2014: 580-587.
[7] Girshick R. Fast R-CNN[C]//Proceedings of the IEEE International Conference on Computer Vision. IEEE, 2015: 1440-1448.
[8] Ren S, He K, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks[C]//Advances in Neural Information Processing Systems. MIT Press, 2015.
[9] Liu W, Anguelov D, Erhan D, et al. SSD: Single shot multibox detector[C]//Computer Vision--ECCV 2016: 14th European Conference, Amsterdam, The Netherlands, October 11--14, 2016, Proceedings, Part I 14. Springer International Publishing, 2016: 21-37.
[10] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2016: 779-788.
[11] Redmon J, Farhadi A. YOLO9000: Better, faster, stronger[C]// Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2017: 7263-7271.
[12] Redmon J, Farhadi A. YOLOv3: An incremental improvement[EB/OL]. arXiv:1804.02767, 2018.
[13] Bochkovskiy A, Wang C Y, Liao H Y M. YOLOv4: Optimal speed and accuracy of object detection[EB/OL]. arXiv:2004.10934, 2020.
[14] Li C, Li L, Jiang H, et al. YOLOv6: A single-stage object detection framework for industrial applications[EB/OL]. arXiv:2209.02976, 2022.
[15] Rumelhart D E, Hinton G E, Williams R J. Learning representations by back-propagating errors[J]. Nature, 1986, 323(6088): 533-536.
[16] LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.
[17] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in Neural Information Processing Systems, 2012, 25.
[18] Hahnloser R H R, Sarpeshkar R, Mahowald M A, et al. Digital selection and analogue amplification coexist in a cortex-inspired silicon circuit[J]. Nature, 2000, 405(6789): 947-951.
[19] Maas A L, Hannun A Y, Ng A Y. Rectifier nonlinearities improve neural network acoustic models[C]//Proceedings of the 30th International Conference on Machine Learning. Atlanta, USA: JMLR, 2013: 3.
[20] Maas A L, Hannun A Y, Ng A Y. Rectifier nonlinearities improve neural network acoustic models[C]// Proceedings of the 30th International Conference on Machine Learning. 2013, 30(1): 3.
[21] Bridle J S. Probabilistic interpretation of feedforward classification network outputs, with relationships to statistical pattern recognition[M]// In: Neurocomputing: Algorithms, architectures and applications. Berlin, Heidelberg: Springer, 1990: 227-236.
[22] Tzutalin. LabelImg[EB/OL]. https://github.com/tzutalin/labelImg, 2015.
[23] Li C, Zhou A, Yao A. Omni-dimensional dynamic convolution[EB/OL]. arXiv:2209.07947, 2022.
[24] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in Neural Information Processing Systems, 2017, 30.
[25] Howard A G, Zhu M, Chen B, et al. MobileNets: Efficient convolutional neural networks for mobile vision applications[EB/OL]. arXiv:1704.04861, 2017.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。