基本思想: 采用预定义候选区,粗略覆盖图片整个区域,找到粗略候选区,再使用RCNN的边框回归调整到更接近真实的bounding box(one-stage)
基本结构:【卷积+池化】+【dense+dense】,最后一层输出激活函数使用线性函数(预测bounding box需要数值型)
YOLO与RCNN:
RCNN需要两步:分类、物体位置(回归)【RCNN将遍历图像生成2000个候选框,对候选框进行分类,分类后再处理边界框对其进行优化】
YOLO一步:物体位置
核心思想: 将整张图作为网络输入,对输出层输出的结果回归bounding box的位置和所属类别。
优点: YOLO在训练和测试期间看到整个图像,隐式地编码关于类及其外观的上下文信息,与Fast R-CNN相比,YOLO产生的背景错误数量不到一半。
缺点: 很难精确地定位小目标。
1、将输入图像分割为S*S的网格,若一个对象的中心落入一个网格单元格中,这个网格负责检测该对象。每个单元格预测B边界框及其置信度分数(计算方法IOU)
将网格预测数据保存为S x S x (B * 5+C)的张量,每个网格预测B个bounding box,每个bounding box 回归自身位置并预测一个置信度C,每个置信度C代表了所预测的box中含有object的置信度和这个box预测的有多准
如果有object落在一个grid cell里,则第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。
即每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (B*5+C)的一个tensor。
2、网络结构:
每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score,得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即编码了预测的box属于某一类的概率,也有该box准确度的信息。
3、训练参数
网络输入448 x 448(输出层为全连接层,在检测时的输入必须与训练图像分辨率相同)
网络输出7x7x30,最终输出 tensor 的前五个数值,分别是 bbox 的 x,y,w,h,c,即 bbox 的中心坐标 x,y,bbox 的宽高 w,h,bbox 的置信度。
7x7x30:7x7x5+7x7x5+7x7x20
论文指出:最后一层预测了类的概率和边界框坐标。需要根据图像的宽度和高度将边界框的宽度和高度进行归一化,使它们落在0到1之间。参数化边界框x和y坐标为特定网格单元位置的偏移,因此也被限定在0和1之间
损失函数: 作者提出的损失优化只有当网格单元中存在一个对象时,损失函数才会惩罚分类错误;只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。
注意:一个网格预测多个box,希望每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。
因为对yolov1的理解关系到后面理解整个yolo系列的思路,所以花了大力气反复读了论文,看了很多资料,把我觉得重要的思路点都记了下来。
核心思想: 提出了YOLOv2和YOLO9000.YOLOv2在YOLOv1的基础上,从Better,Faster,Stronger三个方面来提升。
目的:提高召回率和本地化,同时保持分类准确性(Thus we focus mainly on improving recall and localization while maintaining classification accuracy)
解决办法:
操作 | 具体方法 | 效果 |
---|---|---|
批量标准化 | 在所有卷积层上添加批量标准化,有助于规范化模型并且可以在不过度拟合的情况下从模型中删除掉的数据,有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果(YOLOv2不再使用dropout) | mAP提高2%以上,获得更好的收敛速度和收敛效果 |
高分辨率分类器 | YOLOv2在采用 224x224 图像进行分类模型预训练后,再采用 448x448 高分辨率样本对分类模型进行10个epoch的微调,使网络特征逐渐适应 448x448 的分辨率。然后再使用 448x448 的检测样本进行训练,缓解了分辨率突然切换造成的影响 | mAP增加了近4% |
Anchor Boxes | YOLOv1最开始的boungdingbox预测全随机,V2引入Anchor Boxes,在每个grid预设一组不同大小、宽高的边框 | mAP:69.5,召回率:81%变为mAP:69.2,召回率:88%.大大提高了召回率 |
Dimension Clusters | 对训练集边界框使用K-Means聚类分析,自动找到好的prid | 可以更好地表示模型,并使任务更容易学习 |
直接定位预测 | AnchorBox的方法会使模型不稳定,RPN在随机初始化的情况下,需要很长时间才能稳定到预测合理偏移量 。所以YOLOv2沿用YOLOv1,预测相对于网格单元位置的位置坐标。 | 与使用anchorbox的版本相比,使用尺寸聚类以及直接预测边界框中心位置可以将YOLO提高近5% |
Fine-Grained Features | YOLOv2中输入416416经过卷积网络下采样最后输出是1313,较小的对象可能特征已经不明显甚至被忽略掉。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。YOLOv2引入一种称为passthrough层的方法在特征图中保留一些细节信息 | 性能略微提高1% |
多尺度训练 | YOLOv1输入尺寸必须是448x448,YOLOv2希望可以运行于不同尺寸。且YOLOv2只有卷积和池化层,因此可以随意改变尺寸。所以YOLOv2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352……608},最小320x320,最大608x608,网络会自动改变尺寸,并继续训练的过程。 | 网络学会在各种输入维度上进行良好预测。即同一个网络可以预测不同分辨率下的检测结果。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高 |
目的:希望检测准确,但也希望检测速度快。(VGG-16作为基本特征提取器强大、准确的但冗杂,YOLOv1使用基于googlenet架构的网络比VGG-16更快但精确度比VGG16稍差)
解决办法:
Darknet-19:
Training for classification:
train the network on the standard ImageNet 1000 class classification dataset for 160 epochs using stochastic gradient descent with a starting learning rate of 0.1,polynomial rate decay with a power of 4, weight decay of 0.0005 and momentum of 0.9 using the Darknet neural network framework
达到76.5%top-1精确度,93.3%top-5精确度
Training for detection:
移除最后一个卷积层,改为三个3×3卷积层上(每层添加1024个filters),每层后面是一个跟一个1×1卷积层。
在VOC上,每个grid预测5个boundingbox,20个类别 5*(5+20)=125
从最后一个3×3×512层到第二个到最后一个卷积层添加了一个passthrough layer
**目的:**提出了一种联合训练分类和检测数据的机制,使用标记用于检测的图像来学习特定于检测的信息,如边界框坐标预测和对象性,以及如何对常见对象进行分类。使用只有类标签的图像来扩展它可以检测的类别数量。
检测数据集是通用类别和标签(猫、狗),分类数据集是细分标签(xx狗、xx狗),联合训练时其标签不总是互斥的,需要合并标签。作者提出使用一个多标签模型来组合不假设互斥的数据集。这种方法忽略了我们所知道的关于数据的所有结构(如:所有COCO类都是互斥的)
解决办法:
Hierarchical classification:WordTree
根据语言库下位词关系构建标签语法集。
例如:ImageNet标签是从WordNet中提取出来的,WordNet是一个语言数据库,用于构建概念及其关系。在WordNet中,“诺福克梗”和“约克郡梗”都是“梗”的下位词,后者是“猎狗”的一种,后者是“狗”的一种,后者是“犬科”的一种,等等。大多数分类方法都假定标签的结构是扁平的。对于组合数据集,我们需要的是这种结构
WordNet的结构是有向图,而不是树(例如,“dog”既是“犬科”的一种,也是“家畜”的一种,它们都是WordNet中的语法集)我们没有使用完整的图结构,而是通过从ImageNet中的概念构建层次树来简化问题。因此将WordNet转换成Tree,用路径长短来判定到根节点的距离。许多语法集在图中只有一条路径,首先将所有这些路径添加到树中。然后,我们反复检查我们留下的概念,并添加尽可能少地增长树的路径(如果一个概念有两条通向根的路径,一条路径会给我们的树增加三条边,另一条只会增加一条边,我们选择较短的路径。)
最终的结果是WordTree,一个视觉概念的层次模型。为了使用WordTree进行分类,我们预测每个节点的条件概率,即给定该语法集的该语法集的每个下位词的概率如果我们想计算一个特定节点的绝对概率,我们只需沿着树到根节点的路径,乘以条件概率即,如果图像被标记为“诺福克梗”,它也会被标记为“狗”和“哺乳动物”对于新的或未知的对象类别,性能会下降。例如,如果网络看到一只狗的图片,但不确定它是什么类型的狗,它仍然会以高置信度预测“dog”,但在下义词中分布的置信度较低。
Dataset combination with WordTree:
我们可以使用WordTree以合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的语法集。
Joint classification and detection:(YOLO9000)
既然我们可以使用WordTree组合数据集,我们就可以在分类和检测方面训练我们的联合模型。我们想训练一个超大规模的探测器,所以我们使用COCO探测数据集和完整ImageNet版本中的前9000个类创建了我们的组合数据集。
利用这个数据集,我们训练了YOLO9000。使用基本的YOLOv2架构,但只有3个优先级,而不是5个优先级来限制输出大小。当我们的网络看到检测图像时,我们会像正常情况一样反向传播损失。
对于分类损失:我们只在标签的相应级别或以上反向传播损失。
例如,如果标签是“狗”,我们会将任何错误分配给树下面的预测,”,因为我们没有,“German Shepherd” 或者“Golden Retriever"这些信息。
YOLOv2在各种检测数据集上都比其他检测系统更快,可以在各种图像大小下运行,以在速度和精度之间进行平滑的权衡。
YOLO9000是一个实时框架,通过联合优化检测和分类来检测9000多个对象类别。使用WordTree将来自不同来源的数据和联合优化技术结合起来,在ImageNet和COCO上同时进行训练。
yolov3的思想非常精彩!
操作 | 方法 | 效果 |
---|---|---|
特征提取 | 骨干网络将Darknet-19改为Darknet-53(用了残差连接),用步长为2的卷积层进行下采样替代池化 | |
多尺度预测 | 选择了三种不同shape的Anchors,同时使用FPN做三个尺度的预测(每个尺度预测3个Anchor | 解决了小目标无法检测的问题 |
类别预测 | 用于分类的softmax层修改为逻辑分类器,将每一个类别都做二分类 | 多标签分类 |
损失函数 | 置信度损失和类别置信度损失计算由平方和误差改为交叉熵 |
V3中每个grid只选择与ground truth的iou最大的Anchor来预测位置,且该Anchor对应的gridcell负责预测该物体(正样本)。对超过阈值iou但非最大的anchor只参与置信度预测(负样本)。
整个v3没有池化层和全连接层,前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的,比如stride=(2, 2),这就等于将图像边长缩小了一半(即面积缩小到原来的1/4)
论文开始讨论了常用模型,然后分别从 Bag of freebies, Bag of specials来讨论了小技巧的改进
这一部分目的是使目标检测器在不增加推理成本的情况下获得更好的精度
有三个方向:
1、数据增强
2、在处理语义分布偏差的问题时,一个非常重要的问题是不同类别之间存在数据不平衡的问题
3、bbox回归的目标函数
GIoU损失除了包括覆盖区域外,还包括对象的形状和方向。他们提出寻找能够同时覆盖预测BBox和真实BBox的最小面积BBox,并以此作为分母来代替最初在IOU损失中使用的分母。对于DIoU损失,它另外考虑了对象中心的距离,而Ciou损失则同时考虑了重叠面积、中心点之间的距离和纵横比。在BBox回归问题上,Ciou可以达到较好的收敛速度和精度。
对于那些只增加少量推理代价,却能显著提高目标检测准确率的插件模块和后处理方法
1、强感受野的常见模块有SPP、ASPP和RFB
2、feature integration
3、激活函数
4、后处理
关于v4模型选择:CSPDarknet53为骨干网络、SPP附加模块、Panet路径聚合Neck网络和YOLOv3(基于锚点的)的Head
4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。这种方法丰富了数据集,随机缩放增加了小目标
在yolov3使用的Darknet53基础上,融合CSPNet,每个CSP模块前面的卷积核的大小都是3×3,步长为2(下采样),CSP模块先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率
V4的骨干网络使用Mish,其它部分继续沿用leaky Relu
Neck:SPP、FPN+PAN
SPP: 使用k={1×1,5×5,9×9,13×13}的最大池化,再将不同尺度的特征图Concat
采用SPP模块的方式,比单纯的使用k×k最大池化的方式,更有效的增加主干特征的接收范围,显著
的分离了最重要的上下文特征
FPN+PAN: 在FPN的基础上加了一个由低层到高层的路径
FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,从不同的主干层对
不同的检测层进行特征聚合
Cross mini-Batch Normalization (CmBN)
Diou nms: NMS可以用来过滤那些对同一目标预测不佳的BBox,只保留响应较高的候选BBox。NMS提出的原始方法没有考虑上下文信息。对于软间隔NMS,它考虑了对象的遮挡可能会导致带有IOU分数的greedy NMS的置信度分数下降的问题。DIoU NMS在软间隔NMS的基础上,将中心点距离信息添加到BBox筛选过程中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuwnUfXY-1655302014455)(C:\Users\Erutalon\Desktop\8888.png)]
NMS :直接筛掉得分低的框,不考虑重合度
Soft-NMS :考虑得分和重合度,作用于大量密集的同类重叠场景
简要来说就是在分割检测时可以去除重复的框,如:第一幅未进行NMS,第二幅使用NMS。即筛选出一定区域内属于同一种类得分最大的框。
实现方法:
非极大抑制的执行过程如下所示:
1、对所有图片进行循环。
2、找出该图片中得分大于门限函数的框。在进行重合框筛选前就进行得分的筛选可以大幅度减少框的数量。
3、判断第2步中获得的框的种类与得分。取出预测结果中框的位置与之进行堆叠。此时最后一维度里面的内容由5+num_classes变成了4+1+2,四个参数代表框的位置,一个参数代表预测框是否包含物体,两个参数分别代表种类的置信度与种类。
4、对种类进行循环,非极大抑制的作用是筛选出一定区域内属于同一种类得分最大的框,对种类进行循环可以帮助我们对每一个类分别进行非极大抑制。
5、根据得分对该种类进行从大到小排序。
6、每次取出得分最大的框,计算其与其它所有预测框的重合程度,重合程度过大的则剔除。
Soft-NMS认为在进行非极大抑制的时候要同时考虑得分和重合程度
实现方法:
在NMS的基础上,Soft-NMS则以一个权重的形式,将获得的IOU取高斯指数后乘上原得分,之后重新排序。继续循环
最后:文章只是自己学习笔记的整理备份,如果图片侵权可以私信我删掉。