论文阅读:RCNN[Rich feature hierarchies for accurate object detection and semantic segmentation]

来源:互联网 发布:社会化新媒体矩阵 编辑:程序博客网 时间:2024/06/05 15:00
  • 文章的突出点
    • 可以利用大容量(high capacity)的卷积神经网络去定位分割物体
    • 当我们训练数据很少的时候,我们可以使用迁移学习的方法来fine-tuning现成的网络
  • 文章的重点当然是我们怎么去定位一个物体,在这里,我们以人脸识别为例,在一张图片中检测出人脸。
    • 数据集:FDDB人脸检测库FDDB
    • 流程:
      • 从一张图像中选取许多个bounding box,文中说明了使用selective search 的方法去选择bounding box。
      • 针对训练数据的bounding box,我们可以利用该图像的annotation data去给每一个图像计算一个IoU值,这个值就是我们该bounding box的得分。
      • 我们可以设置一个阈值,如果bounding box的得分大于该阈值,则为face,否者该bounding box为background。这样我们就有了label,就可以利用VGG16去对他进行分类。
      • 将上述得到训练集的bounding box作为训练集,去微调我们的VGG16网络,在这里我是固定的卷积层的参数,只是训练了全连接层的参数。
      • 训练好分类模型以后,我们怎么去检测呢?
      • 首先我们需要提取出所有的训练集,怎么提取呢?我们计算训练集的所有bounding box的全连接层输出,即就是一个bounding box对应一个4096维度的特征,由于我计算GPU显存不够,我就以一个batch的数组作为我的训练集。batch的组成:128个,64个正样本,64个人负样本组成。
      • 我们同样将测试图像的bounding box提取出来
      • 然后计算出每一个bouning box的全连接层输出,作为该bounding box的特征,即就是4096维度的一个特征。
      • 然后我们针对每一个bounding box用SVM去做回归运算,算出每一个bounding box的得分。
      • 然后我们再指定一个阈值,得分大于该阈值的则会face,否则会background
      • 针对所有预测为face的bounding box,我们再利用非最大抑制(non-maximum suppression)的方法去合并、删除冗余的bounding box。
      • 最后得到的便是我们检测的结果。
      • 下图为例:左边的是输入,中间的未进行非最大抑制的结果,右边是进行非最大抑制的结果。
        image
        image
      • 下面是我们训练的一个结果,我们将FDDB中的两折作为我们微调的数据集,一折作为验证集。Batch组成:[100:60negative, 40positive]
        image
  • 其中涉及的知识:

    • selective search:这是一种Region proposals的方法
      • 具体的方法没有研究,有兴趣的话,可以阅读一下这篇论文。我感觉大意就是,随机出来一些框,然后按照纹理特征,将一些框框合并。
      • 实现:我直接调用Github上一位大神写的库,地址如下:selective search
    • IoU:根据字面意思理解,I代表的是交集,U代表的是并集,o在这里代表的是除法。
      • 两个矩阵的IoU值代表的就是两个矩阵的交集面积处于两个矩阵并集之后的面积。下图进行了形象的描述:
      • image
      • 之前还看到过另一种定义的方式:size(A交B)/min(size(A), size(B)),我们可以通过实验来选择一种合适的,在这里我选择的是第一种。
    • 非最大抑制(non-maximum suppression):总体来说就是将不同的框框合并。
      • 具体算法流程如下:
        • 输入:N个矩阵R1..RN,N个得分S1..Sn
        • 算法流程:
          • 按照得分从高到低将N个矩阵排序,假设排序好的最高得分的是R1,并且得分依次递减,Rn的得分最低。
          • 从前往后找到第一个未被确定的矩阵x
          • 从该位置往后遍历,计算每一个矩阵y与矩阵x的IoU值,如果该值大于阈值,则删除矩阵y,否则继续该步骤。直到遍历完成整个矩阵集合。
          • 重复步骤2,直到集合中的所有元素都已经确定。
        • 输出:确定的m个矩阵
      • 效果如下图所示,左边的是未进行非最大抑制的结果,右边是进行非最大抑制的结果。
      • image
  • 本次实验代码:Upcoder/FaceDetection

  • 欢迎大家mark,有问题一起探讨。
阅读全文
0 0
原创粉丝点击