续《动手学YOLO》------目标检测基础,《动手学YOLO》的读书笔记。
目标检测网络架构浅析
基于深度学习的目标检测网络通常由三个主要部分组成:主干网络(Backbone)、颈部网络(Neck)和检测头(Head)。
主干网络
核心部分,主要职责是从输入图像中提取多层次的特征信息:图像的基本纹理、颜色等低级信息,目标的形状、边缘等高级语义信息。
常见主干网络如下:
- VGGNet:简称VGG,以其简洁的网络结构和良好的特征提取能力被广泛应用。由多个卷积层和池化层组成,具有较深的网络层次,能够提取图像的丰富特征,但也存在参数较多、计算量较大等问题
- ResNet:引入残差连接和残差学习机制,解决随网络深度增加而出现的梯度消失和退化问题,使网络能够更深层次地提取特征,在训练过程中更容易收敛,大大提高性能
- DenseNet:
- Inception:其采用多分支的卷积结构,能够同时捕捉不同尺度的特征信息,在增加网络宽度的同时,提高特征的多样性和表达能力,但网络结构较为复杂,计算成本较高
- MobileNet、EfficientNet:针对移动设备和边缘计算场景设计的轻量级网络,在保证性能的同时显著降低模型复杂度和计算量
- Swin Transformer、Vision Transformer(ViT):作为近年来崛起的基于Transformer的结构,通过自注意力机制捕捉全局信息,展现出在目标检测任务中的强大潜力
- CSPDarknet53:一种专为实时目标检测设计的神经网络架构,结合跨阶段部分连接(Cross Stage Partial Connections,CSP)和Darknet-53网络的优势;最初作为YOLOv4的主干网络提出,后来也被应用于YOLOv5等其他先进的目标检测框架中。
颈部网络
位于主干网络与检测头之间,承上启下。通过对主干网络提取的特征进行进一步的处理和融合,提高特征的表示能力和鲁棒性。颈部网络的设计对于提升多尺度目标检测、小目标检测等任务的性能非常重要。
常见代表:
- 特征金字塔网络(Feature Pyramid Networks,FPN):通过自顶向下的路径和横向连接,将不同层级的特征图进行融合,增强特征图的语义信息和空间分辨率。构建特征金字塔,在不同尺度上提取和融合特征信息,将低层次的语义信息与高层次的细节信息相结合,使网络能够同时检测不同大小的目标,尤其对小目标的检测效果提升显著
- 路径聚合网络(Path Aggregation Network,PANet):基于FPN改进的网络结构,通过引入自底向上的路径增强和自适应特征池化等技术,提高模型的性能和准确率。解决传统目标检测模型中低层特征到高层特征传递路径过长、定位信息不准确等问题,提升目标检测模型对小目标和遮挡目标的检测性能
- 双向FPN(Bidirectional Feature Pyramid Network,BiFPN):来自Google EfficientDet,在传统FPN的基础上优化而来,通过引入双向特征融合机制,增强不同层次特征之间的信息交流。其网络结构包括自顶向下和自底向上两条路径,允许特征在不同尺度间双向流动和融合。通过引入双向特征融合机制、加权融合机制以及结构优化等创新点,提高目标检测任务的准确性和效率。
FPN

