其中包括:RCNN、Fast-RCNN、Faster-RCNN一些网路结构、原理的讲解。
参考链接:https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter09_computer-vision/9.8_rcnn
视频:https://www.bilibili.com/video/BV1af4y1m7iL?p=1
资料:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/course_ppt
这里对于原资料做了一些笔记以及截屏梳理,便于自己学习,不作商业用途。版权归上述视频和资料。
感谢原作者:https://blog.csdn.net/qq_37541097?type=blog
注:提取整张图片的特征图是比较大的改进点,还有就是POI pooling层。
训练数据的采样(正负样本)
还需要负样本,从2000个候选框中采集64个框去训练,其中包括正样本和负样本,正样本是与真实目标边界框IOU大于0.5的候选框,负样本是与真实目标边界框IOU在[0.1, 0.5)之间的候选框。
并不是取ss得到的所有候选框去训练,只是采样了一部分去训练。
256-d:意味着backbone输出的特征向量的深度channel。
训练数据的采样(正、负样本)
随机采样256个anchors框,正负样本为1:1,如果正样本少于128个anchors框,则用负样本来填充。
定义正样本为anchor和GT框的IOU大于0.7,如果不够,则找和GT框IOU最大的anchor为正样本。
定义负样本为anchor和GT框的IOU大于0.3。
Fast R-CNN 多类损失函数跟之前的Fast R-CNN一样。
参考视频:https://www.bilibili.com/video/BV1fT4y1L7Gi?spm_id_from=333.999.0.0
步距为2的时候,paddding为1,步距为1的时候,padding为0。
使用卷积核为3X3来实现,个数为以下。
注意:这里生成边界框回归参数与faster rcnn有区别,后者是生成4c * k个,也就是说每个anchor对于每个类别都会生成回归框,而这里不关注类别,只生成4k个。
视频:https://www.bilibili.com/video/BV1yi4y1g7ro/?spm_id_from=trigger_reload
csdn: https://blog.csdn.net/qq_37541097/article/details/103482003
限制:
Darknet-19
参考:
https://blog.csdn.net/YMilton/article/details/120268832?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164821528916782089316900%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164821528916782089316900&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-3-120268832.142v5pc_search_result_cache,143v6control&utm_term=yolox%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84&spm=1018.2226.3001.4187
Top-1是指预测结果中分数最高的那一类别和实际类别一致的准确率,Top-5是指预测结果中排名前5的类别中有一个和实际类别相符的准确率
Backbone是 Darknet-53,没有最大池化层,通过卷积层来下采样。
类别损失
二值交叉熵:需要注意的是,预测最后的概率是(0, 1),但每类之前的概率是独立的,相加并不会等于1,然而softmax处理后各类别的概率相加才会等于1。
Mosaic图像增强的优点:
每个通路出来的feature map的尺寸是一样的,因为都先经过了padding,concatenate在深度上进行拼接。
为了应对正负样本不均衡的问题
focal loss为什么会那么好呢?
阿尔法只是一个超参,不是正负样本的比例。
当引入阿尔法的时候,只能平衡正负样本。这里引入的新的(1-pt)的伽马次方,可以降低简单样本的权重,聚焦于难分的负样本。
视频:https://www.bilibili.com/video/BV1t54y1C7ra?p=1
代码:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_object_detection/yolov3_spp
参考讲解:https://www.bilibili.com/video/BV1NF41147So?spm_id_from=333.999.0.0
参考博文:https://blog.csdn.net/qq_37541097/article/details/123229946?spm=1001.2014.3001.5502
CSP结构的好处:
SPP: Spatial Pyramid Pooling
解决多尺度的问题
关于SPP(Spatial Pyramid Pooling)模块之前讲YOLO系列网络详解时详细介绍过,SPP就是将特征层分别通过一个池化核大小为5x5、9x9、13x13的最大池化层,然后在通道方向进行concat拼接在做进一步融合,这样能够在一定程度上解决目标多尺度问题。
PAN: Path Aggregation Network
结构其实就是在FPN(从顶到底信息融合)的基础上加上了从底到顶的信息融合。
grid cell处针对每一个anchor来预测相应的目标回归框、object name以及每个类别的分数。引入scale来使得预测框中点可以触及到grid cell的边界,增加了正样本。
将四张不同的图片按照不同的规则拼接在一起,扩充训练样本多样性。
扩展相邻的grid cell,配合Eliminate grid sensitivity增加正样本。
对yolov3的anchor模板对于 512*512 重新生成新的 anchor模板
改变计算loss的iou的方式
参考讲解:https://www.bilibili.com/video/BV1T3411p7zR?spm_id_from=333.999.0.0&vd_source=82b50e78f6d8c4b40bd90af87f9a980b
参考博文:https://blog.csdn.net/qq_37541097/article/details/123594351
Backbone: New CSP-Darknet53
从yolov4的CSPDarknet53 —> New CSP-Darknet53
这里主要是把网络的第一层(原来是Focus模块)换成了一个6x6大小的卷积层
Neck: SPPF, New CSP-PAN
从SPP —> SPPF: 将SPP改成串行的方式,结果一样,但后者速度快2倍,详见链接。
PAN(包括FPN) —> New CSP-PAN: 在YOLOv4中,Neck的PAN结构是没有引入CSP结构的,但在YOLOv5中作者在PAN结构中加入了CSP,每个C3模块里都含有CSP结构。
Head: YOLOv3,没变
classes loss/objectness loss/location loss 具体参考原博
还有有关平衡不同尺度的损失、消除Grid敏感度、匹配正样本(Build Targets) 也请参考原博,因为写的真的很清楚,respect!
参考讲解:https://www.bilibili.com/video/BV1JW4y1k76c?spm_id_from=333.999.0.0
参考博文:https://blog.csdn.net/qq_37541097/article/details/125132817
优化器用SGD
lr为0.01
weight decay为0.0005
对标的yolov3:
backbone: darknet53 + SPP
data aug: randomHorizontalFlip、ColorJitter、multi-scale
没有 randomresizedCrop
创新点:
Decoupled head(解耦头)
因为分类和回归任务是有冲突的,并增加了IOU计算的branch,在后处理可以不用nms,
效果:收敛更快,且最后精度更高。
更强的数据增强
mosaic和mixup 来进行数据增强
Anchor-free
对于锚框的机制的变化,缺点一:锚框不好选取,缺点二:锚框增加了检测头的复杂度,并增加了每张图片预测的数量。
anchor free可以减少设计的参数,代表性FCOS、OTA
multi positives
SimOTA
这个要注意,将匹配正负样本的过程看成一个最优传输问题。这是yolox非常有特色的地方,详情请看参考链接。
NMS free(optional)