来源:Texas 大学

Abstract

 主要提出了一个通过移动摄像机(控制机械臂或者机器人运动)来转换观测的视角,从而进行主动目标识别的方法。整个模型是端到端的。

Introduction


 第一个是物体识别(Object Recognition):像上面的图片所示,从俯视来看很难分辨这个具体是什么东西,转换一个视角就能发现这是一个杯子或者平底锅。

 第二个是场景识别(Scene Recognition):像上面的图片所展示,如果没有找到一个好的角度,无法识别出这个场景是什么,转换到右边的图片后才知道这个是篮球场。

 本文主要做的任务就是这两个,移动摄像机找到一个比较好的识别物体的角度。

Related Work

 本文主要范畴是Active Vision
 Attention机制:Recurrent models of visual attention

Approach

Setting


 摄像机的位置(camera pose)用一个二维向量 p p p来表示,两个维度分别表示俯仰角和方位角。
 在系统迭代T步后,输出系统识别物体的类别。

 每一步执行如下:

  • 系统输出电机控制命令 m t m_t mt​,如”俯仰角提高20°,方位角提高10°” , m t m_t mt​是从一串预先定义的、可行的相机动作中取出,记作M。在 t = 1 t=1 t=1时刻,初始位置 p 0 p_0 p0​被设置为一个随机值。
  • 在t时刻,相机位于 p t p_t pt​,识别目标为 X X X,系统从当前视角得到图片 x t = P ( X , p t ) x_t=P(X,p_t) xt​=P(X,pt​),函数 P P P是一个投影函数。通过上一次的电机指令和上一时刻的位置得到本时刻的位置,也就是: p t = p t − 1 + m t p_t=p_{t-1}+m_t pt​=pt−1​+mt​。

 最后时刻,也就是 t = T t=T t=T时,系统输出对物体 X X X的预测标签 y ^ \hat{y} y^​。

Active Recognition System Architecture

 整个系统模型基于Google Deep Mind的模型RAM(原文),采用 Attention机制+RNN。
 系统包括四个模块:

  1. ACTOR:输入AGGREGATOR的输出,产生控制指令 m t m_t mt​。也就是 m t + 1 m_{t+1} mt+1​ = ACTOR( a t a_t at​)。
  2. SENSOR:产生 m t m_t mt​后位置更新—— p t p_t pt​ = p t − 1 p_{t-1} pt−1​+ m t m_t mt​,然后从新的位置得到2D的图片 x t x_t xt​。 x t x_t xt​和 m t m_t mt​一起输入到SENSOR。然后SENSOR输出 s t s_t st​=SENSOR( x t x_t xt​, m t m_t mt​)。
  3. AGGREGATOR:上面SENSOR的输出这一步输入到AGGREGATOR,这里是对过去所有数据的累计,也就是 a t a_t at​=AGGREGATOR( s 1 s_1 s1​,…, s t s_t st​)。然后这里的输出再输入到ACTOR里产生控制指令
  4. CLASSIFIER:在上面的模块执行T步之后,把AGGREGATOR的输出 a t a_t at​输入到CLASSIFIER里,得到分类的结果,也就是 y ^ ( W , X ) \hat{y}(W,X) y^​(W,X)=CLASSIFIER( a t a_t at​),其中 W = [ W a , W s , W r , W c ] W=[W_a,W_s,W_r,W_c] W=[Wa​,Ws​,Wr​,Wc​]是网络里可以学习的参数。

 AGGREGATOR是一个RNN,CLASSIFIER是一个全连接隐藏层+softmax。
 前向传播算法流程如下:

 整个系统图例:

 拆分来看

 上面是整个系统的鸟瞰图

 把下面具体的系统结构图拆分来看:

  1. Actor
     如上图所示,输入为t-1时刻的AGGREGATOR的输出 a t − 1 a_{t-1} at−1​和t-1时刻的位置 p t − 1 p_{t-1} pt−1​,Linear(256,35)表示把输入长度为256的向量转换为长度为35的输出。Clamp是一个截断算子,对输入设定上限和下限,把在范围之外的设定为上限或下限,其余不变。也就是:
      | min, if x_i < min