如上图,FPN由何恺明等人在2017年提出,是一种通过自底向上、自顶向下和横向连接来构建一个跨多个尺度的特征金字塔;使每个尺度的特征图既包含丰富的语义信息,又保持良好的空间分辨率。
路径融合多尺度特征的网络结构:
- 自底向上路径:标准的前向传播过程,其中图像经过一系列卷积层和池化操作,逐步生成具有不同尺度的特征图。随着层数的加深,特征图的空间分辨率逐渐降低,而通道数则相应增加
- 自顶向下路径:与自底向上路径相反,自顶向下路径通过上采样操作将高层特征图恢复到较高的分辨率,通常采用最近邻插值或双线性插值等方法实现。将上采样的特征图与自底向上路径中对应尺度的特征图进行融合,以增强特征表示
- 横向连接:为融合来自自底向上和自顶向下路径的特征,引入横向连接。自底向上路径中特定层的特征图会先经过1×1卷积核调整通道数,然后与自顶向下路径中对应尺度的特征图进行逐元素相加。这种做法允许低层特征图的位置细节信息和高层特征图的语义信息相结合。
特点及优势:
- 多尺度特征融合:通过融合不同尺度的特征图,使模型能够同时处理不同大小的目标
- 计算效率高:在基本不增加计算量的情况下,显著提升模型的检测性能
- 灵活性强:可轻松与其他网络结构结合使用,提高整体性能
检测头
负责根据颈部网络提供的特征图完成目标的分类和定位任务,即预测目标的类别和位置信息。它通常包括多个卷积层、池化层以及用于分类和回归的全连接层(或卷积层)。
常用检测头:
- R-CNN系列:包括R-CNN、Fast R-CNN、Faster R-CNN和Mask R-CNN等,通常先生成候选区域,再通过卷积神经网络对候选框进行分类、回归等操作
- YOLO系列:包括YOLOv1、YOLOv2、YOLOv3和YOLOv4等,一种端到端的目标检测算法。通常使用单个神经网络直接对整张图像进行分类、回归等操作,速度较快,但精度相对较低
- SSD:一种基于单次前向传播的目标检测算法,可直接对整张图像进行目标检测。SSD检测头使用多尺度特征图进行检测,并通过不同大小的锚框来检测不同尺寸的目标
- RetinaNet:一种基于焦点损失(Focal Loss)的目标检测算法,可有效解决类别不平衡问题。RetinaNet检测头使用多层特征金字塔来检测不同尺度的目标,并通过焦点损失来调整正负样本的权重,提高难以识别目标的检测精度
- Anchor-free:如CenterNet、FCOS等,不依赖预设的锚框,直接预测目标的中心点或关键点,简化检测流程并提高对小目标的检测能力
- 基于关键点的方法:除中心点检测外,还有一些基于关键点的方法(如CornerNet、CenterNet的扩展版本)通过检测目标的角点或关键点来预测边界框,在处理遮挡和密集目标时具有优势
- DETR(Detection Transformer):基于Transformers的检测头,不依赖区域建议,通过自注意力机制实现目标的直接检测,展现出良好的扩展性。
还可能包含其他组件,如Bottleneck(瓶颈)、GAP(Global Average Pooling,全局平均池化)、Embedding(嵌入)、Skip-connections(跳跃连接)等,以及正则化和BN(Batch Normalization,批归一化)方式、损失函数和激活函数等。这些组成部分共同工作,使目标检测网络能够有效地识别和定位图像中的物体。不同的网络架构和组件选择会影响检测的性能、速度和准确性。
YOLOv1
通过将整个图像作为输入,仅使用一个神经网络就能同时预测出多个边界框的位置及其对应的类别概率;使得YOLOv1在速度上具有显著优势,能够实现实时的目标检测。
优势:
- 速度快,同时可保持较高的准确率。其标准版模型在Titan X GPU上可达到实时的45帧/s。快速版本FastYOLO,速度高达150帧/s,其检测精度大约是其他实时检测系统的2倍
- 使用全图上下文信息,使得它相比于Fast R-CNN有更少的背景错误(即在没有目标的背景区域中错误地检测出目标)
- 泛化能力和通用性更好,面对新领域和意外输入时,表现比R-CNN等更为稳定
设计理念是将目标检测任务转化为单一回归问题,采用统一CNN架构,通过单次前向传播即可同时预测图像中物体的边界框及其类别概率,大幅提升检测速度与效率。

