• AI大视觉(一) | RCNN系列


     本文来自公众号“AI大道理”

    目标检测不仅要用算法判断图片中是不是一只鱼,还要在图片中标记出鱼的位置,用边框把鱼框起来,这就是目标检测问题。

    其中“定位”的意思是判断鱼在图片中的具体位置。


    ​滑动窗口分类法(原始)

    (AI大视觉:撒小渔网,一个小渔网从最旁边的地方撒下去,看有没有鱼,然后移动该渔网继续捕鱼)

    首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。

    每次滑动时对当前窗口执行分类器(分类器是事先训练好的)。

    如果当前窗口得到较高的分类概率,则认为检测到了物体。

    对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。

    最终,经过NMS筛选后获得检测到的物体。

    滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。

    把检测的任务当做是遍历性的分类任务。

    对边框的区域进行二分类:属于鱼或者不属于鱼。

    这样不断地滑动,就是遍历性地分类。

    接下来要遍历框的大小:因为刚才是预设一个框的大小,但鱼有大有小,还得遍历框的大小。

    遍历得越精确,检测器的精度就越高。

    所以这也就带来一个问题就是:检测的耗时非常大。

    分类器的训练:本质上还是训练一个二分类器。这个二分类器的输入是一个框的内容,输出是(前景/背景)。

    ​RCNN

    那么有必要傻傻的逐一滑动吗?

    (AI大视觉:可以用选择性搜索算法提前判断哪些地方可能有鱼(候选区域),然后向这个地方撒一个渔网,看有没有鱼,然后移动到下一个可能的地方继续撒一个渔网捕鱼)

    (打叉的地方不是候选区域就不用判断了)

    这就是R-CNN(全称Regions with CNN features)的思想。

    RCNN选取了2000个候选区域,预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断。

    Region Proposal(候选区域),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率。

    过程:候选框-->CNN-->得到每个候选框的特征-->分类+回归

    RCNN算法分为4个步骤

    • 一张图像生成1K~2K个候选区域

    • 对每个候选区域,使用深度网络提取特征

    • 特征送入每一类的SVM 分类器,判别是否属于该类

    • 使用回归器精细修正候选框位置

    候选区域生成:

    选择性搜索。

    使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。

    基本思路如下:

    使用一种过分割手段,将图像分割成小区域,查看现有小区域,合并可能性最高的两个区域。

    重复直到整张图像合并成一个区域位置,输出所有曾经存在过的区域,所谓候选区域。

    候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

    ​Fast RCNN

    有必要将每个区域都输入CNN进行特征提取和进行判断吗?

    (AI大视觉:可以用选择性搜索算法提前判断哪些地方可能有鱼(候选区域),然后向这些地方一起撒很多渔网,看每个渔网里有没有鱼)

    RCNN缺点:由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。

    Fast RCNN解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征。

    Fast RCNN相对于RCNN的提速原因就在于:不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。

    Fast RCNN算法分为5个步骤

    • 在图像中确定约1000-2000个候选框 (使用选择性搜索)

    • 对整张图片输进CNN,得到feature map

    • 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层

    • 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 

    • 对于属于某一特征的候选框,用回归器进一步调整其位置

    ​Faster RCNN

    选择性搜索算法生成候选区域太慢了,有什么方法可以改善吗?

    (AI大视觉:可以用神经网络算法学习哪些地方可能有鱼(候选区域),然后向这些地方一起撒很多渔网,看每个渔网里有没有鱼)

    Faster RCNN在结构上将特征抽取、region proposal提取, bbox regression,分类都整合到了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

    加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了。

    做这样的任务的神经网络叫做Region Proposal Network(RPN)。

    具体做法:
      • 将RPN放在最后一个卷积层的后面
      • RPN直接训练得到候选区域

    Faster RCNN算法分为4个步骤

    • 对整张图片输进CNN,得到feature map

    • 将feature map输入到RPN,得到候选框的特征信息

    •  对候选框中提取出的特征,使用分类器判别是否属于一个特定类 

    • 对于属于某一特征的候选框,用回归器进一步调整其位置

    总结

    RCNN系列属于候选区域/窗 + 深度学习分类的两步走方法。

    即使是该系列最好的模型还是无法达到实时检测目标的效果,获取region proposal, 再对每个proposal分类计算量还是较大。

    灵魂的拷问:两步走无法再进一步了,那能否一步到位?

    YOLO,you only look once,就是一步到位的算法。

    它去掉了获得候选区域的这一步。

    那它是怎么去掉的呢?去掉后性能又会有怎么样的影响呢?


      

     ——————

    浅谈则止,细致入微AI大道理

    扫描下方“AI大道理”,选择“关注”公众号

    —————————————————————

    ​     

    —————————————————————

    投稿吧   | 留言吧

    萍水相逢逢萍水,浮萍之水水浮萍!
  • 相关阅读:
    InfluxDB 安装使用
    Jenkins 覆盖率插件Cobertura 使用
    sonarqube的安装部署以及集成jenkins
    vscode md样式自定义
    maven配置JaCoCo
    jenkins 安装
    Maven 构建报依赖jar下载失败
    Telegraf 简单使用
    Python 生成当前项目依赖包 requirements
    面试内容
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/14673378.html
Copyright © 2020-2023  润新知