## 把重复卷积移到共享的整图特征 ## 解释、算例与证据 # P29 · 许多重叠区域,为什么要重复卷积? 同一个 CNN 权重处理多个裁剪,仍可能重复计算共同像素。整图共享改变的是一次推理的计算组织,与预训练参数迁移分开。共享之后每个区域仍需要自己的坐标和读出;计算重排并不保证与原来的裁剪路线数学等价。 图内标签与数值:Lecture 03 课堂图解 P29;先裁区域:重叠内容反复编码;CNN;CNN;先算全图:再按区域读取;预训练复用的是过去学到的参数;这里复用的是当前图片已经算出的特征。 左侧两个重叠红杯候选分别经过 CNN;右侧同一全图一次编码后读取两份区域特征。 - 先裁区域:重叠内容反复编码 - CNN - CNN - 先算全图:再按区域读取 - 预训练复用的是过去学到的参数;这里复用的是当前图片已经算出的特征。左侧两个重叠红杯候选分别经过 CNN;右侧同一全图一次编码后读取两份区域特征。 [查看对应图解状态](/#/l3-r2-p29/1)[查看完整图解](/course/figures/l3-r2-p29-1.html) ## 课堂讲述 看两个相邻候选,它们覆盖的大部分像素相同。如果每个区域分别跑一次卷积,很多共同内容就被反复计算。 于是可以调换组织顺序:先对整张图计算特征,再按区域从特征图中提取表示。这样我们复用的不仅是训练得到的参数,也复用了同一张图的计算结果。 这两种复用不要混在一起。预训练回答“过去学到的知识能否帮助新任务”;共享特征回答“这一张图中哪些计算不必重复”。两个问题合在一起,才能把检测做成可用系统。换顺序后又有新要求:大小不同的区域,怎样得到后续预测器可以处理的表示? ### 参数复用与一次前向结果的复用 [独立阅读](/course/blocks/shared-convolution-reuse.html) 两张重叠裁剪都使用同一个 CNN,已经共享了参数,但仍分别执行卷积。假如它们都包含杯沿和桌面,这些像素会参与两次运算。SPP-net 和 Fast R-CNN 的路线把较重的卷积移到整图:先计算 $F=f_\theta(I)$,每个候选再用自己的框 $b_i$ 读取 $r_i=R(F,b_i)$。 这里有两种复用。预训练让新的任务借用过去学到的参数;整图共享则让同一次推理中的多个区域借用已算出的中间结果。前者减少从头学习的需要,后者减少重复工作,不能用同一个“迁移”概念含糊带过。 若有 N 个候选,逐区域成本近似为 N 次卷积加区域预测;共享方式近似为一次整图卷积加 N 次轻量读取与预测。这是计算组织的估算,不是实测加速倍数,因为整图与裁剪的分辨率不同,内存、候选产生和预测头也占时间。 先裁再编码与先编码再读取不严格相等:前者改变对象尺度并裁去上下文;后者的感受野可能跨出 RoI。方法的贡献是在这样的取舍下找到能训练、有效率的共享接口。 **出处:**[SPP-net 原论文](https://arxiv.org/abs/1406.4729) · [Fast R-CNN 原论文](https://arxiv.org/abs/1504.08083) ### 沿着图解追问 以下是备课用的模拟师生对话,不是课堂实录。 **学生:**两个框共用同一 CNN,不是已经共享了吗? **教师:**已经共享参数,仍可能分别计算。此页进一步复用同一张图已经得到的特征结果,这两种共享发生在不同层面。 ## 沿这个问题继续 沿 CLS07 的公式定位疑问,再选 LAB09 解析练习或 LAB10 完整训练。 **出处:**[SPP-net (2014)](https://arxiv.org/abs/1406.4729) · [Fast R-CNN (2015)](https://arxiv.org/abs/1504.08083) #### 图示条件与公式约定 先裁图再编码与先编码再读区域不严格等价:上下文与几何变换不同。此处比较计算组织,不提供未测加速倍数。 #### 这条线索的展开与后续阅读 - [同一片杯沿,为什么要反复计算?](/supplement.html?return=l3-r2-p29/0#/l3-shared-conv/0) 本页说明