关于用深度学习做检测的一些思考

检测,即给定一张图像,在图像中定位出目标的位置信息。从目标角度来说,可以分为多目标和单目标检测。
多目标检测,从数据集角度,有imagenet,coco,voc数据集,从网络框架来说,有yolo,ssd,faster rcnn等大家熟知的网络框架。单目标检测,以人脸为例,有faceboxes,ssh等检测网络。对于特定的目标,还可以通过改进通用网络结构/参数,来进行检测。

对于所有检测网络,基本结构都可以看成 基础网络做特征提取+分类/定位网络。
从基础网络来看,有轻量级的网络,shufflenet, mobilenet v1/v2。shufflenet是在group conv的基础上提出来的,shuffle feature map,加强了group之间的联系。mobilenet,最关键的地方在于理解depthwise+pointwise convelution,与普通的卷积相比,减小了参数与计算量。而mobilenet v2,在于去掉了thin feature后的relu(减少信息损失)以及shortcut的连法。
因为shufflenet与mobilenet都涉及depthwise,shufflenet还涉及shuffle这个操作,所以具体网络的速度,都涉及具体实现。
中等大小的基础网络,VGG(一般VGG16),结构很简单,一般的任务都可用该网络,在速度和精度方面能起到很好的权衡作用。加速也很容易。
大的基础网络,Resnet50/101,较深的层数通过shortcut这样的结构,使得误差可以反向传播、收敛成为可能。

无论做什么任务,最重要的地方在于特征提取,在传统的机器学习中,这一步是通过人为设定的,而在深度学习中,这一步网络帮我们自动完成了,但这并不代表我们什么都不用做。关注feature map,非常重要。对于任何的基础网络,浅层的网络,都会提取一些基本特征,比如纹理信息等;而深层的网络,会对特征做一些组合,形成一些更为复杂的特征。
从reception的角度来说,浅层的网络,reception比较小,可以感受一些局部信息;深层的网络,reception比较大,感受的信息范围更大。所以,对于小目标而言,可以利用浅层的信息,进行一些定位;而又由于浅层特征不足,可以将浅层和深层的网络结合,做一些特征融合的工作,做小目标检测。关于特征融合,亦或者reception角度,很多的论文都是从这个角度出来的。比如Receptive Field Block Net for Accurate and Fast Object Detection利用空洞卷积扩大reception,Multi-Branch Fully Convolutional Network for Face Detection 将不同卷积层特征融合。
在很多地方,我们常提一个词,“context”,即:上下文信息。什么意思呢?比如我们做阅读理解,不懂某个词句什么意思,怎么办,结合上下文,就知道什么意思了。做检测也一样,有时候,单看某个局部区域,不能判断是否是目标,于是,结合这个区域的周围信息,可以帮助我们判断。比如SSH,利用convlution并联的结构,成功的增加了上下文信息。

anchor,在yolo里被称为default box,未完待续。。

猜你喜欢

转载自blog.csdn.net/u012420309/article/details/80077309