X128做摄像头组,大家电脑怎么看小方摄像头

&figure&&img src=&https://pic3.zhimg.com/v2-4fd16ce4ccb6e0cf3fb55_b.jpg& data-rawwidth=&935& data-rawheight=&123& class=&origin_image zh-lightbox-thumb& width=&935& data-original=&https://pic3.zhimg.com/v2-4fd16ce4ccb6e0cf3fb55_r.jpg&&&/figure&&h2&&b&前言&/b&&/h2&&p&CNN(convolutional neural network)在目标检测中大放异彩,R-CNN系列,YOLO,SSD各类优秀的方法层出不穷。在2D图像的目标检测上,不少学术界提出的框架已经投入商用。但是,具体落实到自动驾驶、机器人这类应用场景上时,2D场景下的目标检测对于3D真实世界的场景描述依然不够。&/p&&p&目标检测问题实际上包含了两个任务:定位和分类。3D目标检测在定位这一任务上的目标是返回3D bounding boxes,而其需要的信息除了2D的RGB图像以外,还包含了与之对应的深度信息Depth Map:&/p&&p&&b&RGB-D&/b& = &b&普通的RGB三通道彩色图像&/b& + &b&Depth Map&/b&&/p&&p&在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,Depth Map 类似于灰度图像,只是它的每个像素值是传感器距离物体的实际距离。通常RGB图像和Depth图像是配准的,因而像素点之间具有一对一的对应关系。&/p&&p&本文以时间为主轴,带你速览自2014年以来的,在RGB-D图像上进行目标检测的典型论文。&/p&&h2&&b&论文&/b&&/h2&&p&&b&2014年:Learning Rich Features from RGB-D Images for Object Detection and Segmentation(ECCV'14)&/b&&/p&&p&本文是rbg大神在berkeley时的作品。”基于CNN已经在图像分类、对象检测、语义分割、细粒度分类上表现出了相当的优势,不少工作已经将CNN引入在RGB-D图像上的视觉任务上。这些工作中一部分直接采用4-channel的图像来进行语义分割任务(not object detetction),一部分只是在非常理想的环境下对小物体进行目标检测。“&/p&&p&作者的方法是在2D目标检测框架R-CNN的基础上,增加对Depth Map进行利用的module,总体结构如下:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-fd8d7c92d8beda4936cfaa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&852& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&852& data-original=&https://pic3.zhimg.com/v2-fd8d7c92d8beda4936cfaa_r.jpg&&&/figure&&p&(1)基于RGB图像和Depth Map,检测图像中的轮廓,并生成2.5D的proposals(从overview上可以看到,所谓的2.5D实则包括目标每个像素的视差、高度、倾斜角)&/p&&p&(2)利用CNN进行特征提取,这里的网络包括两个:Depth CNN学习深度图上的特征,RGB CNN学习2D图像上的特征,最后利用SVM进行分类。&/p&&p&在对Depth Map的利用上,论文所述方法并没有直接利用CNN对其进行学习,而是encode the depth image with three channels at each pixel: horizontal disparity(水平视差), height above ground(高度), and the angle the pixel’s local surface normal makes with the inferred gravity direction(相对于重力的倾斜角).&/p&&p&&b&2015年:3D Object Proposals for Accurate Object Class Detection(NIPS'15)&/b&&/p&&p&来自Tsing Hua陈晓智大神的作品(大神在同时也是CVPR17: &a href=&http://link.zhihu.com/?target=http%3A//scholar.google.de/scholar%3Fq%3DMulti-View%2Object%2520Detection%2520Network%2520for%2520Autonomous%2520Driving& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Multi-View 3D Object Detection Network for Autonomous Driving&/a&的一作,给跪了)。&/p&&p&作者首先指出,目前最先进的RCNN方法在自动驾驶数据集KITTI上表现不好,原因之一在于KITTI上的测试图像中,包含许多小型物体、遮挡、阴影,使得实际包含了object的proposals被认为是不包含的。此外,KITTI对区域的精细程度要求很高(overlap),而目前的大多数区域推荐都基于强度和纹理的grouping super pixels,它们无法获得高质量的proposals。&/p&&p&文章面向自动驾驶场景,提出了一种新的object proposal方法。对于每一个3D bounding box(记为&b&y&/b&),将其用一个元组来表示(x, y, z, θ, c, t),(x, y, z) 表示 3D box的中心,θ 表示其方位角,c代表object是哪一类,t代表相应的3d box模板集合。&/p&&p&以&b&x&/b&代表点云,&b&y&/b&代表proposal,作者认为y应该有以下特性:&/p&&ul&&li&包含点云的高密度区域&/li&&li&不能与free space重叠&/li&&li&点云不应该垂直延伸在3d box之外&/li&&li&box附近的点云高度应该比之低&/li&&/ul&&p&基于这些特性,作者列出了能量方程,目标为最小化E(x,y),采用ICML2004上一篇文章中所述的structured SVM进行训练。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-eafc46da960da0e18d70e325edc205e8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&55& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic1.zhimg.com/v2-eafc46da960da0e18d70e325edc205e8_r.jpg&&&/figure&&p&文章中所述方法的效果、代码、数据:&a href=&http://link.zhihu.com/?target=http%3A//www.cs.toronto.edu/objprop3d/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3D Object Proposals for Accurate Object Class Detection&/a&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a72d2d4ed24fc04b9c0e0e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&788& data-rawheight=&477& class=&origin_image zh-lightbox-thumb& width=&788& data-original=&https://pic3.zhimg.com/v2-a72d2d4ed24fc04b9c0e0e_r.jpg&&&/figure&&p&&b&2016年:Deep Sliding Shapes for Amodal 3D Object Detection in RGB-D Images(CVPR'16)&/b&&/p&&p&文章来自普林斯顿大学,提出的方法为Faster R-CNN的3D版本,侧重于indoor scene下的object detection。&/p&&p&目前关于3D目标检测任务的方法,有采用2D方法来结合深度图的,也有在3D空间内进行检测的。这不禁让作者发问:&b&which representation is better for 3D amodal object detection, 2D or 3D?&/b&接着他指出,目前2D方法表现更优异的原因,可能是因为其CNN模型更为powerful(well-designed&pre-trained with ImageNet),而不是由于其2D表达。&/p&&p&作者的方法是设计名为Deep Sliding Shapes的3D CNN,输入3D的立体场景,输出3D bounding boxes,由此提出了Multi-scale 3D RPN(Region Proposal Network):&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f4ef8d5b8aeaa27a68ed25_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&604& data-rawheight=&383& class=&origin_image zh-lightbox-thumb& width=&604& data-original=&https://pic2.zhimg.com/v2-f4ef8d5b8aeaa27a68ed25_r.jpg&&&/figure&&p&类似于Faster R-CNN中的RPN网络,对于每一个滑动窗口,作者定义N=19种anchor boxes:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c58e4dce84d26caeafc7e3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&482& data-rawheight=&221& class=&origin_image zh-lightbox-thumb& width=&482& data-original=&https://pic4.zhimg.com/v2-c58e4dce84d26caeafc7e3_r.jpg&&&/figure&&p&而后,为了检测大小不一的目标,作者增加了多尺度的检测手段。具体来说,在不同的卷积层上进行滑窗。这里的滑窗是3D sliding window,因为整个网络结构就是接收3Dinput的。为了精修区域,作者改进了bbox regression,提出3D box regression:一个3D box可以由中心坐标[cx, cy, cz],长宽高[s1, s2, s3]来表示,最后要得到的是6个偏移量:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9274bffdde37b8dcc653e2d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&509& data-rawheight=&46& class=&origin_image zh-lightbox-thumb& width=&509& data-original=&https://pic2.zhimg.com/v2-9274bffdde37b8dcc653e2d_r.jpg&&&/figure&&p&而后采用与2D box regression同样的smooth L1 loss即可。&/p&&p&补充:如何从Depth Map得到3D Input?&/p&&p&&b&Encoding 3D Representation&/b&:不同于Depth RCNN的disparity+height+angle 表达,作者在这里采用了TSDF方法,可以看如下的引用:&/p&&blockquote&KinectFusion在世界坐标系中定义了一个立方体,并把该立方体按照一定的分辨率切割成小立方体(voxel)。以图8上为例所示,图中定义了一个3x3x3米的立方体,并把立方体分为不同分辨率的小立方体网格。也就是说,这个大立方体限制了经过扫描重建的模型的体积。然后,KinectFusion使用了一种称为“截断有符号距离函数”(truncated signed distance function,简称TSDF)的方法来更新每个小网格中的一个数值,该数值代表了该网格到模型表面的最近距离,也称为TSDF值(图8下)。对于每个网格,在每一帧都会更新并记录TSDF的值,然后再通过TSDF值还原出重建模型。例如,通过图8下两幅图中的网格的TSDF数值分布,我们可以很快还原出模型表面的形状和位置。这种方法通常被称为基于体数据的方法(Volumetric-based method)。该方法的核心思想是,通过不断更新并“融合”(fusion)TSDF这种类型的测量值,我们能够 越来越接近所需要的真实值。&/blockquote&&figure&&img src=&https://pic2.zhimg.com/v2-bbdfad81f715ed5fa4e99ad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&564& data-rawheight=&369& class=&origin_image zh-lightbox-thumb& width=&564& data-original=&https://pic2.zhimg.com/v2-bbdfad81f715ed5fa4e99ad_r.jpg&&&/figure&&p&&b&2017:Learning Cross-Modal Deep Representations for Robust Pedestrian Detection(CVPR'17)&/b&&/p&&p&这篇文章虽然是针对于专门的pedestrians detection任务,但是其做法是很具有启发性的,所以也贴在这里。&/p&&p&作者指出,“行人检测任务在深度学习的帮助下已经取得重大突破,同时新型传感器(如thermal and depth cameras)也为解决不利照明和遮挡提供了新的机会。但是,现有监控系统绝大多数仍然采用传统的RGB传感器,因此在illumination variation, shadows, and low&br&external light仍然十分具有挑战。”&/p&&p&在针对于照明条件不利环境下的行人检测任务,文章描述了一种依赖于cross-modality learning framework的学习框架,由两个网络组成:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-452eaa234a89f9fdbbae16a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&506& data-rawheight=&413& class=&origin_image zh-lightbox-thumb& width=&506& data-original=&https://pic3.zhimg.com/v2-452eaa234a89f9fdbbae16a_r.jpg&&&/figure&&p&(1)Region Reconstruction Network (RRN) &/p&&figure&&img src=&https://pic4.zhimg.com/v2-8f2cca2bd485e32f1eef_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&849& data-rawheight=&322& class=&origin_image zh-lightbox-thumb& width=&849& data-original=&https://pic4.zhimg.com/v2-8f2cca2bd485e32f1eef_r.jpg&&&/figure&&p&RRN用于学习在RGB图像和thermal image间的映射,而后学习得到的模型就可以用于依据RGB生成thermal image。RRN接收RGB+行人proposals,在ROI Pooling后加了重建网络(全卷积)。这里的重建网络不重建整幅图像的thermal image,而是只对行人区域进行重建。&/p&&p&(2)Multi-Scale Detection Network (MSDN)&/p&&p&MSDN利用RRN学习的cross-modal representations来进行检测。其包含两个子网(Sub-Net A和Sub-Net B),其中Sub-Net B中的参数从RRN中迁移而来,最后的fc分别做multi-task:bbox regression和softmax。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0c258c7d1baf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&837& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&837& data-original=&https://pic4.zhimg.com/v2-0c258c7d1baf_r.jpg&&&/figure&&p&&b&2017:Amodal Detection of 3D Objects: Inferring 3D Bounding Boxes from 2D Ones in RGB-Depth Images(CVPR'17)&/b&&/p&&p&来自坦普尔大学的文章。作者在这里与2016的Deep Sliding Shapes思路不同,重新回到2.5D方法来进行3D目标检测。所谓2.5D方法,实则就是从RGB-D上提取出合适的表达,而后building models to convert 2D results to 3D space。“虽然利用三维几何特征检测前景光明,但在实践中,重建的三维形状往往不完整,由于遮挡、反射等原因而含有各种噪声。”&/p&&p&整个系统的overview如下,其基于Fast R-CNN实现:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0513f76fab8e54a4af24e0bdae38f24f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1019& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&1019& data-original=&https://pic4.zhimg.com/v2-0513f76fab8e54a4af24e0bdae38f24f_r.jpg&&&/figure&&p&对于每一个2D的proposal(这里关于2D proposals的方法就是用的Depth R-CNN中的方法),由分类结果和depth information来初始化一个3D bounding box(图中黄色的虚线框),而后也是用一个3d box regression来进行区域精修。重点关注3D box proposal and regression:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d4d4d5630631bed99dab5edcac77f9fd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&508& data-rawheight=&367& class=&origin_image zh-lightbox-thumb& width=&508& data-original=&https://pic2.zhimg.com/v2-d4d4d5630631bed99dab5edcac77f9fd_r.jpg&&&/figure&&p&图中是3D box proposal的一个实例。每一个3d box由向量[xcam, ycam, zcam, l, w, h, θ].来表达,[xcam, ycam, zcam]表中心位置,[l, w, h]表尺寸,θ∈ [-π/2, π/2]表示方位角,即图中黄色的箭头与z轴形成的夹角。在初始化的时候,关于尺寸是由某一类物体的类别来进行确定的。最后输出7个调整量[δx, δy, δz, δl, δw, δh, δθ],利用Smooth L1 Loss作为损失函数。&/p&&h2&&b&结语&/b&&/h2&&p&3D目标检测对于自动驾驶与机器人等领域意义重大。本文以时间为序,重点关注和分析了基于RGB-D上的3D Object Detection方法。从Depth R-CNN到3D Faster-RCNN,似乎始终基于2D的目标检测框架在跟循改进。期待在未来,将会有更为优美的方法出现。&/p&&p&感谢您的阅读,文中的遗漏与错误,恳请批评指正。&/p&&h2&&b&参考文献&/b&&/h2&&p&[1] Gupta S, Girshick R, Arbeláez P, et al. Learning Rich Features from RGB-D Images for Object Detection and Segmentation[C]// European Conference on Computer Vision. Springer, Cham, .&/p&&p&[2] Chen X, Kundu K, Zhu Y, et al. 3D object proposals for accurate object class detection[C]// International Conference on Neural Information Processing Systems. MIT Press, .&/p&&p&[3] Song S, Xiao J. Deep Sliding Shapes for Amodal 3D Object Detection in RGB-D Images[J]. ):808-816.&/p&&p&[4] Deng Z, Latecki L J. Amodal Detection of 3D Objects: Inferring 3D Bounding Boxes from 2D Ones in RGB-Depth Images[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, .&/p&&p&[5] Xu D, Ouyang W, Ricci E, et al. Learning Cross-Modal Deep Representations for Robust Pedestrian Detection[J]. 2017.&/p&
前言CNN(convolutional neural network)在目标检测中大放异彩,R-CNN系列,YOLO,SSD各类优秀的方法层出不穷。在2D图像的目标检测上,不少学术界提出的框架已经投入商用。但是,具体落实到自动驾驶、机器人这类应用场景上时,2D场景下的目标检测对于3D真…
&figure&&img src=&https://pic2.zhimg.com/v2-47aa565fa1c419ec56e4_b.jpg& data-rawwidth=&908& data-rawheight=&294& class=&origin_image zh-lightbox-thumb& width=&908& data-original=&https://pic2.zhimg.com/v2-47aa565fa1c419ec56e4_r.jpg&&&/figure&前几天tensorflow开源了诸多目标检测模型,包括Faster RCNN、SSD等,恰巧自己的论文用的也是目标检测网络,是时间把以前刷过的检测网络祭出来了。自己看过的主要包括基于region proposal的RCNN系列:RCNN、Fast RCNN、Faster RCNN,基于区域划分的YOLO、SSD,基于强化学习的AttentionNet等,还有最新的Mask RCNN。我们将用一周时间先详细介绍每个模型然后通过Tensorflow跑一遍模型。说到基于region proposal的目标检测方法不得不提到RCNN所使用的Selective Search方法,就让我们从这篇文章开始入手好了。&p&文章地址:&a href=&https://link.zhihu.com/?target=http%3A//www.huppelen.nl/publications/selectiveSearchDraft.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&huppelen.nl/publication&/span&&span class=&invisible&&s/selectiveSearchDraft.pdf&/span&&span class=&ellipsis&&&/span&&/a&&br&&/p&&h2&&b&摘要&/b&&/h2&&p&为了了解目标检测区域建议的复杂性,我们先看一组图片:&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-78eac7d572a5d_b.jpg& data-rawwidth=&892& data-rawheight=&804& class=&origin_image zh-lightbox-thumb& width=&892& data-original=&https://pic4.zhimg.com/v2-78eac7d572a5d_r.jpg&&&/figure&由于我们事先不知道需要检测哪个类别,因此第一张图的桌子、瓶子、餐具都是一个个候选目标,而餐具包含在桌子这个目标内,勺子又包含在碗内。这张图展示了目标检测的层级关系以及尺度关系,那我们如何去获得这些可能目标的位置呢。常规方法是通过穷举法,就是在原始图片上进行不同尺度不同大小的滑窗,获取每个可能的位置。而这样做的缺点也显而易见,就是计算量实在是太大了,而且由于不可能每个尺度都兼顾到,因此得到的目标位置也不可能那么准。那么我们能不能通过视觉特征去减少这种分类的可能性并提高精确度呢。这就是本文想做的事情。&/p&&p&可用的特征有很多,到底什么特征是有用的呢?我们看第二副图片的两只猫咪,他们的纹理是一样的,因此纹理特征肯定不行了。而如果通过颜色则能很好区分。但是第三幅图变色龙可就不行了,这时候边缘特征、纹理特征又显得比较有用。而在最后一幅图中,我们很容易把车和轮胎看作是一个整体,但是其实这两者的特征差距真的很明显啊,无论是颜色还是纹理或是边缘都差的太远了。而这这是几种情况,自然图像辣么多,我们通过什么特征去区分?应该区分到什么尺度?&/p&&p&selective search的策略是,既然是不知道尺度是怎样的,那我们就尽可能遍历所有的尺度好了,但是不同于暴力穷举,我们可以先得到小尺度的区域,然后一次次合并得到大的尺寸就好了,这样也符合人类的视觉认知。既然特征很多,那就把我们知道的特征都用上,但是同时也要照顾下计算复杂度,不然和穷举法也没啥区别了。最后还要做的是能够对每个区域进行排序,这样你想要多少个候选我就产生多少个,不然总是产生那么多你也用不完不是吗?好了这就是整篇文章的思路了,那我们一点点去看。&/p&&h2&&b&产生多尺度的区域建议&/b&&/h2&&p&&figure&&img src=&https://pic1.zhimg.com/v2-dbe9a62adc7d904ad59cb0e2d8249f47_b.jpg& data-rawwidth=&543& data-rawheight=&452& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic1.zhimg.com/v2-dbe9a62adc7d904ad59cb0e2d8249f47_r.jpg&&&/figure&首先通过基于图的图像分割方法初始化原始区域,就是将图像分割成很多很多的小块。然后我们使用贪心策略,计算每两个相邻的区域的相似度,然后每次合并最相似的两块,直到最终只剩下一块完整的图片。然后这其中每次产生的图像块包括合并的图像块我们都保存下来,这样就得到图像的分层表示了呢。那我们如何计算两个图像块的相似度呢?&/p&&h2&&b&保持多样性的策略&/b&&/h2&&p&为了尽最大可能去分割所有情景的图片我们得保持特征的多样性啊,该文章主要通过两种方式保持特征多样性,一方面是通过色彩空间变换,将原始色彩空间转换到多达八中的色彩空间。然后通过多样性的距离计算方式,综合颜色、纹理等所有的特征。&/p&&ul&&li&颜色空间变换&figure&&img src=&https://pic4.zhimg.com/v2-92aafe7f8a23934bcab2a_b.jpg& data-rawwidth=&549& data-rawheight=&371& class=&origin_image zh-lightbox-thumb& width=&549& data-original=&https://pic4.zhimg.com/v2-92aafe7f8a23934bcab2a_r.jpg&&&/figure&&/li&&/ul&&br&这么多的颜色空间,反正我认识的不认识的都在里面了。&ul&&li&距离计算方式&/li&&/ul&&br&距离计算方式需要满足两个条件,其一速度得快啊,因为毕竟我们这么多的区域建议还有这么多的多样性。其二是合并后的特征要好计算,因为我们通过贪心算法合并区域,如果每次都需要重新计算距离,这个计算量就大太多了。&ol&&li&颜色距离&/li&&/ol&&br&我们费劲心思搞了这么多的色彩空间,首先当然就是应该计算颜色的距离了啊。&p&&figure&&img src=&https://pic2.zhimg.com/v2-2f0a1e96eec6b444adc5a256b9b501dc_b.jpg& data-rawwidth=&273& data-rawheight=&60& class=&content_image& width=&273&&&/figure&距离的计算方式很简单,就是对各个通道计算颜色直方图,然后取各个对应bins的直方图最小值。这样做的话两个区域合并后的直方图也很好计算,直接通过直方图大小加权区域大小然后除以总区域大小就好了。&/p&&p&2.纹理距离&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-b0eed0fdffb_b.jpg& data-rawwidth=&257& data-rawheight=&67& class=&content_image& width=&257&&&/figure&纹理距离计算方式和颜色距离几乎一样,我们计算每个区域的快速sift特征,其中方向个数为8,3个通道,每个通道bins为10,对于每幅图像得到240维的纹理直方图,然后通过上式计算距离。&/p&&p&3.优先合并小的区域&/p&&p&如果仅仅是通过颜色和纹理特征合并的话,很容易使得合并后的区域不断吞并周围的区域,后果就是多尺度只应用在了那个局部,而不是全局的多尺度。因此我们给小的区域更多的权重,这样保证在图像每个位置都是多尺度的在合并。&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-78e6d61af4a6e5f62b7c577030cad5f6_b.jpg& data-rawwidth=&285& data-rawheight=&66& class=&content_image& width=&285&&&/figure&4.区域的合适度度距离&/p&&p&不仅要考虑每个区域特征的吻合程度,区域的吻合度也是重要的,吻合度的意思是合并后的区域要尽量规范,不能合并后出现断崖的区域,这样明显不符合常识,体现出来就是区域的外接矩形的重合面积要大。因此区域的合适度距离定义为:&/p&&p&&figure&&img src=&https://pic2.zhimg.com/v2-7e2a63cc26b2a_b.jpg& data-rawwidth=&392& data-rawheight=&53& class=&content_image& width=&392&&&/figure&5.综合各种距离&/p&&p&现在各种距离都计算出来,我们要做的就是整合这些距离,通过多种策略去得到区域建议,最简单的方法当然是加权咯:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-d8bd995fba_b.jpg& data-rawwidth=&398& data-rawheight=&68& class=&content_image& width=&398&&&/figure&6.参数初始化多样性&/p&&p&我们基于基于图的图像分割得到初始区域,而这个初始区域对于最终的影响是很大的,因此我们通过多种参数初始化图像分割,也算是扩充了多样性。&/p&&h2&&b&给区域打分&/b&&/h2&&p&通过上述的步骤我们能够得到很多很多的区域,但是显然不是每个区域作为目标的可能性都是相同的,因此我们需要衡量这个可能性,这样就可以根据我们的需要筛选区域建议个数啦。&/p&&p&这篇文章做法是,给予最先合并的图片块较大的权重,比如最后一块完整图像权重为1,倒数第二次合并的区域权重为2以此类推。但是当我们策略很多,多样性很多的时候呢,这个权重就会有太多的重合了,排序不好搞啊。文章做法是给他们乘以一个随机数,毕竟3分看运气嘛,然后对于相同的区域多次出现的也叠加下权重,毕竟多个方法都说你是目标,也是有理由的嘛。这样我就得到了所有区域的目标分数,也就可以根据自己的需要选择需要多少个区域了。&/p&&h2&&b&基于Selective Search的目标识别&/b&&/h2&&p&&figure&&img src=&https://pic2.zhimg.com/v2-dfb487d18f24_b.jpg& data-rawwidth=&1116& data-rawheight=&266& class=&origin_image zh-lightbox-thumb& width=&1116& data-original=&https://pic2.zhimg.com/v2-dfb487d18f24_r.jpg&&&/figure&这就是典型的一个应用了,我们得到了区域的很多建议,提取区域的空间金字塔的多样特征,组合成一个特征向量,然后训练SVM就可以分类出哪个区域是真正我们想要的目标啦。当然也可以用以目标检测,我们接下来要说的RCNN就是这样干的。不过比相比这篇文章的sift特征啊啥的要高级一些,毕竟CNN的特征表达能力还是很强势的。&/p&
前几天tensorflow开源了诸多目标检测模型,包括Faster RCNN、SSD等,恰巧自己的论文用的也是目标检测网络,是时间把以前刷过的检测网络祭出来了。自己看过的主要包括基于region proposal的RCNN系列:RCNN、Fast RCNN、Faster RCNN,基于区域划分的YOLO、SSD…
&figure&&img src=&https://pic1.zhimg.com/v2-f44ff552a506dcc32d6f0f04c5be68e9_b.jpg& data-rawwidth=&800& data-rawheight=&610& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/v2-f44ff552a506dcc32d6f0f04c5be68e9_r.jpg&&&/figure&&p&关于作者:
&a class=&member_mention& href=&http://www.zhihu.com/people/7cc12e4b4cffb5ab16acd6& data-hash=&7cc12e4b4cffb5ab16acd6& data-hovercard=&p$b$7cc12e4b4cffb5ab16acd6&&@李家丞&/a& &b&同济大学数学系&/b&本科在读,现为&b&格灵深瞳算法部实习生&/b&。&/p&&p&作者个人主页:&a href=&http://link.zhihu.com/?target=https%3A//ddlee.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&李家丞|个人主页|关于我&/a&&/p&&p&本章是《干货 | 目标检测入门,看这篇就够了》的第二篇连载。想回顾上一篇的内容,欢迎搭电梯直达:&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-cfd03d930f73ed6ea2c431a204d333b3_180x120.jpg& data-image-width=&698& data-image-height=&400& class=&internal&&格灵深瞳DeepGlint:干货 | 目标检测入门,看这篇就够了&/a&&h2&&b&(二)目标检测模型的评测与训练技巧&/b&&/h2&&h2&文章结构&/h2&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-4abf987eb99858cbee4ea87_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&913& data-rawheight=&504& class=&origin_image zh-lightbox-thumb& width=&913& data-original=&https://pic4.zhimg.com/v2-4abf987eb99858cbee4ea87_r.jpg&&&/figure&&p&&br&&/p&&h2&&b&检测模型的评测指标&/b&&/h2&&p&目标检测模型本源上可以用统计推断的框架描述,我们关注其犯第一类错误和第二类错误的概率,通常用准确率和召回率来描述。准确率描述了模型有多准,即在预测为正例的结果中,有多少是真正例;召回率则描述了模型有多全,即在为真的样本中,有多少被我们的模型预测为正例。不同的任务,对两类错误有不同的偏好,常常在某一类错误不多于一定阈值的情况下,努力减少另一类错误。在检测中,mAP(mean Average Precision)作为一个统一的指标将这两种错误兼顾考虑。&/p&&p&具体地,对于每张图片,检测模型输出多个预测框(常常远超真实框的个数),我们使用IoU(Intersection Over Union,交并比)来标记预测框是否为预测正确。标记完成后,随着预测框的增多,召回率总会提升,在不同的召回率水平下对准确率做平均,即得到AP,最后再对所有类别按其所占比例做平均,即得到mAP。&/p&&p&在较早的Pascal VOC数据集上,常采用固定的一个IoU阈值(如0.5, 0.75)来计算mAP,现阶段较为权威的MS COCO数据集上,对不同的IoU阈值(0.5-0.95,0.05为步长)分别计算AP,再综合平均,并且给出了不同大小物体分别的AP表现,对定位准确的模型给予奖励并全面地展现不同大小物体上检测算法的性能,更为科学合理。&/p&&p&在实践中,我们不仅关注检测模型的精度,还关注其运行的速度,常常用FPS(Frame Per Second,每秒帧率)来表示检测模型能够在指定硬件上每秒处理图片的张数。通常来讲,在单块GPU上,两阶段方法的FPS一般在个位数,而单阶段方法可以达到数十。现在检测模型运行的平台并不统一,实践中也不能部署较为昂贵的GPU进行推断。事实上,很多文章并没有严谨讨论其提出模型的速度表现(加了较多的trick以使精度达到SOTA),另外,考虑到目前移动端专用芯片的发展速度和研究进展,速度方面的指标可能较难形成统一的参考标准,需要谨慎看待文章中汇报的测试结果。&/p&&h2&标准评测数据集&/h2&&h2&Pascal VOC(&a href=&http://link.zhihu.com/?target=http%3A//host.robots.ox.ac.uk/pascal/VOC/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pascal Visual Object Classes&/a&)&/h2&&p&自2005年起每年举办一次比赛,最开始只有4类,到2007年扩充为20个类,共有两个常用的版本:。学术界常用5k的trainval2007和16k的trainval2012作为训练集(07+12),test2007作为测试集,用10k的trainval2007+test2007和和16k的trainval2012作为训练集(07++12),test2012作为测试集,分别汇报结果。&/p&&p&Pascal VOC对早期检测工作起到了重要的推动作用,目前提升的空间相对有限,权威评测集的交接棒也逐渐传给了下面要介绍的COCO。&/p&&h2&MS COCO(&a href=&http://link.zhihu.com/?target=http%3A//cocodataset.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Common Objects in COntext&/a&)&/h2&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f2d7af8bdeec5c388d215a382b41ae9a_b.jpg& data-size=&normal& data-rawwidth=&1195& data-rawheight=&734& class=&origin_image zh-lightbox-thumb& width=&1195& data-original=&https://pic3.zhimg.com/v2-f2d7af8bdeec5c388d215a382b41ae9a_r.jpg&&&figcaption&检测任务在COCO数据集上的进展&/figcaption&&/figure&&p&COCO数据集收集了大量包含常见物体的日常场景图片,并提供像素级的实例标注以更精确地评估检测和分割算法的效果,致力于推动场景理解的研究进展。依托这一数据集,每年举办一次比赛,现已涵盖检测、分割、关键点识别、注释等机器视觉的中心任务,是继ImageNet Chanllenge以来最有影响力的学术竞赛之一。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-8e27b75b_b.jpg& data-size=&normal& data-rawwidth=&1250& data-rawheight=&426& class=&origin_image zh-lightbox-thumb& width=&1250& data-original=&https://pic4.zhimg.com/v2-8e27b75b_r.jpg&&&figcaption&iconic与non-iconic图片对比&/figcaption&&/figure&&p&相比ImageNet,COCO更加偏好目标与其场景共同出现的图片,即non-iconic images。这样的图片能够反映视觉上的语义,更符合图像理解的任务要求。而相对的iconic images则更适合浅语义的图像分类等任务。&/p&&p&COCO的检测任务共含有80个类,在2014年发布的数据规模分train/val/test分别为80k/40k/40k,学术界较为通用的划分是使用train和35k的val子集作为训练集(trainval35k),使用剩余的val作为测试集(minival),同时向官方的evaluation server提交结果(test-dev)。除此之外,COCO官方也保留一部分test数据作为比赛的评测集。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-302e89fdfbae8_b.jpg& data-size=&normal& data-rawwidth=&1241& data-rawheight=&755& class=&origin_image zh-lightbox-thumb& width=&1241& data-original=&https://pic1.zhimg.com/v2-302e89fdfbae8_r.jpg&&&figcaption&COCO数据集分布&/figcaption&&/figure&&p&&br&&/p&&p&在分布方面,COCO的每个类含有更多实例,分布也较为均衡(上图a),每张图片包含更多类和更多的实例(上图b和c,均为直方图,每张图片平均分别含3.3个类和7.7个实例),相比Pascal VOC,COCO还含有更多的小物体(下图,横轴是物体占图片的比例)。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-491b7f396aef16733a25f_b.jpg& data-size=&normal& data-rawwidth=&577& data-rawheight=&331& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&https://pic4.zhimg.com/v2-491b7f396aef16733a25f_r.jpg&&&figcaption&COCO数据集物体大小分布&/figcaption&&/figure&&p&如本文第一节所述,COCO提供的评测标准更为精细化,提供的&a href=&http://link.zhihu.com/?target=https%3A//github.com/cocodataset/cocoapi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&API&/a&不仅包含了可视化、评测数据的功能,还有对模型的错误来源分析脚本,能够更清晰地展现算法的不足之处。COCO所建立的这些标准也逐渐被学术界认可,成为通用的评测标准。您可以在&a href=&http://link.zhihu.com/?target=http%3A//cocodataset.org/%23detections-leaderboard& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这里&/a&找到目前检测任务的LeaderBoard。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-580ad5a8350aebae3afb9e42d4e4c19a_b.jpg& data-size=&normal& data-rawwidth=&1248& data-rawheight=&1031& class=&origin_image zh-lightbox-thumb& width=&1248& data-original=&https://pic3.zhimg.com/v2-580ad5a8350aebae3afb9e42d4e4c19a_r.jpg&&&figcaption&错误来源分解,详见http://cocodataset.org/#detections-eval&/figcaption&&/figure&&h2&&a href=&http://link.zhihu.com/?target=https%3A//www.cityscapes-dataset.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cityscapes&/a&&/h2&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d06bc8f3b1ac7ae0993eae_b.jpg& data-size=&normal& data-rawwidth=&300& data-rawheight=&149& class=&content_image& width=&300&&&figcaption&Cityscapes数据示例&/figcaption&&/figure&&p&Cityscapes数据集专注于现代城市道路场景的理解,提供了30个类的像素级标注,是自动驾驶方向较为权威的评测集。&/p&&h2&&b&检测模型中的Bells and wisthles&/b&&/h2&&p&本节介绍常见的提升检测模型性能的技巧,它们常作为trick在比赛中应用。其实,这样的名称有失公允,部分工作反映了作者对检测模型有启发意义的观察,有些具有成为检测模型标准组件的潜力(如果在早期的工作中即被应用则可能成为通用做法)。读者将它们都看作学术界对解决这一问题的努力即可。对研究者,诚实地报告所引用的其他工作并添加有说服力的消融实验(ablation expriments)以支撑自己工作的原创性和贡献之处,则是值得倡导的行为。&/p&&h2&Data augmentation 数据增强&/h2&&p&数据增强是增加深度模型鲁棒性和泛化性能的常用手段,随机翻转、随机裁剪、添加噪声等也被引入到检测任务的训练中来,其信念是通过数据的一般性来迫使模型学习到诸如对称不变性、旋转不变性等更一般的表示。通常需要注意标注的相应变换,并且会大幅增加训练的时间。个人认为数据(监督信息)的适时传入可能是更有潜力的方向。&/p&&h2&Multi-scale Training/Testing 多尺度训练/测试&/h2&&p&输入图片的尺寸对检测模型的性能影响相当明显,事实上,多尺度是提升精度最明显的技巧之一。在基础网络部分常常会生成比原图小数十倍的特征图,导致小物体的特征描述不容易被检测网络捕捉。通过输入更大、更多尺寸的图片进行训练,能够在一定程度上提高检测模型对物体大小的鲁棒性,仅在测试阶段引入多尺度,也可享受大尺寸和多尺寸带来的增益。&/p&&p&multi-scale training/testing最早见于[1],训练时,预先定义几个固定的尺度,每个epoch随机选择一个尺度进行训练。测试时,生成几个不同尺度的feature map,对每个Region Proposal,在不同的feature map上也有不同的尺度,我们选择最接近某一固定尺寸(即检测头部的输入尺寸)的Region Proposal作为后续的输入。在[2]中,选择单一尺度的方式被Maxout(element-wise max,逐元素取最大)取代:随机选两个相邻尺度,经过Pooling后使用Maxout进行合并,如下图所示。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-31cd44d53ab7d0ddb1f240a_b.jpg& data-size=&normal& data-rawwidth=&661& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&661& data-original=&https://pic3.zhimg.com/v2-31cd44d53ab7d0ddb1f240a_r.jpg&&&figcaption&使用Maxout合并feature vector&/figcaption&&/figure&&p&近期的工作如FPN等已经尝试在不同尺度的特征图上进行检测,但多尺度训练/测试仍作为一种提升性能的有效技巧被应用在MS COCO等比赛中。&/p&&h2&Global Context 全局语境&/h2&&p&这一技巧在ResNet的工作[3]中提出,做法是把整张图片作为一个RoI,对其进行RoI Pooling并将得到的feature vector拼接于每个RoI的feature vector上,作为一种辅助信息传入之后的R-CNN子网络。目前,也有把相邻尺度上的RoI互相作为context共同传入的做法。&/p&&h2&Box Refinement/Voting 预测框微调/投票法&/h2&&p&微调法和投票法由工作[4]提出,前者也被称为Iterative Localization。微调法最初是在SS算法得到的Region Proposal基础上用检测头部进行多次迭代得到一系列box,在ResNet的工作中,作者将输入R-CNN子网络的Region Proposal和R-CNN子网络得到的预测框共同进行NMS(见下面小节)后处理,最后,把跟NMS筛选所得预测框的IoU超过一定阈值的预测框进行按其分数加权的平均,得到最后的预测结果。投票法可以理解为以顶尖筛选出一流,再用一流的结果进行加权投票决策。&/p&&h2&OHEM 在线难例挖掘&/h2&&p&OHEM(Online Hard negative Example Mining,在线难例挖掘)见于[5]。两阶段检测模型中,提出的RoI Proposal在输入R-CNN子网络前,我们有机会对正负样本(背景类和前景类)的比例进行调整。通常,背景类的RoI Proposal个数要远远多于前景类,Fast R-CNN的处理方式是随机对两种样本进行上采样和下采样,以使每一batch的正负样本比例保持在1:3,这一做法缓解了类别比例不均衡的问题,是两阶段方法相比单阶段方法具有优势的地方,也被后来的大多数工作沿用。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-8f2ecb395a32e0a87cc2a_b.jpg& data-size=&normal& data-rawwidth=&949& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&949& data-original=&https://pic2.zhimg.com/v2-8f2ecb395a32e0a87cc2a_r.jpg&&&figcaption&OHEM图解&/figcaption&&/figure&&p&但在OHEM的工作中,作者提出用R-CNN子网络对RoI Proposal预测的分数来决定每个batch选用的样本,这样,输入R-CNN子网络的RoI Proposal总为其表现不好的样本,提高了监督学习的效率。实际操作中,维护两个完全相同的R-CNN子网络,其中一个只进行前向传播来为RoI Proposal的选择提供指导,另一个则为正常的R-CNN,参与损失的计算并更新权重,并且将权重复制到前者以使两个分支权重同步。&/p&&p&OHEM以额外的R-CNN子网络的开销来改善RoI Proposal的质量,更有效地利用数据的监督信息,成为两阶段模型提升性能的常用部件之一。&/p&&h2&Soft NMS 软化非极大抑制&/h2&&figure&&img src=&https://pic4.zhimg.com/v2-a15a491429afd0a9c2ef_b.jpg& data-size=&normal& data-rawwidth=&574& data-rawheight=&447& class=&origin_image zh-lightbox-thumb& width=&574& data-original=&https://pic4.zhimg.com/v2-a15a491429afd0a9c2ef_r.jpg&&&figcaption&NMS后处理图示&/figcaption&&/figure&&p&NMS(Non-Maximum Suppression,非极大抑制)是检测模型的标准后处理操作,用于去除重合度(IoU)较高的预测框,只保留预测分数最高的预测框作为检测输出。Soft NMS由[6]提出。在传统的NMS中,跟最高预测分数预测框重合度超出一定阈值的预测框会被直接舍弃,作者认为这样不利于相邻物体的检测。提出的改进方法是根据IoU将预测框的预测分数进行惩罚,最后再按分数过滤。配合Deformable Convnets(将在之后的文章介绍),Soft NMS在MS COCO上取得了当时最佳的表现。算法改进如下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-4e99f4e999dc8bd43b77b_b.jpg& data-size=&normal& data-rawwidth=&480& data-rawheight=&583& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&https://pic4.zhimg.com/v2-4e99f4e999dc8bd43b77b_r.jpg&&&figcaption&Soft-NMS算法改进&/figcaption&&/figure&&p&上图中的 &img src=&http://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&& 即为软化函数,通常取线性或高斯函数,后者效果稍好一些。当然,在享受这一增益的同时,Soft-NMS也引入了一些超参,对不同的数据集需要试探以确定最佳配置。&/p&&h2&RoIAlign RoI对齐&/h2&&p&RoIAlign是Mask R-CNN([7])的工作中提出的,针对的问题是RoI在进行Pooling时有不同程度的取整,这影响了实例分割中mask损失的计算。文章采用双线性插值的方法将RoI的表示精细化,并带来了较为明显的性能提升。这一技巧也被后来的一些工作(如light-head R-CNN)沿用。&/p&&h2&拾遗&/h2&&p&除去上面所列的技巧外,还有一些做法也值得注意:&/p&&ul&&li&更好的先验(YOLOv2):使用聚类方法统计数据中box标注的大小和长宽比,以更好的设置anchor box的生成配置&/li&&li&更好的pre-train模型:检测模型的基础网络通常使用ImageNet(通常是ImageNet-1k)上训练好的模型进行初始化,使用更大的数据集(ImageNet-5k)预训练基础网络对精度的提升亦有帮助&/li&&li&超参数的调整:部分工作也发现如NMS中IoU阈值的调整(从0.3到0.5)也有利于精度的提升,但这一方面尚无最佳配置参照&/li&&/ul&&p&最后,集成(Ensemble)作为通用的手段也被应用在比赛中。&/p&&h2&&b&总结&/b&&/h2&&p&本篇文章里,我们介绍了检测模型常用的标准评测数据集和训练模型的技巧,上述内容在溯源和表述方面的不实之处也请读者评论指出。&b&从下一篇开始,我们将介绍检测领域较新的趋势,请持续关注。&/b&&/p&&h2&Reference&/h2&&ul&&li&[1]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition&/a&&/li&&li&[2]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Object Detection Networks on Convolutional Feature Maps&/a&&/li&&li&[3]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deep Residual Learning for Image Classification&/a&&/li&&li&[4]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Object Detection via a Multi-region & Semantic Segmentatio-aware CNN Model&/a&&/li&&li&[5]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Training Region-based Object Detectors with Online Hard Example Mining&/a&&/li&&li&[6]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Improving Object Detection With One Line of Code&/a&&/li&&li&[7]: &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mask R-CNN&/a&&/li&&/ul&&p&————————————————————————————————————&/p&&p&以下是&b&《干货 | 目标检测入门,看这篇就够了》&/b&的第三篇、第四篇和最终篇的直达链接:&/p&&a href=&https://zhuanlan.zhihu.com/p/?just_published=1& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-c544cae2baebd5c40f12416babb8ca3d_180x120.jpg& data-image-width=&550& data-image-height=&287& class=&internal&&格灵深瞳DeepGlint:目标检测入门(三):基础网络演进、分类与定位的权衡&/a&&a href=&https://zhuanlan.zhihu.com/p/?just_published=1& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/v2-0eef76f81e952b8bd674_180x120.jpg& data-image-width=&700& data-image-height=&400& class=&internal&&格灵深瞳DeepGlint:目标检测入门(四):特征复用、实时性&/a&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-927d20ebe423cb1aac9a063ce19a63c5_180x120.jpg& data-image-width=&1920& data-image-height=&1080& class=&internal&&格灵深瞳DeepGlint:目标检测入门最终篇:拾遗及总结&/a&&p&&/p&
关于作者:
同济大学数学系本科在读,现为格灵深瞳算法部实习生。作者个人主页:本章是《干货 | 目标检测入门,看这篇就够了》的第二篇连载。想回顾上一篇的内容,欢迎搭电梯直达:
&figure&&img src=&https://pic1.zhimg.com/v2-cfd03d930f73ed6ea2c431a204d333b3_b.jpg& data-rawwidth=&698& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&https://pic1.zhimg.com/v2-cfd03d930f73ed6ea2c431a204d333b3_r.jpg&&&/figure&&p&&/p&&p&关于作者: &a class=&member_mention& href=&https://www.zhihu.com/people/7cc12e4b4cffb5ab16acd6& data-hash=&7cc12e4b4cffb5ab16acd6& data-hovercard=&p$b$7cc12e4b4cffb5ab16acd6&&@李家丞&/a& &b&同济大学数学系&/b&本科在读,现为&b&格灵深瞳算法部实习生&/b&。&/p&&p&作者个人主页:&a href=&https://link.zhihu.com/?target=https%3A//ddlee.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&李家丞|个人主页|关于我&/a&&/p&&p&&br&&/p&&p&近年来,深度学习模型逐渐取代传统机器视觉方法而成为目标检测领域的主流算法,本系列文章将回顾早期的经典工作,并对较新的趋势做一个全景式的介绍,帮助读者对这一领域建立基本的认识。由于作者学历尚浅,水平有限,不实和不当之处也请指出和纠正,欢迎大家评论交流。&/p&&p&3.20更新:&b&格灵深瞳2018春季校招正在进行中,此次招聘共开放10多个岗位。具体可以在下面链接中收看宣讲直播回看。&/b&&/p&&a href=&https://link.zhihu.com/?target=https%3A//www.kongzhongtalk.com/detail/xjac_ywckgluvgfli& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-a4599389edaae73f826968a_ipico.jpg& data-image-width=&800& data-image-height=&800& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AI已来邀你同行,格灵深瞳2018校园招聘空中宣讲 | 空中宣讲&/a&&p&&b&&i&(一)目标检测经典模型回顾&/i&&/b&&/p&&p&&i&&b&(二)目标检测模型的评测与训练技巧&/b&&/i&&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-f44ff552a506dcc32d6f0f04c5be68e9_180x120.jpg& data-image-width=&800& data-image-height=&610& class=&internal&&格灵深瞳DeepGlint:目标检测入门(二):模型的评测与训练技巧&/a&&p&&i&&b&(三)目标检测新趋势之基础网络结构演进、分类定位的权衡&/b&&/i&&/p&&a href=&https://zhuanlan.zhihu.com/p/?just_published=1& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-c544cae2baebd5c40f12416babb8ca3d_180x120.jpg& data-image-width=&550& data-image-height=&287& class=&internal&&格灵深瞳DeepGlint:目标检测入门(三):基础网络演进、分类与定位的权衡&/a&&p&&b&&i&(四)目标检测新趋势之特征复用、实时性&/i&&/b&&/p&&a href=&https://zhuanlan.zhihu.com/p/?just_published=1& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/v2-0eef76f81e952b8bd674_180x120.jpg& data-image-width=&700& data-image-height=&400& class=&internal&&格灵深瞳DeepGlint:目标检测入门(四):特征复用、实时性&/a&&p&&b&&i&(五)目标检测新趋势拾遗&/i&&/b&&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-927d20ebe423cb1aac9a063ce19a63c5_180x120.jpg& data-image-width=&1920& data-image-height=&1080& class=&internal&&格灵深瞳DeepGlint:目标检测入门最终篇:拾遗及总结&/a&&p&——————————————————————————————————————&/p&&h2&导言:目标检测的任务表述&/h2&&p&如何从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。深度学习模型由于其强大的表示能力,加之数据量的积累和计算力的进步,成为机器视觉的热点研究方向。&/p&&p&那么,如何理解一张图片?根据后续任务的需要,有三个主要的层次。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-2aba98d7fbc96758ad38d_b.jpg& data-size=&normal& data-rawwidth=&736& data-rawheight=&152& class=&origin_image zh-lightbox-thumb& width=&736& data-original=&https://pic1.zhimg.com/v2-2aba98d7fbc96758ad38d_r.jpg&&&figcaption&图像理解的三个层次&/figcaption&&/figure&&p&一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。其中,ImageNet是最权威的评测集,每年的ILSVRC催生了大量的优秀深度网络结构,为其他任务提供了基础。在应用领域,人脸、场景的识别等都可以归为分类任务。&/p&&p&二是检测(Detection)。分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。&/p&&p&三是分割(Segmentation)。分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。&/p&&p&本系列文章关注的领域是目标检测,即图像理解的中层次。&/p&&h2&(一)目标检测经典工作回顾&/h2&&h2&本文结构&/h2&&figure&&img src=&https://pic3.zhimg.com/v2-3b773d85ce7dedaa73e7a3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&981& data-rawheight=&357& class=&origin_image zh-lightbox-thumb& width=&981& data-original=&https://pic3.zhimg.com/v2-3b773d85ce7dedaa73e7a3_r.jpg&&&/figure&&h2&两阶段(2-stage)检测模型&/h2&&p&两阶段模型因其对图片的两阶段处理得名,也称为基于区域(Region-based)的方法,我们选取R-CNN系列工作作为这一类型的代表。&/p&&h2&R-CNN: R-CNN系列的开山之作&/h2&&p&论文链接: &a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rich feature hierarchies for accurate object detection and semantic segmentation&/a&&/p&&p&本文的两大贡献:1)CNN可用于基于区域的定位和分割物体;2)监督训练样本数紧缺时,在额外的数据上预训练的模型经过fine-tuning可以取得很好的效果。第一个贡献影响了之后几乎所有2-stage方法,而第二个贡献中用分类任务(Imagenet)中训练好的模型作为基网络,在检测问题上fine-tuning的做法也在之后的工作中一直沿用。&/p&&p&传统的计算机视觉方法常用精心设计的手工特征(如SIFT, HOG)描述图像,而深度学习的方法则倡导习得特征,从图像分类任务的经验来看,CNN网络自动习得的特征取得的效果已经超出了手工设计的特征。本篇在局部区域应用卷积网络,以发挥卷积网络学习高质量特征的能力。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ec320f9a52d0dfc9ea93c61_b.jpg& data-size=&normal& data-rawwidth=&1031& data-rawheight=&355& class=&origin_image zh-lightbox-thumb& width=&1031& data-original=&https://pic3.zhimg.com/v2-ec320f9a52d0dfc9ea93c61_r.jpg&&&figcaption&R-CNN网络结构&/figcaption&&/figure&&p&R-CNN将检测抽象为两个过程,一是基于图片提出若干可能包含物体的区域(即图片的局部裁剪,被称为Region Proposal),文中使用的是Selective Search算法;二是在提出的这些区域上运行当时表现最好的分类网络(AlexNet),得到每个区域内物体的类别。&/p&&p&另外,文章中的两个做法值得注意。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-316f0ffd2d0b0fed3c206bd7616e9edd_b.jpg& data-size=&normal& data-rawwidth=&240& data-rawheight=&187& class=&content_image& width=&240&&&figcaption&IoU的计算&/figcaption&&/figure&&p&一是数据的准备。输入CNN前,我们需要根据Ground Truth对提出的Region Proposal进行标记,这里使用的指标是IoU(Intersection over Union,交并比)。IoU计算了两个区域之交的面积跟它们之并的比,描述了两个区域的重合程度。&/p&&p&文章中特别提到,IoU阈值的选择对结果影响显著,这里要谈两个threshold,一个用来识别正样本(如跟ground truth的IoU大于0.5),另一个用来标记负样本(即背景类,如IoU小于0.1),而介于两者之间的则为难例(Hard Negatives),若标为正类,则包含了过多的背景信息,反之又包含了要检测物体的特征,因而这些Proposal便被忽略掉。&/p&&p&另一点是位置坐标的回归(Bounding-Box Regression),这一过程是Region Proposal向Ground Truth调整,实现时加入了log/exp变换来使损失保持在合理的量级上,可以看做一种标准化(Normalization)操作。&/p&&h2&小结&/h2&&p&R-CNN的想法直接明了,即将检测任务转化为区域上的分类任务,是深度学习方法在检测任务上的试水。模型本身存在的问题也很多,如需要训练三个不同的模型(proposal, classification, regression)、重复计算过多导致的性能问题等。尽管如此,这篇论文的很多做法仍然广泛地影响着检测任务上的深度模型革命,后续的很多工作也都是针对改进这一工作而展开,此篇可以称得上&The First Paper&。&/p&&h2&Fast R-CNN: 共享卷积运算&/h2&&p&论文链接:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fast R-CNN&/a&&/p&&p&文章指出R-CNN耗时的原因是CNN是在每一个Proposal上单独进行的,没有共享计算,便提出将基础网络在图片整体上运行完毕后,再传入R-CNN子网络,共享了大部分计算,故有Fast之名。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-597bf75a922c054ca038fe4c2fc9655f_b.jpg& data-size=&normal& data-rawwidth=&962& data-rawheight=&384& class=&origin_image zh-lightbox-thumb& width=&962& data-original=&https://pic1.zhimg.com/v2-597bf75a922c054ca038fe4c2fc9655f_r.jpg&&&figcaption&Fast R-CNN网络结构&/figcaption&&/figure&&p&上图是Fast R-CNN的架构。图片经过feature extractor得到feature map, 同时在原图上运行Selective Search算法并将RoI(Region of Interset,实为坐标组,可与Region Proposal混用)映射到到feature map上,再对每个RoI进行RoI Pooling操作便得到等长的feature vector,将这些得到的feature vector进行正负样本的整理(保持一定的正负样本比例),分batch传入并行的R-CNN子网络,同时进行分类和回归,并将两者的损失统一起来。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e55e66c9c21136efa62beacfcb02f9ef_b.jpg& data-size=&normal& data-rawwidth=&800& data-rawheight=&600& data-thumbnail=&https://pic4.zhimg.com/v2-e55e66c9c21136efa62beacfcb02f9ef_b.jpg& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-e55e66c9c21136efa62beacfcb02f9ef_r.jpg&&&figcaption&RoI Pooling图示,来源:https://blog.deepsense.ai/region-of-interest-pooling-explained/&/figcaption&&/figure&&p&RoI Pooling 是对输入R-CNN子网络的数据进行准备的关键操作。我们得到的区域常常有不同的大小,在映射到feature map上之后,会得到不同大小的特征张量。RoI Pooling先将RoI等分成目标个数的网格,再在每个网格上进行max pooling,就得到等长的RoI feature vector。&/p&&p&&br&&/p&&p&文章最后的讨论也有一定的借鉴意义:&/p&&ul&&li&multi-loss traing相比单独训练classification确有提升&/li&&li&multi-scale相比single-scale精度略有提升,但带来的时间开销更大。一定程度上说明CNN结构可以内在地学习尺度不变性&/li&&li&在更多的数据(VOC)上训练后,精度是有进一步提升的&/li&&li&Softmax分类器比&one vs rest&型的SVM表现略好,引入了类间的竞争&/li&&li&更多的Proposal并不一定带来精度的提升&/li&&/ul&&h2&小结&/h2&&p&Fast R-CNN的这一结构正是检测任务主流2-stage方法所采用的元结构的雏形。文章将Proposal, Feature Extractor, Object Classification&Localization统一在一个整体的结构中,并通过共享卷积计算提高特征利用效率,是最有贡献的地方。&/p&&h2&Faster R-CNN: 两阶段模型的深度化&/h2&&p&论文链接:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Faster R-CNN: Towards Real Time Object Detection with Region Proposal Networks&/a&&/p&&p&Faster R-CNN是2-stage方法的奠基性工作,提出的RPN网络取代Selective Search算法使得检测任务可以由神经网络端到端地完成。粗略的讲,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷积计算的特性使得RPN引入的计算量很小,使得Faster R-CNN可以在单个GPU上以5fps的速度运行,而在精度方面达到SOTA(State of the Art,当前最佳)。&/p&&p&本文的主要贡献是提出Regional Proposal Networks,替代之前的SS算法。RPN网络将Proposal这一任务建模为二分类(是否为物体)的问题。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-35ce8d4e9f9d2cf894c508f_b.jpg& data-size=&normal& data-rawwidth=&1208& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&1208& data-original=&https://pic3.zhimg.com/v2-35ce8d4e9f9d2cf894c508f_r.jpg&&&figcaption&Faster R-CNN网络结构&/figcaption&&/figure&&p&第一步是在一个滑动窗口上生成不同大小和长宽比例的anchor box(如上图右边部分),取定IoU的阈值,按Ground Truth标定这些anchor box的正负。于是,传入RPN网络的样本数据被整理为anchor box(坐标)和每个anchor box是否有物体(二分类标签)。RPN网络将每个样本映射为一个概率值和四个坐标值,概率值反应这个anchor box有物体的概率,四个坐标值用于回归定义物体的位置。最后将二分类和坐标回归的损失统一起来,作为RPN网络的目标训练。&/p&&p&由RPN得到Region Proposal在根据概率值筛选后经过类似的标记过程,被传入R-CNN子网络,进行多分类和坐标回归,同样用多任务损失将二者的损失联合。&/p&&h2&小结&/h2&&p&Faster R-CNN的成功之处在于用RPN网络完成了检测任务的&深度化&。使用滑动窗口生成anchor box的思想也在后来的工作中越来越多地被采用(YOLO v2等)。这项工作奠定了&RPN+RCNN&的两阶段方法元结构,影响了大部分后续工作。&/p&&h2&单阶段(1-stage)检测模型&/h2&&p&单阶段模型没有中间的区域检出过程,直接从图片获得预测结果,也被成为Region-free方法。&/p&&h2&YOLO&/h2&&p&论文链接:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&You Only Look Once: Unified, Real-Time Object Detection&/a&&/p&&p&YOLO是单阶段方法的开山之作。它将检测任务表述成一个统一的、端到端的回归问题,并且以只处理一次图片同时得到位置和分类而得名。&/p&&p&YOLO的主要优点:&/p&&p&&br&&/p&&ul&&li&快。&/li&&li&全局处理使得背景错误相对少,相比基于局部(区域)的方法, 如Fast RCNN。&/li&&li&泛化性能好,在艺术作品上做检测时,YOLO表现比Fast R-CNN好。&/li&&/ul&&figure&&img src=&https://pic1.zhimg.com/v2-7eeffb8bd247c714f7b5f381b774145a_b.jpg& data-size=&normal& data-rawwidth=&1593& data-rawheight=&638& class=&origin_image zh-lightbox-thumb& width=&1593& data-original=&https://pic1.zhimg.com/v2-7eeffb8bd247c714f7b5f381b774145a_r.jpg&&&figcaption&YOLO网络结构&/figcaption&&/figure&&p&YOLO的工作流程如下:&/p&&p&1.准备数据:将图片缩放,划分为等分的网格,每个网格按跟Ground Truth的IoU分配到所要预测的样本。&/p&&p&2.卷积网络:由GoogLeNet更改而来,每个网格对每个类别预测一个条件概率值,并在网格基础上生成B个box,每个box预测五个回归值,四个表征位置,第五个表征这个box含有物体(注意不是某一类物体)的概率和位置的准确程度(由IoU表示)。测试时,分数如下计算:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e3b665a096dbd1c4ba1b5e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&533& data-rawheight=&46& class=&origin_image zh-lightbox-thumb& width=&533& data-original=&https://pic1.zhimg.com/v2-e3b665a096dbd1c4ba1b5e_r.jpg&&&/figure&&p&等式左边第一项由网格预测,后两项由每个box预测,以条件概率的方式得到每个box含有不同类别物体的分数。 因而,卷积网络共输出的预测值个数为S×S×(B×5+C),其中S为网格数,B为每个网格生成box个数,C为类别数。&/p&&p&3.后处理:使用NMS(Non-Maximum Suppression,非极大抑制)过滤得到最后的预测框&/p&&h2&损失函数的设计&/h2&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d3de934214afa4af23f2e38_b.jpg& data-size=&normal& data-rawwidth=&891& data-rawheight=&615& class=&origin_image zh-lightbox-thumb& width=&891& data-original=&https://pic4.zhimg.com/v2-d3de934214afa4af23f2e38_r.jpg&&&figcaption&YOLO的损失函数分解,来源:https://zhuanlan.zhihu.com/p/&/figcaption&&/figure&&p&损失函数被分为三部分:坐标误差、物体误差、类别误差。为了平衡类别不均衡和大小物体等带来的影响,损失函数中添加了权重并将长宽取根号。&/p&&h2&小结&/h2&&p&YOLO提出了单阶段的新思路,相比两阶段方法,其速度优势明显,实时的特性令人印象深刻。但YOLO本身也存在一些问题,如划分网格较为粗糙,每个网格生成的box个数等限制了对小尺度物体和相近物体的检测。&/p&&h2&SSD: Single Shot Multibox Detector&/h2&&p&论文链接:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SSD: Single Shot Multibox Detector&/a&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-3f5cc17b17ffccb0e2f5_b.jpg& data-size=&normal& data-rawwidth=&1110& data-rawheight=&328& class=&origin_image zh-lightbox-thumb& width=&1110& data-original=&https://pic3.zhimg.com/v2-3f5cc17b17ffccb0e2f5_r.jpg&&&figcaption&SSD网络结构&/figcaption&&/figure&&p&SSD相比YOLO有以下突出的特点:&/p&&ul&&li&多尺度的feature map:基于VGG的不同卷积段,输出feature map到回归器中。这一点试图提升小物体的检测精度。&/li&&li&更多的anchor box,每个网格点生成不同大小和长宽比例的box,并将类别预测概率基于box预测(YOLO是在网格上),得到的输出值个数为(C+4)×k×m×n,其中C为类别数,k为box个数,m×n为feature map的大小。&/li&&/ul&&h2&小结&/h2&&p&SSD是单阶段模型早期的集大成者,达到跟接近两阶段模型精度的同时,拥有比两阶段模型快一个数量级的速度。后续的单阶段模型工作大多基于SSD改进展开。&/p&&h2&检测模型基本特点&/h2&&p&最后,我们对检测模型的基本特征做一个简单的归纳。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b9035cba50015fbde5a89c044951ebe7_b.jpg& data-size=&normal& data-rawwidth=&1300& data-rawheight=&278& class=&origin_image zh-lightbox-thumb& width=&1300& data-original=&https://pic3.zhimg.com/v2-b9035cba50015fbde5a89c044951ebe7_r.jpg&&&figcaption&两阶段检测模型Pipeline,来源:https://tryolabs.com/blog//faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/&/figcaption&&/figure&&p&检测模型整体上由基础网络(Backbone Network)和检测头部(Detection Head)构成。前者作为特征提取器,给出图像不同大小、不同抽象层次的表示;后者则依据这些表示和监督信息学习类别和位置关联。检测头部负责的类别预测和位置回归两个任务常常是并行进行的,构成多任务的损失进行联合训练。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-6732b9bdad4efaf_b.jpg& data-size=&normal& data-rawwidth=&1300& data-rawheight=&511& class=&origin_image zh-lightbox-thumb& width=&1300& data-original=&https://pic3.zhimg.com/v2-6732b9bdad4efaf_r.jpg&&&figcaption&检测模型头部并行的分支,来源同上&/figcaption&&/figure&&p&相比单阶段,两阶段检测模型通常含有一个串行的头部结构,即完成前背景分类和回归后,把中间结果作为RCNN头部的输入再进行一次多分类和位置回归。这种设计带来了一些优点:&/p&&p&&br&&/p&&ul&&li&对检测任务的解构,先进行前背景的分类,再进行物体的分类,这种解构使得监督信息在不同阶段对网络参数的学习进行指导&/li&&li&RPN网络为RCNN网络提供良好的先验,并有机会整理样本的比例,减轻RCNN网络的学习负担&/li&&/ul&&p&这种设计的缺点也很明显:中间结果常常带来空间开销,而串行的方式也使得推断速度无法跟单阶段相比;级联的位置回归则会导致RCNN部分的重复计算(如两个RoI有重叠)。&/p&&p&另一方面,单阶段模型只有一次类别预测和位置回归,卷积运算的共享程度更高,拥有更快的速度和更小的内存占用。读者将会在接下来的文章中看到,两种类型的模型也在互相吸收彼此的优点,这也使得两者的界限更为模糊。&/p&&p&在下一篇中,我们将介绍检测模型的评测指标与评测数据集,并总结常用的训练和建模技巧。&/p&
关于作者:
同济大学数学系本科在读,现为格灵深瞳算法部实习生。作者个人主页: 近年来,深度学习模型逐渐取代传统机器视觉方法而成为目标检测领域的主流算法,本系列文章将回顾早期的经典工作,并对较新的趋势做一个全景式…
&figure&&img src=&https://pic1.zhimg.com/v2-1f4492ee4dbf168bdd2fab_b.jpg& data-rawwidth=&1500& data-rawheight=&654& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&https://pic1.zhimg.com/v2-1f4492ee4dbf168bdd2fab_r.jpg&&&/figure&&blockquote&来自于我的博客:&a href=&http://link.zhihu.com/?target=https%3A//www.davex.pw//overview-of-object-detection/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于深度学习的「目标检测」算法综述&/a&&/blockquote&&p&目标检测一直是计算机视觉的基础问题,在 2010 年左右就开始停滞不前了。自 2013 年一篇论文的发表,目标检测从原始的传统手工提取特征方法变成了基于卷积神经网络的特征提取,从此一发不可收拾。&/p&&p&本文将跟着历史的潮流,简要地探讨「目标检测」算法的两种思想和这些思想引申出的算法,主要涉及那些主流算法,no bells and whistles.&/p&&h2&&b&概述 Overview&/b&&/h2&&p&在深度学习正式介入之前,传统的「目标检测」方法都是 &code&区域选择&/code&、&code&提取特征&/code&、&code&分类回归&/code& 三部曲,这样就有两个难以解决的问题;其一是区域选择的策略效果差、时间复杂度高;其二是手工提取的特征鲁棒性较差。&/p&&p&云计算时代来临后,「目标检测」算法大家族主要划分为两大派系,一个是 &code&R-CNN&/code& 系两刀流,另一个则是以 &code&YOLO&/code& 为代表的一刀流派。下面分别解释一下 &code&两刀流&/code& 和 &code&一刀流&/code&。&/p&&h2&&b&两刀流&/b&&/h2&&p&顾名思义,两刀解决问题:&/p&&p&1、生成可能区域(Region Proposal) & CNN 提取特征&br&2、放入分类器分类并修正位置&/p&&p&这一流派的算法都离不开 &code&Region Proposal&/code& ,即是优点也是缺点,主要代表人物就是 &code&R-CNN&/code& 系。&/p&&h2&&b&一刀流&/b&&/h2&&p&顾名思义,一刀解决问题,直接对&b&预测的目标物体进行回归&/b&。&br&回归解决问题简单快速,但是太粗暴了,主要代表人物是 &code&YOLO&/code& 和 &code&SSD&/code& 。&/p&&hr&&p&无论 &code&两刀流&/code& 还是 &code&一刀流&/code&,他们都是在同一个天平下选取一个平衡点、或者选取一个极端—— 要么准,要么快。&/p&&p&两刀流的天平&b&主要倾向&/b&准,&br&一刀流的天平&b&主要倾向&/b&快。&/p&&p&但最后万剑归宗,大家也找到了自己的平衡,平衡点的有略微的不同。&/p&&p&接下来我们花开两朵各表一支,一朵 &code&两刀流&/code& 的前世今生,另一朵 &code&一刀流&/code& 的发展历史。&/p&&h2&&b&两刀流 R-CNN&/b&&/h2&&p&R-CNN 其实是一个很大的家族,自从 rbg 大神发表那篇论文,子孙无数、桃李满天下。在此,我们只探讨 R-CNN 直系亲属,他们的发展顺序如下:&/p&&p&&b&R-CNN -& SPP Net -& Fast R-CNN -& Faster R-CNN -& Mask R-CNN&/b&&/p&&p&其实说句良心话,最佩服的并不是 rbg 大神,而是&b&提出了 SPP Net 的以何恺明为主的作者们&/b&。&br&他们在整个家族进化的过程中,一致暗埋了一条主线:&b&充分榨干 feature maps 的价值&/b&。&/p&&h2&&b&R-CNN / 2013&/b&&/h2&&p&论文:&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rich feature hierarchies for accurate object detection and semantic segmentation&/a&&/p&&p&这篇论文,这个模型,是利用卷积神经网络来做「目标检测」的&b&开山之作&/b&,其意义深远不言而喻。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-eba6cba8f44f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1226& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&1226& data-original=&https://pic4.zhimg.com/v2-eba6cba8f44f_r.jpg&&&/figure&&p&&br&&/p&&p&&b&解决问题一、速度&/b&&br&传统的区域选择使用滑窗,每滑一个窗口检测一次,相邻窗口信息重叠高,检测速度慢。R-CNN 使用一个启发式方法(Selective search),&b&先生成候选区域再检测,降低信息冗余程度&/b&,从而提高检测速度。&/p&&p&&b&解决问题二、特征提取&/b&&br&传统的手工提取特征鲁棒性差,限于如颜色、纹理等 &code&低层次&/code&(Low level)的特征。&/p&&p&该方法将 &code&PASCAL VOC&/code& 上的检测率从 35.1% 提升到 53.7% ,提高了好几个量级。虽然比传统方法好很多,但是从现在的眼光看,只能是&b&初窥门径&/b&。&/p&&h2&&b&SPP Net / 2014&/b&&/h2&&p&论文:&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition&/a&&/p&&p&&code&R-CNN&/code& 提出后的一年,以何恺明、任少卿为首的团队提出了 &code&SPP Net&/code& ,这才是真正摸到了卷积神经网络的脉络。也不奇怪,毕竟这些人鼓捣出了 &code&ResNet&/code& 残差网络,对神经网络的理解是其他人没法比的。&/p&&p&尽管 R-CNN 效果不错,但是他还有两个硬伤:&/p&&p&&b&硬伤一、算力冗余&/b&&br&先生成候选区域,再对区域进行卷积,这里有两个问题:其一是候选区域会有一定程度的重叠,对相同区域进行重复卷积;其二是每个区域进行新的卷积需要新的存储空间。&/p&&p&何恺明等人意识到这个可以优化,于是把&b&先生成候选区域再卷积&/b&,变成了&b&先卷积后生成区域&/b&。“简单地”改变顺序,不仅减少存储量而且加快了训练速度。&/p&&p&&b&硬伤二、图片缩放&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-3b8d6d2ff3da65cc9416015_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1492& data-rawheight=&868& class=&origin_image zh-lightbox-thumb& width=&1492& data-original=&https://pic2.zhimg.com/v2-3b8d6d2ff3da65cc9416015_r.jpg&&&/figure&&p&无论是剪裁(Crop)还是缩放(Warp),在很大程度上会丢失图片原有的信息导致训练效果不好,如上图所示。直观的理解,把车剪裁成一个门,人看到这个门也不好判断整体是一辆车;把一座高塔缩放成一个胖胖的塔,人看到也没很大把握直接下结论。人都做不到,机器的难度就可想而知了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-0c0dfae71f25f5ac8f97edde_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&946& data-rawheight=&796& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&https://pic3.zhimg.com/v2-0c0dfae71f25f5ac8f97edde_r.jpg&&&/figure&&p&何恺明等人发现了这个问题,于是思索有什么办法能不对图片进行变形,将图片原汁原味地输入进去学习。&/p&&p&最后他们发现问题的根源是 &code&FC Layer&/code&(全连接层)需要确定输入维度,于是他们在输入全连接层前定义一个特殊的池化层,将输入的任意尺度 &code&feature maps&/code& 组合成特定维度的输出,这个组合可以是不同大小的拼凑,如同拼凑七巧板般。&/p&&p&举个例子,我们要输入的维度 &img src=&http://www.zhihu.com/equation?tex=64%E2%88%%88%97256+& alt=&64* & eeimg=&1&& ,那么我们可以这样组合 &img src=&http://www.zhihu.com/equation?tex=32%E2%88%%E2%88%%E2%88%%E2%88%%88%%E2%88%%E2%88%%E2%88%97256& alt=&32*256+16*256+8*256+8**256+8*256+8*256& eeimg=&1&& 。&/p&&p&&code&SPP Net&/code& 的出现是如同一道惊雷,&b&不仅减少了计算冗余,更重要的是打破了固定尺寸输入这一束缚&/b&,让后来者享受到这一缕阳光。&/p&&p&&i&注:这个时候 FCN 还没有出现,FCN 是同年 11 月发表的,SPP Net 是 4 月发表的。&/i&&/p&&h2&&b&Fast R-CNN / 2015&/b&&/h2&&p&论文:&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fast R-CNN&/a&&/p&&p&此时,我们的 rbg 大哥也按耐不住了——自己家的孩子,自己养大——于是憋出了一个大招 &code&Fast R-CNN&/code& 。取这个名字的意思就是“儿子比爸爸强”,相对于原来的 &code&Slow R-CNN&/code&,做了速度上的优化——就是快。&/p&&p&在这篇论文中,引用了 &code&SPP Net&/code& 的工作,并且致谢其第一作者何恺明的慷慨解答。&/p&&p&纵观全文,最大的建树就是&b&将原来的串行结构改成并行结构&/b&。&/p&&p&&b&改进:流水线&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-751d2d123b38f43b2f7f927a32023ae0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1560& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&1560& data-original=&https://pic1.zhimg.com/v2-751d2d123b38f43b2f7f927a32023ae0_r.jpg&&&/figure&&p&原来的 &code&R-CNN&/code& 是先对候选框区域进行分类,判断有没有物体,如果有则对 &code&Bounding Box&/code& 进行精修 &code&回归&/code& 。这是一个串联式的任务,那么势必没有并联的快,所以 rbg 就将原有结构改成并行——在分类的同时,对 &code&Bbox&/code& 进行回归。&/p&&p&这一改变将 &code&Bbox&/code& 和 &code&Clf&/code& 的 &code&loss&/code& 结合起来变成一个 &code&Loss&/code& 一起训练,并吸纳了 &code&SPP Net&/code& 的优点,最终不仅加快了预测的速度,而且提高了精度。&/p&&h2&&b&Faster R-CNN / 2015&/b&&/h2&&p&论文:&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks&/a&&/p&&p&众人拾柴火焰高,原来 &code&SPP Net&/code& 的人马和 rbg 一起研究憋大招,在 &code&rbg&/code& 和 &code&何恺明&/code& 绽放完光芒后,&code&任少卿&/code& 老哥发出了太阳般的光芒——&code&RPN&/code& 的概念让人不得不服。&/p&&p&&b&神经网络一统天下&/b&&/p&&p&在 &code&Faster R-CNN&/code& 前,我们生产候选区域都是用的一系列启发式算法,基于 &code&Low Level&/code& 特征生成区域。这样就有两个问题:&/p&&p&&b&第一个问题&/b& 是生成区域的靠谱程度随缘,而 &code&两刀流&/code& 算法正是依靠生成区域的靠谱程度——生成大量无效区域则会造成算力的浪费、少生成区域则会漏检;&/p&&p&&b&第二个问题&/b& 是生成候选区域的算法是在 CPU 上运行的,而我们的训练在 GPU 上面,跨结构交互必定会有损效率。&/p&&p&那么怎么解决这两个问题呢?&/p&&p&于是乎,任少卿等人提出了一个 &code&Region Proposal Networks&/code& 的概念,利用神经网络自己学习去生成候选区域。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0e3eac8efeb5f8aadefd0f_b.jpg& data-caption=&& data-size=&small& data-rawwidth=&1110& data-rawheight=&1306& class=&origin_image zh-lightbox-thumb& width=&1110& data-original=&https://pic4.zhimg.com/v2-0e3eac8efeb5f8aadefd0f_r.jpg&&&/figure&&p&这种生成方法同时解决了上述的两个问题,神经网络可以学到更加高层、语义、抽象的特征,生成的候选区域的可靠程度大大提高;可以从上图看出 &code&RPNs&/code& 和 &code&RoI Pooling&/code& 共用前面的卷积神经网络——将 &code&RPNs&/code& 嵌入原有网络,原有网络和 &code&RPNs&/code& 一起预测,大大地减少了参数量和预测时间。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-6b43a27ebfa2278def353a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&822& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&822& data-original=&https://pic3.zhimg.com/v2-6b43a27ebfa2278def353a_r.jpg&&&/figure&&p&在 &code&RPNs&/code& 中引入了 &code&anchor&/code& 的概念,&code&feature map&/code& 中每个滑窗位置都会生成 &code&k&/code& 个 &code&anchors&/code&,然后判断 &code&anchor&/code& 覆盖}

我要回帖

更多关于 网络摄像头怎么看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信