YOLO系列还包括了一个速度更快但精度稍低的嵌入式版本系列——Tiny-YOLO。
到了YOLOv3时代,Tiny-YOLO被改名为YOLO-LITE。
此外,还有使用其他轻量级骨干网络的YOLO变种,如MobileNet-YOLOv3。
参考:
https://mp.weixin.qq.com/s/xNaXPwI1mQsJ2Y7TT07u3g
YOLO-LITE:专门面向CPU的实时目标检测
https://zhuanlan.zhihu.com/p/50170492
重磅!YOLO-LITE来了
https://zhuanlan.zhihu.com/p/52928205
重磅!MobileNet-YOLOv3来了
https://mp.weixin.qq.com/s/LhXXPyvxci1d4xLzT0XFaw
xYOLO:最新最快的实时目标检测
虽然我们在概述一节已经提到了One-stage和Two-stage的概念。但鉴于这个概念的重要性,在介绍完主要的目标检测网络之后,很有必要再次总结一下。
上两图是One-stage(YOLO)和Two-stage(Faster R-CNN)的网络结构图。
One-stage一步搞定分类和bbox问题。
而Two-stage则分为两步:
1.根据区域是foreground,还是background,生成bbox。
2.对bbox进行分类和细调。
论文:
《Speed/accuracy trade-offs for modern convolutional object detectors》
通常来说,One-stage模型运算速度比Two-stage模型快,但精度略有不足。究其原因主要是“类别不平衡”问题。
详细来说,检测算法在早期会生成一大波的bbox。而一幅常规的图片中,顶多就那么几个object。这意味着,绝大多数的bbox属于background。
正是因为bbox中属于background的bbox太多了,所以如果分类器无脑地把所有bbox统一归类为background,accuracy也可以刷得很高。于是乎,分类器的训练就失败了。分类器训练失败,检测精度自然就低了。
第一个stage的RPN会对anchor进行简单的二分类(只是简单地区分是前景还是背景,并不区别究竟属于哪个细类)。经过该轮初筛,属于background的bbox被大幅砍削。虽然其数量依然远大于前景类bbox,但是至少数量差距已经不像最初生成的anchor那样夸张了。就等于是从“类别极不平衡”变成了“类别较不平衡”。
R-FCN是何恺明/孙剑小组的Jifeng Dai于2016年提出的。
论文:
《R-FCN: Object Detection via Region-based Fully Convolutional Networks》
代码:
https://github.com/PureDiors/pytorch_RFCN
faster R-CNN对卷积层做了共享(RPN和Fast R-CNN),但是经过RoI pooling后,却没有共享,如果一副图片有500个region proposal,那么就得分别进行500次卷积,这样就太浪费时间了,于是作者猜想,能不能把RoI后面的几层建立共享卷积,只对一个feature map进行一次卷积?
上图是R-FCN的网络结构图。和上一节的Faster R-CNN相比,我们可以看出如下区别:
1.Faster R-CNN是特征提取之后,先做ROI pooling,然后再经过若干层网络,最后分类+bbox。
2.R-FCN是特征提取之后,先经过若干层网络,然后再做ROI pooling,最后分类+bbox。
FC layer在近来的CV实践中,越来越不受欢迎,因此R-FCN在最后的分类+bbox阶段,也做了一些针对性的改进(如上图所示):
1.直接将roi pooling生成的feature map连接到最后的分类和回归层效果很差。这主要是因为:基CNN本身是对图像分类设计的,具有图像移动不敏感性;而对象检测领域却是图像移动敏感的,所以二者之间产生了矛盾。
2.因此R-FCN专门设计了一个position-sensitive score maps。在feature map上通过卷积运算生成一个等大但通道数为\(k^{2}(C+1)\)的feature map X。
3.对这个feature map进行特殊的ROI pooling。
标准的ROI pooling:将ROI在空间上分成kxk部分,对每个部分进行pooling操作。
R-FCN的ROI pooling:将ROI在通道上分成kxk部分,对每个部分进行pooling操作,得到一个尺寸为kxkx(C+1)的tensor。上图中各种颜色部分之间的对应关系,展示了该ROI pooling操作的实现方式。
从中可以看出,feature map X不仅在空间维度上对位置敏感,在通道维度上也对位置敏感。因此也被称作position-sensitive score maps。
4.对上一步结果的每个C+1部分进行分类,这样可以得到kxk个分类结果。对所有的分类结果进行vote,得到最终结果。
从上面两图可以看出,vote的规则就是简单多数,因此k需要是奇数才行。
5.bbox也是类似的操作,只需将上面的C+1换成4(bbox位置的坐标)即可。
参考:
http://blog.csdn.net/zijin0802034/article/details/53411041
R-FCN: Object Detection via Region-based Fully Convolutional Networks
https://blog.csdn.net/App_12062011/article/details/79737363
R-FCN
https://mp.weixin.qq.com/s/HPzQST8cq5lBhU3wnz7-cg
R-FCN每秒30帧实时检测3000类物体,马里兰大学Larry Davis组最新目标检测工作
https://mp.weixin.qq.com/s/AddHG_I00uaDov0le4vdvA
R-FCN和FPN
FPN(Feature Pyramid Network)是Tsung-Yi Lin(Ross Girshick和何恺明小组成员)的作品(2016.12)。
论文:
《Feature Pyramid Networks for Object Detection》
图(a)为手工设计特征描述子(Sift,HoG,Harr,Gabor)时代的常见模型,即对不同尺寸的图片提取特征,以满足不同尺度目标的检测要求,提高模型性能;
图(b)则是深度卷积网的基本结构,通过不断的卷积抽取特征同时逐渐增加感受野,最后进行预测;
图(c)则是融合深度网络的特征金字塔模型,众所周知深度网在经过每一次卷积后均会获得不同尺度的feature map,其天然就具有金字塔结构。但是由于网络的不断加深其图像分别率将不断下降,感受野将不断扩大,同时表征的特征也更叫抽象,其语义信息将更加丰富。SSD则采用图c结构,即不同层预测不同物体,让top层预测分辨率较高,尺寸较大的目标,bottom则预测尺寸较小的目标。然而对于小目标的检测虽然其分辨率提高了但是其语义化程度不够,因此其检测效果依旧不好。
图(d)则是FPN的网络结构,该网络结构大体上分为三个部分,即buttom-up自底向上的特征抽取,自顶向下的upsampling,以及侧边融合通道(lateral coonnection)。通过这三个结构网络的每一层均会具有较强的语义信息,且能很好的满足速度和内存的要求。
上图是加了FPN之后的ResNet,其中的虚线框表示的是通道融合的方法。U-Net采用了concat模式融合下采样和上采样通道,而这里则是沿用了ResNet的融合方法:Tensor Add。
上图是Faster R-CNN+FPN。原始的Faster R-CNN的RoI pooling是从同一个feature map中获得ROI,而这里是根据目标尺度大小,从不同尺度的feature map中获得ROI。
FPN是从上到下的提取特征,后来的PAN在此基础上又来了一些从下而上的套路:
参考:
https://mp.weixin.qq.com/s/mY_QHvKmJ0IH_Rpp2ic1ig
目标检测FPN
https://mp.weixin.qq.com/s/TelGG-uVQyxwQjiDGE1pqA
特征金字塔网络FPN
https://zhuanlan.zhihu.com/p/58603276
FPN-目标检测
https://zhuanlan.zhihu.com/p/70523190
总结-CNN中的目标多尺度处理
https://mp.weixin.qq.com/s/xMQA97k0USl69v1MC86HKA
多尺度特征金字塔结构用于目标检测
https://mp.weixin.qq.com/s/rMR98woa1y_sjSFgG24cGQ
常见特征金字塔网络FPN及变体
https://mp.weixin.qq.com/s/ZqNRxexEFRxVXI7-bGPx0A
Feature Pyramid Network详解特征金字塔网络FPN的来龙去脉
RetinaNet也是Tsung-Yi Lin的作品(2017.8)。
论文:
《Focal Loss for Dense Object Detection》
在《深度目标检测(五)》中,我们已经指出“类别不平衡”是导致One-stage模型精度不高的原因。那么如何解决这个问题呢?
答案是:Focal Loss。(参见《机器学习(二十二)》)
上图是RetinaNet的网络结构图,可以看出它是一个One-stage模型。基本相当于:ResNet+FPN+Focal loss。
参考:
https://blog.csdn.net/jningwei/article/details/80038594
论文阅读: RetinaNet
https://zhuanlan.zhihu.com/p/68786098
再谈RetinaNet
传统的目标检测网络,无论是One-stage还是Two-stage,都有基于Anchor的。Anchor的作用主要在于:显式枚举出不同的scale和aspect ratio的基准bbox。
但就本质而言,框对于物体来说不是一个最好的表示。框的顶点可能甚至都不在物体上,离物体本身已经很远了。
因此,自2018年以来,逐渐有一些不基于anchor的目标检测方法出现,形成了一股Anchor-Free的热潮。下面将首先介绍一下,该类方法的开山之作——CornerNet。
CornerNet并非第一个提出Anchor-Free思想的模型,但却是第一个精度和性能达到与anchor base方法同等水平的Anchor-Free模型。
CornerNet是Princeton University的Hei Law的作品。(2018.8)
论文:
《CornerNet: Detecting Objects as Paired Keypoints》
CornerNet认为Two-stage目标检测最明显的缺点是在Region Proposal阶段需要提取anchor boxes。这样做导致两个问题:
提取的anchor boxes数量较多,比如DSSD使用40k,RetinaNet使用100k,anchor boxes众多造成正负样本不均衡。
Anchor boxes需要调整很多超参数,比如anchor boxes数量、尺寸、比率,影响模型的训练和推断速率。
上图是CornerNet的网络结构。可以看出它主要由两部分组成:
这是CornerNet的骨干部分。详情参见《深度学习(十二)》。
您的打赏,是对我的鼓励