实际上在这里还有一个改进就是,比如说在这个 CNN 的部分,我们一般是用这个模型直接去提这个 4096 位的特征。这样的话就会导致一个问题,就是说你的模型是在这个上面训练的,但是应用在这个检测的里面,可能我的数据跟你原始数据的分布是有一定差异的,它会把这个模型拿过来,在我的检测数据上面进行一些微调。微调的意思就是说,比如这里分类一般是 1000 类,我把这 1000 类,这个检测只有 21 类的话,把这个全链接层换掉,把这个网络拿到我的数据下面训练一下,会带来很大的分类效果的提升。最后综合这三步,RCNN 相对于传统的目标检测的方法效率、速度和精度上都有了特别大的提升。下面的工作基本上都是针对这三步分别进行改进。 FastRCNN FastRCNN 部分,刚才在目标检测的后两步,要针对每个区域先提取特征,然后再分类,FastRCNN 就是想把这两步融合起来作为一步。这里就提出来 ROI 的方法,其实就是刚才的这个候选时序。第二步就是设计了这一部分,实现了一个 End to End 的训练。这个当中一个核心的 ROI 有一个解释,这张图片通过我的一些卷积层,比如任何一个网络,我会得到一个 Feature Map,这是 N×W,相当于一般的卷积神经网络最后的卷积层。针对我下面这个候选区域,我会把我的候选区域分为一些块,比如说常用的我会分成 7×7 的一共 49 个,分成 49 个之后,我会把这个区域映射到对应的 Feature Map 这个区域当中。这里有一个特殊的方法,一般的神经网络有四个值我取一个最大的。这里是针对这个区域,比如左上角的区域是取一个值,针对大的或者小的输入,都会生成一个特征向量,这样的话就会解决这个问题,虽然我的候选区域大小不同,但是我最后得到的特征维数是一样的,这样的话就可以做一个批处理。最后通过这里有一个分类的损失和合规的损失,就可以分配到这个序列。(附该结构的 Github 代码地址:https://github.com/rbgirshick/fast-rcnn) FasterRCNN FastRCNN 解决了刚才这三步当中的一步,还有一个部分没有解决,要去提这个候选框,这个是非常耗时的。FasterRCNN 就解决这个问题,看能不能通过深度学习直接提出这些候选框。这里有一个非常好的设计是 Anchors,比如刚才我通过一张图得到一个 Feature Map 之后,比如这个是 H×W 的话,那么我对于这个 Feature Map 上面,我认为这个点会默认的存在一些光。在 FasterRCNN 当中,我把这个原图做了一个可视化,比如我默认这个点大概存在 9 个不同的框,这个框我设计完之后就可以直接从图片里得到这些框,也会针对每一个框输出。比如你默认设置一个 K 框的话,会默认得到一个分类的框,还有一个是坐标 4。这里只是分类物体,就相当于解决了刚才的提取框,哪些为了可能存在物体。通过 Region Proposal Network,用一个简单的网络可以达到每秒 14 帧的处理速度。当然这里面有很多训练的细节,大家如果感兴趣的话可以看一看。 (责任编辑:本港台直播) |