基本流程
- 将输入图像的尺寸调整为448×448像素(YOLOv1只能接收固定尺寸的图像)
- 通过单个卷积神经网络进行特征提取和预测
- 通过设定阈值筛选检测框
输入图像被划分为S×S(如7×7)的网格,每个网格负责检测中心落在该网格中的物体,并会预测固定数量的边界框和对应的置信度分数,以及这些边界框中物体的类别概率。置信度反映模型对于这个网格的预测,即该网格是否含有物体,以及这个边界框的坐标预测的正确性(即预测边界框与真实边界框之间的交并比)。类别概率则表示该网格负责预测的边界框中的目标属于各个类别的概率。
省略部分细节。
YOLOv1网络架构借鉴GoogleNet,包含24个卷积层和2个全连接层。卷积层用于对输入图像进行特征提取,不断提取图像的抽象特征。全连接层则用于将卷积得到的分布式特征映射到样本标记空间,并整合所有卷积特征。最终输出一个7×7×30的张量,7×7表示将输入图像划分为7×7个网格,30表示每个网格包含30个信息

当对图像边界进行卷积时,卷积核的一部分位于图像外面,无像素与之相乘,此时有两种策略:
- 舍弃图像边缘:这样会使新图像尺寸较小
- 采用边缘填充:为捕获边缘信息而产生的手段,人为指定位于图像外面的像素值,使卷积核能与之相乘。主要有两种方式:
- 0填充:常用,填充大小为 P = ( F − 1 ) / 2 P=(F-1)/2 P=(F−1)/2,其中 F F F为卷积核尺寸。
- 复制边缘像素:
移动步长是指卷积核每次扫描时所移动的像素点数,通常包括水平和垂直两个方向,常用取值有1×1和2×2。
池化:将平面内某一位置及其相邻位置的特征值进行统计汇总,并将汇总后的结果作为这一位置在该平面内的值:
- 最大池化:计算该位置及其相邻矩形区域内的最大值,并将最大值作为该位置的值;
- 平均池化:计算该位置及其相邻矩形区域内的平均值,并将平均值作为该位置的值。
池化常采用2×2步长,以达到下采样目的,同时取得局部抗干扰的效果。
损失函数
多任务损失函数,旨在同时优化目标检测中的定位和分类任务;设计充分考虑边界框的回归和类别预测两个方面,确保模型在预测物体位置、大小和类别时能够实现最佳平衡。
YOLOv1的损失函数由三大部分构成:位置损失、置信度损失以及分类损失;每个部分都使用均方误差(Mean Squared Error,MSE)来计算,为平衡不同任务的重要性,对某些部分施加不同的权重:
1.位置损失。由两部分误差引起:中心点的位置误差和宽高的尺寸误差。对于每个网格单元中负责预测的边界框,如果该边界框需要负责某个真实物体的预测,那么它会参与位置误差的计算
-中心点位置误差:采用简单的平方差计算预测的中心点坐标 ( x , y ) (x,y) (x,y)与真实值之间的差异
- 宽高尺寸误差:对宽度 w w w和高度 h h h取平方根后再计算平方差。目的是减缓倾向于调整较大尺寸预测边界框的影响,较大的尺寸变化可能会导致相对较小的误差,而这种处理方式可更加公平地对待不同大小的物体。
这些位置误差被乘以一个超参数 λ c o o r d λ_{coord} λcoord,用于增加这部分损失在整体损失中的权重,从而让模型更加重视位置准确性。
2.置信度损失。置信度反映预测边界框中包含目标的可能性以及预测边界框的准确性,也分为两部分来计算损失:
- 包含目标的边界框置信度损失:对于负责预测目标的边界框,其置信度应该尽可能接近真实的置信度,即与真实边界框的交并比。同样采用MSE来计算
- 不包含目标的边界框置信度损失:对于那些不包含目标的边界框,它们的置信度应该尽可能接近0。
3.分类损失。衡量每个网格单元中预测的物体类别概率分布与真实类别标签之间的差距。由于每个网格可能包含多个物体类别,这部分通常使用交叉熵损失来计算,但在原始YOLOv1中,分类损失是通过MSE来实现的。
缺点分析
YOLOv1是YOLO系列算法的开山之作,其创新性地将目标检测问题转化为回归问题,实现端到端的训练,显著提高检测速度。但也存在不足之处:
- 定位精度有限:将目标检测问题转化为回归问题,这可能导致目标定位精度受限,特别是在处理小目标或目标之间重叠较多的情况下
- 对小目标的检测效果不佳:由于网格划分和边界框预测机制,在检测小目标时可能存在困难,小目标在图像中所占的像素较少,容易被忽略或误判。每个网格只预测固定数量的边界框(通常是2个),并且每个网格负责检测一个物体,这限制模型对小目标或密集排列目标进行准确检测的能力
- 召回率不高:每个网格只能预测一个类别,当多个不同类别的物体中心位于同一个网格内时,无法同时识别这些物体
- 正负样本失衡:训练过程中,背景区域远多于实际包含目标的区域,可能导致模型更倾向于学习背景特征,而忽略少数类别的目标
- 未使用批量归一化(Batch Normalization,BN):可能会影响网络的收敛速度和稳定性
- 对长宽比异常的对象处理不佳:如果训练数据集中缺少某些特定长宽比的对象,模型在遇到这些对象时的表现可能会较差
后续YOLO版本针对这些不足进行多方面的改进和优化,如引入锚点机制、优化网络结构、高分辨率分类器、多尺度训练策略、直接位置预测、批归一化等技术,使得YOLO系列算法在目标检测领域取得显著进展和突破。
YOLOv2
在继承YOLOv1实时检测优势的同时,针对其定位不准确和召回率较低的问题进行多项改进。
主要改进点:
- BN:在网络的每一个卷积层后面都添加BN层,不再使用Dropout。BN能够加速模型收敛速度,起到正则化效果,减少过拟合。使得mAP提升约2%
- 高分辨率分类器(High Resolution Classifier):YOLOv1使用224×224像素的输入尺寸进行训练,而YOLOv2将输入尺寸提升至448x448像素,通过在ImageNet上对网络进行10个epoch的微调,使网络适应更高的分辨率。使得mAP提升约4%
- 带锚框的卷积(Convolutional With Anchor Boxes):YOLOv1直接利用全连接层预测边界框,导致丢失较多空间信息。YOLOv2去除全连接层,引入锚框机制来预测边界框,同时为获得更高分辨率的特征图,还移除一层池化层。提高召回率,但精度略有下降
- 维度聚类(Dimension Cluster):为更合理地选择锚框的尺寸,采用k-means聚类算法对训练集中的真实边界框进行聚类分析,自动找到更合适的锚框尺寸。这样可提高预测位置的准确性
- 直接位置预测(Direct Location Prediction):放弃RPN中无约束的位置预测方式,转而采用类似YOLOv1的方法,即预测边界框中心点相对于对应单元左上角位置的相对偏移值,并使用sigmoid函数处理偏移值,以确保边界框中心位于当前单元内。有助于模型的稳定训练。
- 细粒度特征(Fine-Grained Feature):为改善小目标的检测能力,引入直通层,从较浅的特征图中提取细粒度信息,并将其与深层特征图结合,帮助模型更好地捕捉不同尺度的目标
- 多尺度训练(Multi-Scale Training):支持动态调整输入图像大小,允许模型在不同尺度下运行,实现速度与准确度之间的权衡。这不仅增强模型的泛化能力,还提高对不同大小目标的检测性能
- 新的主干网络(Darknet-19):采用全新Darknet-19作为基础网络架构,包含19个卷积层和5个最大池化层,比VGG-16等传统网络计算量小得多,保持较高精度,进一步提升模型速度
BN
在每个卷积层之后被应用,以提高模型的训练效率和性能。主要作用是加速网络的收敛速度,减少内部协变量位移(Internal Covariate Shift),降低对超参数如学习率等的敏感性,并起到一定的正则化效果,从而使模型更加稳定并获得更好的泛化能力。
在YOLOv2中,通常放置在激活函数之前,即在卷积层的输出之后进行归一化操作。有助于确保数据在送入激活函数之前具有稳定的分布,有利于激活函数的学习。
增加BN层的前后对比图

