6 通俗学AI:始入目标检测

目录
前言
R-CNN流程
建议区域的选择
图片输入
网络训练
SVM分类
训练样本问题
检测框回归
非极值抑制
前言
今天我们换换口味,来看看目标检测方面的论文 。目标检测的任务和目标分类很类似,但多了一个定位的活 。往网络里塞一张图,网络告诉你这个图属于哪一类,那就是分类问题,如果它把图里的物体都找出来并框住,同时告诉你属于哪一类,这就是目标检测了 。
今天我们要看的论文是目标检测的鼻祖文章《Richforand》,也就是我们常说的R-CNN 。这篇论文是包括了语义分割的内容的,但我们今天的主题是目标检测,所以我们就略过这部分内容,等以后讲语义分割再回来讲吧 。
R-CNN流程
在我们现在已经有了一定目标分类的基础上,我们在初次面对目标检测任务时,可能会有这样一个想法:我们想办法找出目标在图上的位置,然后把这个位置的图片裁剪出来,塞进目标分类网络,不就行了吗 。
R-CNN的大体思路就是这样 。首先,R-CNN先使用了一个叫 的算法,在原图上找到2000个候选的框框,框住那些算法认为是物体的内容 。这样的区域就叫 ,也就是建议区域 。当然这个算法选出的这些区域大多数都是不太靠谱的,不然也不会有2000多个 。
图片来自论文
真正重要的是后面的卷积网络 。在寻找到2000多个建议区域后,作者将他们塞到了一个卷积神经网络里进行计算,这里使用的是 。这个网络我们之前讲过,在这里就发挥了作用,不记得的小伙伴可以回顾一下 。
但是当时我们使用后是输入到里进行分类的,但R-CNN是使用很多个SVM进行分类 。SVM是机器学习的内容,大家可以百度学习相关内容,这里不多赘述 。
分类完后,我们就知道这些框框里物体的类别了,但刚才也说了,这些建议区域都不太靠谱,因此我们还要对这个框进行精细的调整,然后去除重复的框框才是最后的结果 。
下面我们将对每一步进行详细的讲解 。

6  通俗学AI:始入目标检测

文章插图
建议区域的选择
我们刚才说了,这一步使用的是叫 的算法,这个算法是另外一篇论文的内容了,本篇论文里没有详说 。我搜集了一些相关的资料,咋们简单地聊聊这个算法的流程 。
首先这个算法分为两个内容,第一个内容是层次分组算法 。说人话就是先用另外一篇论文里的方法得到一些初始区域 。然后计算相邻区域之间两两的相似度,然后把这些相似度全部放到S这个容器里存着 。随后在S中找到相似度最大的,将这两个区域合二为一,将与原来两个区域有关的相似度删掉,增加新区域与领域的相似度到S中,同时把新区域加到区域集合R中,然后不断重复这个过程 。
第二个内容与上个内容的相似度计算有关( ) 。主要是根据颜色、纹理、重合度来进行计算,这里不多赘述 。
因为R-CNN的实际效果(速度与精度)都比较原始,方法也不够优雅,所以我们只需要了解一些比较重要的技术就好,无需对每个东西都细究(比如这个 算法),所以这一步看不懂可以略过,有兴趣可以找到这个算法的原文进行阅读 。
图片输入
作者选择的卷积网络就是我们之前说的 。我们记得的图片输入是固定的,但我们选出来的建议区域它不是固定大小的,那怎么办呢?这个作者就比较粗暴了,首先他给这个框周围几圈(论文里写的是16),然后把这张裁剪出来的新的图像,硬缩成网络要求的输入尺寸 。
网络训练
解决了输入问题,这里还有另一个问题,就是我们可以使用的数据集不够大(没有当初参与目标分类比赛时那么多) 。用一个小数据集去训练大容量网络很容易造成过拟合,所以我们的论文作者使用了一招惊天地泣鬼神的方法:先用大数据集预训练一遍,然后用小数据集微调一下 。如果你有用过一些网上的代码来训练自己的数据集,一般都是加载人家给你准备好的预训练权重,然后再用自己的数据集训练一下,然后就会发现效果还不错 。但如果你用自己的数据集直接重头训练,你会发现效果根本不能看 。