看这篇论文
look deeper into depth: monocular depth estimation with semantic booster and attention-driven loss
的时候,
碰到个用联合的老哥: jianbo jiao
当时,第一遍 读文章 的概要的阅读笔记,请看 这里
摘要,从前人的工作 overview 一下
jianbo 联合 了 语义 和深度。
其实有 一些 先前的工作,2018 年之前,就有人 用联合 和 表征学习 , 意思是联合 几个任务一起训练,互补彼此的弱点;它们是
16, 19, 20, 27, 38 , 39, 51
展开讲讲过往
其中 27 是 提出: 语义深度分类器; 并且分析了 透视几何 (Pulling things out of perspective. In: CVPR) ;具体来说,就是 物体的感知大小与投影中心的距离(深度)成反比;这导致的数据的不平衡,文章用分类的方法对这种不平衡进行了避免。更多请参考这篇文章
12 是用传统的网络,联合 了 语义, 和 3d 重建 (Joint 3D Scene Reconstruction and Class Segmentation)
51 用了 cnn ,加上 一个 CRF: conditional random field. ,也是预测语义标签 和 深度 (Towards unified depth and semantic prediction from a single image) ,并且告诉 我们,串联的 两个网络,比如先 语义标签网,然后 深度预测网,这种方式不好,因为 前面那个网络的一些 打标签错误,就会接着传导到 后面 的 深度 预测网络里面; 参考了这个文章
但是他们呢仅仅修改了最后的一个层,并且用了 super pixel ,和 CRF:条件随机场,一元势函数 。太多的细节,可以去看15年他的论文:Towards unified depth and semantic prediction from a single image。
23 提出的是 concurrnet 工作,用一个 有关 权重的策略 来 关注 多任务 时候 的losses;也同意:通过进行一定程度的共享不同任务之间的参数;参考文章 ,论文:Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
38 提出了 Cross-stitch units(十字绣单元)for 多任务的学习。尽管他的结果看起来 比 baseline 好,但是会 发生 反向传播的污染(这种污染说是 发生 在 联合weights 趋紧于 0 的时候),同时,jianbo 还说:两个平行的 cnn 增加了参数,和学习的复杂度。(Cross-stitch networks for multi-task learning)
18 这个方法呢,在每一个层之间,用了 密集 的连接,这能有助于 辨别任务(recognition task),但是对内存的消耗有些过分大了。
jianbo的work:协同增效,保持简洁
先来讲一个 深度感知的 协同网络
以前的 cnn 有个 毛病,就是 不平衡的 data,32,45 这俩文献,也说了 在 目标检测 中的 data imbalance(但是本质上,深度测距,和 目标检测 里面的data imbalance 是不同的)。大部分运算 都发生在 近处的物体/像素。
因为 视觉的原因,透视的原理,, 注定了我们看近处的东西比较多,一叶障目嘛。
你费力增加 训练数据,并不能解决这个问题。
数据都是这样,近处的像素就是多,在loss 计算过程中,对 远处 像素 的 loss, 简直 是碾压的 。这会导致我们的model 倾向于预测 小的 深度值。
为了 解决这问题,jianbo 就给出一个 跟深度成正比的 loss,如此这般,尽管远处物体的像素,在图像中的像素少,但是人家在 最后的 loss 函数中,占的比例/比重 不小,这就解决了 data imbalance.
到这里,还没讲 网络 的互相帮助呢
马上就讲;
文章里面 有4 个部分,我理解是 两个网络,两个辅助组件。
两个网络是
- 深度感知网络,测量距离的
- 语义标签网络,给图像物体打标签的
两个辅助的组件是:
- LSU lateral share unit; 侧向共享单元;说侧是因为两个网络,数据前向走,这个组件在两个网络的侧面帮忙,让俩网络能边走边说话
- attention drive loss, 用注意力驱动的loss 函数;当然就是最终的优化目标了,把这个东西搞好了,网络效果就好了。
网络overview
值得我还投入思考的是: SUC 这个东西: semi-dense up-skip connections ,这东西,说是能 让知识在单独的,各自的子网络(当然就是说的是 depth aware 网, 和 semantic labeling 网) 内部进行共享。有点像 resnet?
- LSU 就是共享这个(接口/想法)的实现
本文正文来了:如何学会互帮互助,互利共赢,同时不干涉网络的内政
首先明确一点,手动给定网络之间的 知识共享策略,比如共享多少,这种方式很难达到共享的最优解。所以 用一个 双向的机构,动态的结构,在前向,后向传播的过程中,都能使用的结构
具体怎么做的呢
在 每 两个 up conv 网 之间,添加LSU ,也就添加了 对面网络的残余(知识/表征)
这样,在传统的 网络内部(intra task) 知识共享之外,现在我们有了 网络之间的 (inter task) 知识共享。
LSU 同时从 intra 和 inter 的网络里面进行学习。
图示如下:
公式如下:
数学部分,讲讲公式
注: 单纯从 数学 表达的 角度看,我倒是觉得 这个 L S U D 2 LSU_{D2} LSUD2 可以 直接 写成 D 2 D2 D2 嘛
φ
D
\varphi_{D}
φD ,
γ
D
\gamma_{D}
γD 的意思就是 就是 给 D1 这个 深度网络前一层 的权重
同理
φ
S
\varphi_{S}
φS ,
γ
S
\gamma_{S}
γS 的意思就是 给 S1 这个语义网络的 前一层 的权重。
这里的
φ
D
\varphi_{D}
φD ,
γ
D
\gamma_{D}
γD ,
φ
S
\varphi_{S}
φS ,
γ
S
\gamma_{S}
γS 都是在传播过程中动态学习的。所以,信息在两个 up conv 的层中,有着 动态的路由。
所有的 LSU 都是这个结构,但是他们的参数却是不同的,网络的每个阶段,信息在侧向如何共享,共享多少,可以就是 灵活的了。
按照文章的说法,加上 1 的那一部分,就是 叫做 identity mappings, 或者 identity connection(来自文献15) 就是保持原有信息,避免来自对面网络的信息污染,这可叫做 残差类似 结构:residual-like structure. 同时,这也对 梯度的反向传播有好处。
连续的 up conv 层,也比 encoder 这种方式,具有更少的参数。(这里对encoder 网络还是有点疑问,是全链接嘛?)
LSU 效果好吗?看图
从左到右,依次是: 原始的RGB 图;
没带 LSU 的效果,;
带LSU,但是没有 identity mapping;
带 LSU 以及 带 identity mappping
真实值
(有个地方没看懂,就是红色的那两块,在表达什么意思?肯定不是某个物体的距离吧?反正我们就看蓝色的这些部分)
可以看到:带 LSU ,右上角的 橱柜,就边界清晰了。
有LSU但是没有 identity mapping,这就造成了 一些 artifacts, 右下角的橱窗。这里的意思,我猜次就是 对比 这两张图:
看看右下角:带 identify mapping 就保持了 边界更加明晰,左边不明晰,就是因为来自对面语义的 信息,过度污染了
本段结束
还没说的是,jianbo 的work 还 用注意力机制关注远处的像素;
看看代码吧
可以 回到 我 读这篇 文章时候的 笔记看, 在 最后一部分,搜索: LS_s11