主要包括几个步骤:
- 计算小批量的均值和方差:对于包含 m m m个数据的小批量B,首先计算该小批量的均值 µ B µ_B µB和方差
- 归一化:使用计算得到的均值和方差对每个输入数据进行归一化处理,得到新的输入
- 缩放和平移:归一化后的数据可能会破坏原始数据的表示能力,通过引入可学习的参数 γ γ γ和 β β β,对归一化后的数据进行缩放和平移,以恢复数据的表示能力
被广泛应用于每个卷积层之后,以替代原来的Dropout层,带来好处:
- 提高模型收敛速度:由于BN能够稳定数据分布,使得神经网络的训练更加容易,因此模型的收敛速度得到显著提高
- 提升模型稳定性:BN能够减少模型在训练过程中的波动,使得模型的训练更加稳定
- 提高检测准确性:通过BN,模型能够更好地学习特征,提高检测准确性,mAP提升2%
高分辨率分类器
在YOLOv1中,模型首先在224×224像素分辨率的图像上进行预训练,然后在检测阶段将分辨率提高到448×448像素。这种分辨率的变化对模型的检测效果产生一定的影响,因为模型需要适应新的输入分辨率。为解决这个问题,YOLOv2引入高分辨率分类器。
YOLOv2中的高分辨率分类器是指在训练过程中,通过使用更高分辨率的图像来微调模型,以提高其对于大尺寸输入的适应能力。实现方法:
- 预训练阶段:在ImageNet数据集上使用224×224像素分辨率的图像对模型进行预训练,以获得较好的分类效果。然后,将ImageNet数据集中的图像尺寸调整到448×448像素,并使用这个高分辨率数据集对预训练模型进行微调。这个微调过程让模型有时间调整其滤波器,以便在更高的分辨率输入下更好地工作
- 检测任务阶段:在完成高分辨率分类器的预训练后,将模型应用于检测任务。此时,模型已经适应高分辨率的输入,因此可更有效地提取图像中的特征,并提高检测精度。
使用高分辨率分类器后,YOLOv2的mAP提升约4%。这是因为高分辨率分类器让模型在更高的分辨率下进行预训练,从而提高模型对图像细节的敏感度。高分辨率分类器还有助于模型更好地适应检测任务中的高分辨率输入,进一步提高检测精度。
带锚框的卷积
在YOLOv2中,锚框的使用是为解决之前YOLO版本在目标检测中遇到的召回率和定位精度问题。锚框的概念最早出现在Faster R-CNN中,它允许模型预测多个候选框,每个候选框都与真实边界框有一定的偏移量。YOLOv2借鉴这一思想,并在其卷积层中使用锚框来预测边界框。
为引入锚框来预测边界框,YOLOv2采用以下几种技术手段:
- 在网络中果断去掉全连接层,因为全连接层丢失空间信息和位置信息
- 去掉卷积网络部分的最后一个池化层,这是为确保输出的卷积特征图具有更高的分辨率
- 缩减网络输入,将图片输入分辨率从448×448像素调整为416×416像素。这样可使后续生成的卷积特征图的宽度和高度均为奇数,从而产生一个中心单元
操作步骤:
- 图像划分:输入图像被划分为S×S的网格,每个网格单元负责预测其区域内中心点落在该单元内的对象
- 锚框生成:在YOLOv2中,锚框是在特征图上生成的。特征图是通过卷积神经网络对输入图像进行下采样处理得到的。对于特征图上的每个网格单元,都会生成一定数量的锚框。这些锚框具有不同的尺寸和宽高比,以覆盖可能存在的不同形状的物体
- 锚框数量:具体来说,YOLOv2为每个网格单元引入k个锚框(在实际实现中k通常为5),锚框尺寸和比例是通过k-means聚类训练数据集中的边界框确定的
- 预测过程:对于每个锚框,网络会预测调整值以精确调整锚框的位置和尺寸,并为每个锚框预测一个对象的置信度和多个类别概率。
通过这种方式,可对图像中存在的多个对象进行更准确的检测,并且能够更好地处理不同尺寸和比例的对象。引入锚框后,在多尺度训练方面也表现出更好的适应性和性能。