y_i = | x_i, if min <= x_i <= max| max, if x_i > max

譬如说在torch包里有方法:

torch.clamp(input,min,max,out=None)

以此为例:

a=torch.randint(low=0,high=10,size=(10,1))
print(a)
a=torch.clamp(a,3,9)
print(a)

输出如下:

tensor([[9.],[3.],[0.],[4.],[4.],[2.],[4.],[1.],[2.],[9.]])
tensor([[9.],[3.],[3.],[4.],[4.],[3.],[4.],[3.],[3.],[9.]])

 也就是把向量的值给限定在一定范围内了。

 再回到Actor模块,图片再贴一下
 看到这里红色的层,也就是Sampler,这一层把多项式概率分布函数的权值作为输入,然后从分布中随机抽样作为输出(注意这层不能用方向传播,通过REINFORCE方法来对分类误差进行训练而不是随机梯度下降SGD)。
 对于这里的L1 Normalization,概念如下:假设一副图像表示为Y=[ x 1 , x 2 , x 3 , x 4 , x 5 x_1,x_2,x_3,x_4,x_5 x1​,x2​,x3​,x4​,x5​],那么L1-Normalization的结果为
Y i = x i / ∑ i = 1 5 x i Y_i = x_i/\sum_{i=1}^5x_i Yi​=xi​/i=1∑5​xi​
 而L2 Normalization的方法为:
Y i = x i / ∑ i = 1 5 x i 2 Y_i = x_i/\sum_{i=1}^5x_i^2 Yi​=xi​/i=1∑5​xi2​

  1. 对于SENSOR模块:
    可以看到SENSOR是一个CNN的结构,用的是GoogleNet,在对SUN数据集进行训练时不需要随机丢弃。

  2. AGGREGATOR

    AGGREGATOR是RNN的结构,Delay层把上一次的输出暂存。

 对于算法的细节提供在supplyment里

Training

 训练时把整个网络的权重W一起训练,训练的目的是最大化最后输出的分类精度。
 CLASSIFIER、AGGREGATOR、SENSOR可以通过softmax分类损失进行反向传播训练,ACTOR通过REINFORCE训练。REINFORCE目的是为了学习策略 π ( m t ∣ a t − 1 , W ) π(m_t|a_{t-1},W) π(mt​∣at−1​,W)。对于产生更高回报的指令 m m m,概率 π ( m ) π(m) π(m)的权重就相应升高。对于奖励函数的规定:如果类别 y ^ \hat{y} y^​分类正确,那么 R c ( y ^ ) = 1 R_c{(\hat{y})}=1 Rc​(y^​)=1,如果分类错误为0。
  W ∖ c W_{\setminus c} W∖c​表示 [ W a , W s , W r ] [W_a,W_s,W_r] [Wa​,Ws​,Wr​],也就是整体的权值 W W W排除 W c W_c Wc​。同样, W ∖ a W_{\setminus a} W∖a​表示 [ W c , W s , W r ] [W_c,W_s,W_r] [Wc​,Ws​,Wr​],梯度更新公式如下:
Δ W ∖ c R L = ∑ i = 1 N ∑ t = 1 T ▽ W ∖ c l o g π ( m t i ∣ a t − 1 i ; W ∖ c ) R i ΔW_{\setminus c}^{RL} = \sum_{i=1}^N \sum_{t=1}^T ▽_{W_{\setminus c}}logπ(m_t^i|a_{t-1}^i;W_{\setminus c})R^i ΔW∖cRL​=i=1∑N​t=1∑T​▽W∖c​​logπ(mti​∣at−1i​;W∖c​)Ri

