Look-ahead before you leap: end-to-end active recognition by forecasting the effect of motion 讲解

版权声明:本文为博主原创文章,未经博主允许不得转载,否则将通知维权骑士维护自己的权益。 https://blog.csdn.net/c602273091/article/details/78918015

我看了一下,基本上没有什么资料对这篇文章【1】进行描述【2】,那我就试着讲一讲这个东西,尽量试着把各个模块搞清楚。这玩意涉及CNN,RNN,RL这些东西,确实需要不少积淀才能搞清楚。

转载请注明出处: http://blog.csdn.net/c602273091/article/details/78918015

Introduction

该论文主要解决的是给定了initial view,如何调整摄像头的位置,使得object recognition或者是scene recognition更加准确。这就是所谓的active vision(主动视觉)。另外,还提出了一个叫做look-ahead的东西,就是在active vision中加入一个可以预测执行某个action之后看到的东西。

做这个东西是因为目前计算机视觉的算法,更多偏向于one-shot recognition,但是很多时候,一副图片能够有效表达这些信息么?答案是不能,比如下面这幅图片,俯视图无法让我们分辨出这具体是神马。
这里写图片描述

那么如果是人的话会怎么样呢?会低头看看,然后就结合之前的信息就更容易知道这个东西是啥。那么到了计算机视觉这里,active vision就是输入当前图片,你觉得不行,然后输出action,调转camera的pose来获得新的状态,把新的状态又加入之前的history做融合。那么从当前的图片到action这个动作,就是主动的行为,主动去获取更有利于目标识别的信息。

一般来说,active recognition的框架如下:perception,action selection,evidence fusion。
这里写图片描述

这里的perception就是对单幅的图片的识别,可以用一个CNN实现。Action Selection就是根据当前的状态,输出action,得到那个action是比较合理的。这个东西使用文中使用了神经网络加RL来实现。evidence fusion就是把多个perception的结果进行融合,得到更为准确的结果,文中使用了RNN。

把整个结构展开就是:十分明显,总的架构是RNN。
这里写图片描述

一共是有五个部分:
Perception:获取图片(输入为pose和camera)
这里写图片描述

Aggregator:把之前的(比如前一帧)和当前的图片进行evidence fusion,提取特征。
这里写图片描述

Look-ahead:比如你猜测它是神马,通过action之后,他应该是怎么样的,那么在时刻t的ground truth和t-1的prediction就会有一个error,一个loss的分布。那么通过error的比较也对后期做recognition提供了帮助。(纯脑补)
这里写图片描述

Actor:就是当前什么状态,根据融合的feature,应该进行怎么样的action。
这里写图片描述

Classifier:在如今的aggregator的信息获取下,决策属于哪一个object。
这里写图片描述

以上解读更多的是脑补,具体的需要我进行进一步的研究。

Details and Question

settings

在在T个时间戳都可以进行最后的识别X,每个时间戳recognition system会发送指令给motor,来改变它的pose,但是这个pose是改变是离散的,当然,这样就更简单了。最开始的pose设定为一个随机值,反正也是建立一个相对坐标系,无所谓。

每次更新之后的相机的pose就是:
这里写图片描述

system architecture

从上面的图可以看出,其实最基本的架构是有四个Module:ACTOR,SENSOR,AGGREGATOR,CLASSIFIER,它们的weight用 Wa , Ws , Wr , Wc

在时间戳t,ACTOR会发出一个motor command mt 给motor,pose就会改变成:
pt=pt1+mt 。然后ACTOR把 mt 传给SENSOR,SENSOR(摄像头)同时接收到了新的图片 xt ,由SENSOR这么模块就会产生这个单个的图片和command产生的feature vector: st=SENSOR(xt,mt) 。然后SENSOR产生的feature又送入了AGGREGATOR,AGGREGATOR会把时间T以内的所有的 st 进行一个evidence fusion,得到AGGREGATOR的feature vector,就是 at=AGGREGATOR(s1,...,st) . 然后这个aggregator feature会送到两个地方,一个是ACTOR,得到新的motion command: mt+1=ACTOR(at) . 在时间T之后, at 就被送到CLASSIFIER进行识别:
这里写图片描述
得到的就是C维的不同object的一个probability。

在这些模块中,ACTOR是一个标准的神经网络加上RL,产生了一个概率密度函数 π(mt) 来判断采用什么motion,AGGREGATOR是一个RNN,CLASSIFFIER是一个全连接层加log-softmax,SENSOR有分开的神经网络对 xt,mt 进行,产生per-instance view feature。

在训练的时候,四个模块是一起训练的(实际上还包括下一节要介绍的look-ahead,那就是5个) label就是时间T,W的更新涉及了标准的BP和RL的梯度计算。其中CLASSIFIER、AGGREGATOR、SENSOR这三个可以采用BP的梯度下降方法进行W更新,使用的是Softmax classification loss。ACTOR采用的是RL的梯度求导。(我觉得论文中更新 Ws,Wr 变成了RL的梯度更新和CNN的更新,两个都需要)ACTOR模块用POMDP进行拟合,优化的是policy。Reward function就是如果分类正确,award就是1,反之就是0。这里的reward function做了一些变化:
这里写图片描述

这里写图片描述

ACTOR的下降梯度会对SENSOR有影响,SENSOR的下降梯度对AGGREGATOR有影响,AGGREGATOR对CLASSIFIER有影响。

梯度计算如下:
这里写图片描述

权值更新如下:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

look-ahead module

预测motion会对下一个的观测有什么影响,主要是对AGGREGATOR的影响,这里不是用了multiple view geometry,是给AGGREGATOR进行一个类似于“auto-encoder”,这篇文章为什么要用这个是基于能够预测下一个motion和能够选择optimal motion是紧密联系的。在文中,提出了一个LOOKAHEAD模块,其实不算是预测,因为用的数据都是上一帧的,并且ground truth就是当前时刻的aggregator feature。在look-ahead模块中的预测:
这里写图片描述

loss function就是预测的aggregator feature与实际feature vector之间的distance,可以计算为:
这里写图片描述

使用的是consine distance的算法。所以,在这个模块中,会生成一个新的weight用来更新其它模块(AGGREGATOR和SENSOR)的weight。
这里写图片描述

所以SENSOR和AGGREGATOR的weight更新为:
这里写图片描述

在Suppliment Material中对于整个流程进行了描述:3D 物体用X表示,然后通过对于计算机pose和物体X进行映射得到2维的图片P(X, p⃗  )。当前位置的proprioception function f( p⃗  ),由camera pose计算出的相对的pose。 ŷ  是对物体X的预测。
这里写图片描述

整篇论文的精髓在于下面整个end-to-end的网络:具体的描述不在这里展开,还是比较清晰的。
这里写图片描述

参考链接:
【1】论文地址: http://vision.cs.utexas.edu/projects/lookahead_active/lookahead_active_eccv16.pdf
【2】参考博客: http://blog.csdn.net/xizero00/article/details/51386629

猜你喜欢

转载自blog.csdn.net/c602273091/article/details/78918015