优势:
- 提高召回率:通过引入锚框,模型能够生成更多不同尺寸和形状的边界框,从而增加对目标的覆盖范围,提高召回率
- 提高精度:通过k-means聚类得到的最优锚框尺寸能够更好地适应训练集中的物体形状,从而提高模型的检测精度
- 增强泛化能力:带锚框的卷积技术使模型能够更好地处理不同尺度和形状的物体,增强模型的泛化能力
综上所述,虽然YOLOv1每张图像只能预测98个框,但使用锚框,模型可预测超过1000个框。没有锚框时,中间模型得到mAP为69.5%,召回率为81%。使用锚框后,模型得到mAP为69.2%,召回率为88%。mAP虽然降低,但召回率的增加意味着模型还有更多改进空间。
维度聚类
在Faster R-CNN中锚框的大小和比例是按经验设定的,即所谓的精选先验框,然后网络会在训练过程中调整锚框的尺寸。但是,如果一开始就能选择到合适尺寸的锚框,那肯定可帮助网络更好地预测目标。YOLOv2采用k-means聚类的方式对训练集的边界框做聚类,试图找到合适的锚框。
和以前的精选先验框不同,我们不是手工选择先验框,而是使用k-means聚类方法来训练边界框,可自动找到更好的先验框。传统的k-means聚类方法使用的是欧氏距离函数,这意味着较大的框会比较小的框产生更多的误差,聚类结果可能会偏离。为此,在YOLOv2中,度量距离的评判标准采用交并比得分,这样误差就和框的大小无关。最终的距离函数为: d ( b o x , c e n t r o i d ) = 1 − I o U ( b o x , c e n t r o i d ) d(box,centroid)=1-IoU(box,centroid) d(box,centroid)=1−IoU(box,centroid)式中,box表示一个边界框,centroid表示聚类中心(即一个锚框),IoU是边界框和聚类中心之间的交并比。到聚类中心的距离越小越好,但IoU值是越大越好,所以公式使用1-IoU,保证距离越小,IoU值越大。确保当边界框与聚类中心高度重合时,它们之间的距离最小。
k-means聚类过程:
- 初始化:随机选择 k k k个边界框作为初始聚类中心
- 分配:对于每个边界框,计算其与所有聚类中心之间的距离 d d d,并将边界框分配给距离最小的聚类中心
- 更新:对于每个聚类,重新计算其聚类中心。聚类中心的宽度和高度分别为该聚类中所有边界框宽度和高度的平均值
- 迭代:重复步骤3。
通过这种方法,YOLOv2能够自动生成一组更适合特定数据集的锚框,从而改善目标检测的准确性。这种基于k-means聚类的方法相比于手动设计锚框更加灵活,能够适应不同场景下的目标检测任务。
直接位置预测
Direct Location Prediction)技术主要是为解决目标位置预测的稳定性和准确性问题。在早期的目标检测方法或YOLOv1中,位置预测的方式可能会导致模型在训练过程中出现不稳定的情况,比如预测边界框的中心位置可能会偏离目标实际位置过多等情况。直接位置预测技术能够让模型更稳定、更准确地预测目标的位置。
具体来说,YOLOv2首先通过卷积层提取图像特征,并生成一系列锚框作为候选边界框。然后,网络对每个锚框的偏移量进行预测,包括中心点的偏移(tx,ty)和宽高的缩放比例(tw,th)。这些偏移量是基于当前网格单元相对于锚框的位置和大小来计算的。
多尺度训练
YOLOv2的多尺度训练技术是一种在训练过程中动态调整输入图像尺寸的方法,旨在提高模型对不同尺寸输入图像的鲁棒性,并在速度和准确性之间提供平衡。以下是YOLOv2多尺度训练技术的关键点:
- 动态调整输入尺寸:在训练过程中,每10个批次之后重新选择输入的图像大小。这种策略使模型能够学习不同尺度的特征,从而在测试时更好地适应不同大小的目标。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值,如{320, 352, ..., 608}。因此,输入尺寸最小的选项是320×320像素,最大的是608×608像素。我们调整网络的输入尺寸后继续训练
- 适应不同的分辨率:YOLOv2模型中只有卷积层和池化层,没有全连接层,因此可动态调整其大小,接收任意尺度的输入图片。这种设计使得YOLOv2能够在不同分辨率的图片上运行,并且能够预测出良好的结果
- 速度与准确性的权衡:多尺度训练允许同一个YOLOv2模型在不同尺寸下运行,实现速度和准确性之间的简单权衡。在低分辨率下,YOLOv2可作为一个廉价且相对准确的检测器运行;而在高分辨率下,YOLOv2则成为一个先进的检测器,具有较高的mAP值
- 提高模型的鲁棒性:通过多尺度训练,YOLOv2能够适应不同大小的图片输入,提高模型的鲁棒性。这种训练方法使得YOLOv2在速度和准确性之间实现一个简单的权衡,使其能够适应多种不同的场景需求。
在实际应用中,YOLOv2可在较小的尺寸下快速运行。在288×288像素的分辨率下,它以超过90帧/s的速度运行,mAP几乎与Fast R-CNN一样好,使其适合小GPU、高帧率视频或多个视频流的场景。在较高分辨率下,在VOC 2007上的mAP为78.6%,YOLOv2能够以超过实时速度运行,成为实时目标检测的一个有效选择。
细粒度特征
指图像中特征点之间的微小差异,这些差异对于区分不同目标或同一目标的不同部分至关重要。细粒度特征技术是YOLOv2的一个重要改进点,有助于提升对小尺寸目标的检测能力。YOLOv2中,网络结构较深,能够提取到不同层次的特征信息。其中,浅层特征图包含较多的细节信息,有利于检测小目标;而深层特征图则包含更多的语义信息,有利于检测大目标。
YOLOv2在特征提取网络中添加一个直通层,这个层的作用是将高分辨率的浅层特征图进行拆分,并叠加到低分辨率的深层特征图中,然后进行特征融合。浅层特征图包含较多的细节信息,将其细粒度特征融合进来有利于检测小目标;深层特征图则包含更多的语义信息,将其特征融合进来,有利于检测大目标。例如在一个交通场景中检测行人和车辆,车辆相对较大,而行人可能较小。利用浅层细粒度特征融合可更好地检测出行人的精确位置和细节,同时也不会影响对车辆这种较大目标的类别判断。
Darknet-19
YOLOv2引入新的主干网络Darknet-19,这是一个轻量级且高效的CNN,专门设计用于图像分类和目标检测任务。Darknet-19之所以得名,是因为它由19个卷积层组成,并包含5个最大池化层。该网络的设计吸收VGG16等先进模型的优点,同时进行优化以减少参数数量和计算负担。具体来说,每一个卷积层都包含一个卷积操作、BN层以及Leaky ReLU激活函数。
Darknet-19主要使用3×3和1×1的小卷积核。3×3卷积核能够有效提取图像中的局部特征,同时相比于大卷积核,它具有更少的参数数量。例如,一个7×7的卷积核的参数数量约为3×3卷积核的5倍。1×1的卷积核主要用于通道数的调整,可在不改变特征图尺寸的情况下减少或增加通道数,减少计算量。