Δ W ∖ a S M = − ∑ i = 1 N ▽ W ∖ a L s o f t m a x ( y ^ i ( W , X ) , y i ) ΔW_{\setminus a}^{SM} = -\sum_{i=1}^N ▽_{W_{\setminus a}} L_{softmax}(\hat{y}^i(W,X),y^i) ΔW∖aSM​=−i=1∑N​▽W∖a​​Lsoftmax​(y^​i(W,X),yi)
 i代表第i个训练样本。最后的权值更新为: Δ W a = Δ W a R L , ΔW_a = ΔW_a^{RL}, ΔWa​=ΔWaRL​, Δ W s = Δ W s R L + Δ W s S M , Δ W r = Δ W r R L + Δ W r S M , Δ W c = Δ W c R L + Δ W c S M ΔW_s = ΔW_s^{RL}+ΔW_s^{SM},ΔW_r = ΔW_r^{RL}+ΔW_r^{SM},ΔW_c = ΔW_c^{RL}+ΔW_c^{SM} ΔWs​=ΔWsRL​+ΔWsSM​,ΔWr​=ΔWrRL​+ΔWrSM​,ΔWc​=ΔWcRL​+ΔWcSM​
\

Look-Ahead: Predicting the Effects of Motions

 我们假设预测下一个视角的能力和选择最佳运动的能力紧密相关。我们的想法是,从视图预测学到的经验对主动物体识别有帮助。 因此,我们提出了一个统一方法来同时学习视图转换和动作选择策略,这个模块叫LOOKAHEAD。LOOKAHEAD模块输入 a t − 1 和 m t − 1 a_{t-1}和m_{t-1} at−1​和mt−1​,输出下一时刻对AGGREGATOR的输出 a t a_t at​的估计 a ^ t \hat{a}_t a^t​,计算估计值和真实值的差距 d ( a ^ t , a t ∣ a t − 1 , m t − 1 ) d(\hat{a}_t,a_t | a_{t-1},m_{t-1}) d(a^t​,at​∣at−1​,mt−1​),通过cosine计算误差。这个损失位系统提供了第三个权值的训练梯度 Δ W ∖ c a L A ΔW_{\setminus ca}^{LA} ΔW∖caLA​,通过AGGREGATOR和SENSOR进行反向传播:
Δ W ∖ c a L A = ∑ i = 1 N ∑ t = 2 T ▽ W ∖ c a d ( a ^ t , a t ∣ a t − 1 , m t − 1 ) ΔW_{\setminus ca}^{LA} = \sum_{i=1}^N \sum_{t=2}^T ▽_{W_{\setminus ca}}d(\hat{a}_t,a_t|a_{t-1},m_{t-1}) ΔW∖caLA​=i=1∑N​t=2∑T​▽W∖ca​​d(a^t​,at​∣at−1​,mt−1​)
 现在整个系统的权重 W W W包括了Look-ahead模块的权重 W l W_l Wl​,同时,LA表示look-ahead。look-ahead模块的权值只通过上面的损失来训练,所以 Δ W = Δ W l L A ΔW=ΔW_l^{LA} ΔW=ΔWlLA​。
SENSOR和AGGREGATOR的权值训练公式也需要更新: Δ W s = Δ W s R L + Δ W s S M + λ Δ W s L A , Δ W r = Δ W r R L + Δ W r S M + λ Δ W r L A ΔW_s = ΔW_s^{RL}+ΔW_s^{SM}+λΔW_s^{LA},ΔW_r = ΔW_r^{RL}+ΔW_r^{SM}+λΔW_r^{LA} ΔWs​=ΔWsRL​+ΔWsSM​+λΔWsLA​,ΔWr​=ΔWrRL​+ΔWrSM​+λΔWrLA​。λ是一个超参数,用来控制核心网络受到look-ahead模块误差损失影响的程度。

Experiments

Datasets and Baselines

 在SUN360GERMS上进行测试

 SUN360是一个带标签的3D场景数据集,包括室内和室外。数据集里的每个全景图代表了一个3-D场景实例,通过转动摄像头实现”移动“,如下图所示。
 在本次实验中,机器人视角为45°,我们把俯仰角和方位角的转动都均分为12份,每次转动30°(30°×12=360°)。从一张1024×2048的全景图开始,视图输入为224×224的图像。设置T=5。GoogleNet特征图从倒数第二层输出。在每一步,agent可以选择移动到一个以当前位置为中心的5×7的viewpoint。

 第二个训练在GEMRS上进行

Results

