目标检测需要获取图片中所有目标的位置及其类别,对于图2-1 中的 3 张图而言,当图片中只有一个目标时,“regression head”预测 4 个值,当图片中有 3 个目标时,“regression head”预测 12 个值,那么当图片中有多个目标时,“regression head”要预测多少个值呢?
这时根据读者已经学过的一些知识,可能会尝试用滑窗的方法来解决,如图2-2所示。但是,这里有一个问题,我们需要设计大量的不同尺度和长宽比的“滑窗”使它们通过CNN,然而这个计算量是非常巨大的。有没有什么方法能使得我们快速定位到目标的潜在区域,从而减少大量不必要的计算呢?
学者们在这个方向做了很多研究,比较有名的是selective search 方法,具体方法这里不做详细说明,感兴趣的读者可以看关于selective search 的论文。大家只要知道这是一种从图片中选出潜在物体候选框(Regions of Interest,ROI)的方法即可。有了获取ROI 的方法,接下来就可以通过分类和合并的方法来获取最终的目标检测结果。基于这个思路有了下面的R-CNN 方法。
R-CNN
下面介绍R-CNN[1] 的训练过程,整体训练流程如图2-3 所示:
图2-3 R-CNN 训练过程下面是所有检测问题都会用到的一块代码:IOU 的计算。
def bboxIOU (bboxA, bboxB):
A_xmin = bboxA[0]
A_ymin = bboxA[1]
A_xma