Look-Ahead Before You Leap: End-to-End Active Recognition by Forecasting the Effect of Motion相关推荐

  1. leap smear是什么

    用来解决润秒突变时可能会造成的系统运行异常.对时间同步也有一定参考意义. 原文:https://googleblog.blogspot.com/2011/09/time-technology-and- ...

  2. ECCV 2018 完整论文集 -- List 下载链接

    下文列表为ECCV2018官网得到了今年接收论文列表,共779篇: 下文为ECCV2018的全部接收论文汇总 Oral: Convolutional Networks with Adaptive Co ...

  3. 高级口译 WordList2

    Jakarta 雅加达 last leg of his current southeast Asian tour 此行的最后一占 与...进行了会谈 held talks with counterpa ...

  4. 全球首个Magic Leap One体验:吓到你不敢进房间

    来源:智东西 概要:业内备受关注的AR技术公司Magic Leap,在获得19亿美元融资历经七年之后,终于放出其第一款头盔产品Magic Leap One,很快在科技圈.VR圈引起刷屏式关注. 昨夜, ...

  5. 吊打Magic Leap,微软HoloLens 2不只为炫技

    近几日网上关于HoloLens 2的话题颇多.Infinite Retina联合创始人,拥有40多万关注者的Robert Scoble发推写道,HoloLens 2一出,Magic Leap就没那么& ...

  6. 新产品扑朔迷离,Magic Leap又跑去收购3D扫描公司

    Magic Leap收购Dacuda的3D扫描资产,很可能是为了解决其产品的位置追踪问题. 对于神秘的AR公司Magic Leap来说,他们的一举一动都会成为科技圈的头条,上周被外媒曝出产品原型机,不 ...

  7. 终于要揭开神秘面纱?Magic Leap将要展示产品

    Magic Leap准备下周召开董事会,并且会在会议上展示Magic Leap的原型机 "PEQ ". 自打去年年底被爆出产品无法小型化的问题之后,Magic Leap沉寂了一段时 ...

  8. 维塔与 Magic Leap 的MR游戏发布概念片

    (52VR重新整理了原译文并进行了润饰编译) 在游戏方面,Magic Leap 可谓是最为壁垒森严的世界之一.除了知道这涉及混合现实技术,以及<雪崩>作者尼尔·尼尔·斯蒂芬森等大神加盟之外 ...

  9. 使用Leap Motion Orion开发酷炫的手势识别VR/AR应用

    Leap Motion Orien支持Oculus和HTC Vive开发,当然对Unity的支持显然是必须的. 不过前提是: 1.Windows 7 64位或者windows 10 2.Leap Mo ...

最新文章

  1. lstm 文本纠错_中文文本纠错算法错别字纠正的二三事
  2. javascript 注意事项
  3. 《大道至简》第二章 读后感
  4. 第 36 章 RRDTool
  5. 解决 Cmder 的光标跟文字有个间距 及常用配置
  6. 手把手教你搭建springboot程序
  7. 从一个表查询数据插入另一个表
  8. 指针数组 | 数组指针
  9. Qimage像素级操作
  10. DOS下Debug工具使用
  11. K8S高可用集群架构部署 dashborad插件部署 Nginx实现动静分离 K8S在线升级
  12. PYQT5|一键自动生成并应用QRC资源文件
  13. 如何理解CRM软件里的销售机会与线索
  14. ubuntu16.04 更新清华镜像源详细操作步骤
  15. java打星星_java初学打印星星以及九九乘法表
  16. 记录2017/9/7趋势科技笔试题
  17. 静息态功能磁共振成像:关于静息态功能连接和脑网络分析方法
  18. (笔记)罗辑思维-学习的真相
  19. 沙龙报名:PPT演示专家秘技(7月26日北京)
  20. inux下安装xrdp

热门文章

  1. android版本我的世界,我的世界0.15.4版
  2. 无线运动耳机需求分析
  3. 如何使用动态SQL语句?
  4. c语言生命字符串,常见的C语言字符串操作
  5. 华为mate40发布会哪里看
  6. 拓嘉启远电商:拼多多买家秀优化,有效提高转化
  7. 氛围灯INMP441+WS2812灯带--未完
  8. pythondebug教程_使用spyder3调试python程序的简明教程
  9. 进入docker容器的四种方式,推荐第四种方式
  10. java初级面试题整理汇总-附答案