diff --git "a/\344\275\225\346\201\272\346\230\216/Faster R-CNN.md" "b/\344\275\225\346\201\272\346\230\216/4 - Faster R-CNN.md" similarity index 95% rename from "\344\275\225\346\201\272\346\230\216/Faster R-CNN.md" rename to "\344\275\225\346\201\272\346\230\216/4 - Faster R-CNN.md" index d3662b8c860eca095c8b068b72abb384a3f54ba2..0fb264d10f63c0a119123ea8e683da78b1dfabe9 100644 --- "a/\344\275\225\346\201\272\346\230\216/Faster R-CNN.md" +++ "b/\344\275\225\346\201\272\346\230\216/4 - Faster R-CNN.md" @@ -1,120 +1,122 @@ -# 贡献 - -引入Region Proposal Network(RPN),从而更迅速地给出候选区域;并把RPN与Fast R-CNN无缝整合,从而能被端到端训练。 - -# 3.Faster R-CNN模型结构 - -RPN和Fast R-CNN共同构成了Faster R-CNN。 - -RPN用于给出候选框,是一个深度全卷积网络,基于「注意力」[31]机制。 - -## 3.1 RPN - -RPN以任意尺寸图片为输入,以若干候选框为输出,每个候选框有「存在感」(objectness)打分。 - -> 「存在感」是我自己的翻译 - -RPN是一个深度全卷积网络,由两部分组成: - -**(1)编码器。** 作者采用VGG16的卷积部分作为编码器。 - -> 后文提到,作者竭力让Fast R-CNN和RPN用同一个编码器。 - -**(2-v1)小滑动网络。** 用一个$$n\times n$$的窗口在(1)所提取的卷积特征上滑动,把窗口所覆盖的卷积特征输入给一个中间层。中间层从每个滑窗位置生成一根低维向量(如512维);经过ReLU激活后,输入至两个全连接层:①边框回归层、②边框分类层。作者选$$n=3$$。 - -**(2-v2)尾部网络。** 刚刚还说了RPN是全卷积网络,怎么它的组成部分「小滑动网络」里有了全连接层? - -这是一种算法层面的化简。作者发现,全连接层是跟着滑窗走的,被各个滑窗位置共享。因此作者想到把小滑动网络改进为:一个$$n\times n$$卷积层 + 两个并列的$$1\times 1$$卷积层。这两个1x1卷积层分别预测anchor分类和anchor边框。 - -### 3.1.1 Anchor - -Anchor是RPN的输出,是候选区域/RoI的前身。 - -RPN从每个滑窗位置预测出多个($$\le k$$ 个)Anchor。==Anchor是以滑窗中心为中心的方框==。每个方框有其关联的尺度和长宽比。作者划定3级尺度、3种长宽比,故作者的$$k=9$$。可以说,每个滑窗位置预测出一个==Anchor金字塔==。 - -对于宽高为$$W, H$$的特征图,RPN能给出至多(通常是恰好)$$WHk$$ 个Anchor。 - -所谓「金字塔」,就是「多尺度搭配」。在本文以前出现过的金字塔有如下类别,往往会搭配使用: - -* 图像金字塔(把输入图像缩放到不同尺度) -* 特征金字塔(把特征图缩放到不同尺度) -* 滑窗/滤波器金字塔(用不同感受野的滑窗/滤波器) - -### 3.1.2 损失函数 - -以anchor及其标签、答案框为输入。把anchor标记为两类:①是物体,②是背景。【也就是objectness】 - -#### 训练数据 - -==如下2种anchor标记为「物体」,并把所依据的答案框作为anchor的答案框:== - -**a.** 存在一个答案框,与该anchor满足$$IoU>0.7$$。 - -极稀少情况下,找不到如a所述的anchor,则采用 - -**b.** 对任意答案框,与其IoU最大的anchor(s)。 - -==如下1种anchor标记为「背景」,没有答案框:== - -**a.** 对任意答案框,与anchor满足$$IoU<0.3$$。 - -#### 效仿Fast R-CNN的损失函数 - -效仿Fast R-CNN[2]的「多任务损失」,对单张输入图片,损失函数定义为: -$$ -L\left( P,T \right) =\frac{1}{B}\sum_i{L_{\mathbb{C}}\left( p_i,\bar{p}_i \right)}\,\,+\,\,\lambda \frac{1}{A}\sum_i{\bar{p}_i\cdot L_{\mathbb{R}}\left( t_i,\bar{t}_i \right)} -$$ - -* $$P$$ - 一个批次的分类及答案 -* $$T$$ - 一个批次的anchor及答案框 -* $$i$$ - anchor在批次中的索引 -* $$p_i$$ - 第$$i$$个anchor是「物体」的概率 -* $$\bar{p}_i$$ - 第$$i$$个anchor的答案 - * $$\bar{p}_i=1$$ 物体 - * $$\bar{p}_i=0$$ 背景 -* $$t_i$$ - 第$$i$$个anchor的框。$$t_i=\left(x_i, y_i, w_i, h_i\right) $$ 。其中$$x, y$$是中点坐标、$$w, h$$是宽高 -* $$\bar{t}_i$$ - 第$$i$$个anchor的答案框。$$\bar{t}_i=\left(\bar{x}_i, \bar{y}_i, \bar{w}_i, \bar{h}_i\right)$$ -* $$L_{\mathbb{C}}$$ - 二分类LogLoss【难道是BCE?】 -* $$L_{\mathbb{R}}$$ - 如Fast R-CNN[2]所述的「Smooth L1 Loss」 -* $$B$$ - 批次大小 -* $$A$$ - 每张图片Anchor数量 -* $$\lambda$$ - 超参数 - -#### 改进的边框回归方程 - -在SPPnet[1]和Fast R-CNN[2]中,边框回归以RoI、特征图、答案框为输入,不关注RoI尺寸。 - -**作者保留了:** - -* R-CNN[5]提到的回归方程 -* 在特征图上做边框回归 - -**作者改进了:** - -为每种尺度、每种长宽比的anchor设立一组回归方程,每组回归方程有一套回归参数。故模型有$$k$$组回归方程需要优化求解。 - -### 3.1.3 训练RPN - -训练RPN - -## 3.2 一起训练RPN和Fast R-CNN - -虽然RPN和Fast R-CNN拥有相同的编码器结构,单独训练这两个网络却会得到不同的两组参数。 - -作者提出训练方案: - -(1)交替训练【作者说这招最实用】 - -* 按3.1.3所述训练RPN -* 用RPN生成的候选区域来训练Fast R-CNN。注意Fast R-CNN和RPN各持有一个VGG编码器实例 -* 用Fast R-CNN的编码器参数覆盖RPN的编码器参数 -* 精调RPN的尾部网络 - -(2)近似联合训练。Figure 2。 - -(3)非近似联合训练。上一个方案不能对anchor坐标求导。这一个方案把anchor坐标也加入到RoI池化层的输入,因此要求RoI池化层对anchor坐标可导。作者提到RoI变形(warping)层[15],但受限于篇幅,没有展开。 - -# 重要参考文献 - -[^15]: Instance-aware semantic segmentation via multi-task network cascades. - +# 贡献 + +* 引入Region Proposal Network(RPN),从而更迅速地给出候选区域。 + +* 把RPN与Fast R-CNN无缝整合,从而能被端到端训练。 + +# 3.Faster R-CNN模型结构 + +RPN和Fast R-CNN共同构成了Faster R-CNN。 + +RPN用于给出候选框,是一个深度全卷积网络,基于「注意力」[31]机制。 + +## 3.1 RPN + +RPN以任意尺寸图片为输入,以若干候选框为输出,每个候选框有「存在感」(objectness)打分。 + +> 「存在感」是我自己的翻译 + +RPN是一个深度全卷积网络,由两部分组成: + +**(1)编码器。** 作者采用VGG16的卷积部分作为编码器。 + +> 后文提到,作者竭力让Fast R-CNN和RPN用同一个编码器。 + +**(2-v1)小滑动网络。** 用一个$$n\times n$$的窗口在(1)所提取的卷积特征上滑动,把窗口所覆盖的卷积特征输入给一个中间层。中间层从每个滑窗位置生成一根低维向量(如512维);经过ReLU激活后,输入至两个全连接层:①边框回归层、②边框分类层。作者选$$n=3$$。 + +**(2-v2)尾部网络。** 刚刚还说了RPN是全卷积网络,怎么它的组成部分「小滑动网络」里有了全连接层? + +这是一种算法层面的化简。作者发现,全连接层是跟着滑窗走的,被各个滑窗位置共享。因此作者想到把小滑动网络改进为:一个$$n\times n$$卷积层 + 两个并列的$$1\times 1$$卷积层。这两个1x1卷积层分别预测anchor分类和anchor边框。 + +### 3.1.1 Anchor + +Anchor是RPN的输出,是候选区域/RoI的前身。 + +RPN从每个滑窗位置预测出多个($$\le k$$ 个)Anchor。==Anchor是以滑窗中心为中心的方框==。每个方框有其关联的尺度和长宽比。作者划定3级尺度、3种长宽比,故作者的$$k=9$$。可以说,每个滑窗位置预测出一个==Anchor金字塔==。 + +对于宽高为$$W, H$$的特征图,RPN能给出至多(通常是恰好)$$WHk$$ 个Anchor。 + +所谓「金字塔」,就是「多尺度搭配」。在本文以前出现过的金字塔有如下类别,往往会搭配使用: + +* 图像金字塔(把输入图像缩放到不同尺度) +* 特征金字塔(把特征图缩放到不同尺度) +* 滑窗/滤波器金字塔(用不同感受野的滑窗/滤波器) + +### 3.1.2 损失函数 + +以anchor及其标签、答案框为输入。把anchor标记为两类:①是物体,②是背景。【也就是objectness】 + +#### 训练数据 + +==如下2种anchor标记为「物体」,并把所依据的答案框作为anchor的答案框:== + +**a.** 存在一个答案框,与该anchor满足$$IoU>0.7$$。 + +极稀少情况下,找不到如a所述的anchor,则采用 + +**b.** 对任意答案框,与其IoU最大的anchor(s)。 + +==如下1种anchor标记为「背景」,没有答案框:== + +**a.** 对任意答案框,与anchor满足$$IoU<0.3$$。 + +#### 效仿Fast R-CNN的损失函数 + +效仿Fast R-CNN[2]的「多任务损失」,对单张输入图片,损失函数定义为: +$$ +L\left( P,T \right) =\frac{1}{B}\sum_i{L_{\mathbb{C}}\left( p_i,\bar{p}_i \right)}\,\,+\,\,\lambda \frac{1}{A}\sum_i{\bar{p}_i\cdot L_{\mathbb{R}}\left( t_i,\bar{t}_i \right)} +$$ + +* $$P$$ - 一个批次的分类及答案 +* $$T$$ - 一个批次的anchor及答案框 +* $$i$$ - anchor在批次中的索引 +* $$p_i$$ - 第$$i$$个anchor是「物体」的概率 +* $$\bar{p}_i$$ - 第$$i$$个anchor的答案 + * $$\bar{p}_i=1$$ 物体 + * $$\bar{p}_i=0$$ 背景 +* $$t_i$$ - 第$$i$$个anchor的框。$$t_i=\left(x_i, y_i, w_i, h_i\right) $$ 。其中$$x, y$$是中点坐标、$$w, h$$是宽高 +* $$\bar{t}_i$$ - 第$$i$$个anchor的答案框。$$\bar{t}_i=\left(\bar{x}_i, \bar{y}_i, \bar{w}_i, \bar{h}_i\right)$$ +* $$L_{\mathbb{C}}$$ - 二分类LogLoss【难道是BCE?】 +* $$L_{\mathbb{R}}$$ - 如Fast R-CNN[2]所述的「Smooth L1 Loss」 +* $$B$$ - 批次大小 +* $$A$$ - 每张图片Anchor数量 +* $$\lambda$$ - 超参数 + +#### 改进的边框回归方程 + +在SPPnet[1]和Fast R-CNN[2]中,边框回归以RoI、特征图、答案框为输入,不关注RoI尺寸。 + +**作者保留了:** + +* R-CNN[5]提到的回归方程 +* 在特征图上做边框回归 + +**作者改进了:** + +为每种尺度、每种长宽比的anchor设立一组回归方程,每组回归方程有一套回归参数。故模型有$$k$$组回归方程需要优化求解。 + +### 3.1.3 训练RPN + +训练RPN + +## 3.2 一起训练RPN和Fast R-CNN + +虽然RPN和Fast R-CNN拥有相同的编码器结构,单独训练这两个网络却会得到不同的两组参数。 + +作者提出训练方案: + +(1)交替训练【作者说这招最实用】 + +* 按3.1.3所述训练RPN +* 用RPN生成的候选区域来训练Fast R-CNN。注意Fast R-CNN和RPN各持有一个VGG编码器实例 +* 用Fast R-CNN的编码器参数覆盖RPN的编码器参数 +* 精调RPN的尾部网络 + +(2)近似联合训练。Figure 2。 + +(3)非近似联合训练。上一个方案不能对anchor坐标求导。这一个方案把anchor坐标也加入到RoI池化层的输入,因此要求RoI池化层对anchor坐标可导。作者提到RoI变形(warping)层[15],但受限于篇幅,没有展开。 + +# 重要参考文献 + +[^15]: Instance-aware semantic segmentation via multi-task network cascades. + diff --git "a/\344\275\225\346\201\272\346\230\216/Faster R-CNN.pdf" "b/\344\275\225\346\201\272\346\230\216/4 - Faster R-CNN.pdf" similarity index 100% rename from "\344\275\225\346\201\272\346\230\216/Faster R-CNN.pdf" rename to "\344\275\225\346\201\272\346\230\216/4 - Faster R-CNN.pdf" diff --git "a/\344\275\225\346\201\272\346\230\216/Focal Loss + RetinaNet.pdf" "b/\344\275\225\346\201\272\346\230\216/5 - Focal Loss + RetinaNet.pdf" similarity index 100% rename from "\344\275\225\346\201\272\346\230\216/Focal Loss + RetinaNet.pdf" rename to "\344\275\225\346\201\272\346\230\216/5 - Focal Loss + RetinaNet.pdf" diff --git "a/\344\275\225\346\201\272\346\230\216/Focal Loss + RetinaNet.xmind" "b/\344\275\225\346\201\272\346\230\216/5 - Focal Loss + RetinaNet.xmind" similarity index 66% rename from "\344\275\225\346\201\272\346\230\216/Focal Loss + RetinaNet.xmind" rename to "\344\275\225\346\201\272\346\230\216/5 - Focal Loss + RetinaNet.xmind" index 8d183f5d1f13b40f905189ae44c6cf9bcee439d8..63f916a5070d0421fb828e01e898ba2db1463c7a 100644 Binary files "a/\344\275\225\346\201\272\346\230\216/Focal Loss + RetinaNet.xmind" and "b/\344\275\225\346\201\272\346\230\216/5 - Focal Loss + RetinaNet.xmind" differ diff --git "a/\344\275\225\346\201\272\346\230\216/FPN.pdf" "b/\344\275\225\346\201\272\346\230\216/6 - FPN.pdf" similarity index 100% rename from "\344\275\225\346\201\272\346\230\216/FPN.pdf" rename to "\344\275\225\346\201\272\346\230\216/6 - FPN.pdf" diff --git "a/\344\275\225\346\201\272\346\230\216/FPN.xmind" "b/\344\275\225\346\201\272\346\230\216/6 - FPN.xmind" similarity index 100% rename from "\344\275\225\346\201\272\346\230\216/FPN.xmind" rename to "\344\275\225\346\201\272\346\230\216/6 - FPN.xmind" diff --git "a/\344\275\225\346\201\272\346\230\216/Mask R-CNN.md" "b/\344\275\225\346\201\272\346\230\216/7 - Mask R-CNN.md" similarity index 97% rename from "\344\275\225\346\201\272\346\230\216/Mask R-CNN.md" rename to "\344\275\225\346\201\272\346\230\216/7 - Mask R-CNN.md" index 0b57ba3b065d4a1f0ac20287ec23a7471248d1fa..a2a285b8b9f60df5f6f47c8094e3db1051181a47 100644 --- "a/\344\275\225\346\201\272\346\230\216/Mask R-CNN.md" +++ "b/\344\275\225\346\201\272\346\230\216/7 - Mask R-CNN.md" @@ -1,111 +1,111 @@ -# 贡献 - -给Faster R-CNN添加分割分支,从而为每个RoI预测一个掩模,实现实例分割。 - -把RoIPool改成RoIAlign,从而保留精确的位置,让输出像素和输入像素对齐。 - -发现「分别做多分类和二值分割」,比「做多类分割」好。 - -# 3. 模型 - -Mask R-CNN说起来简单——只是为Faster R-CNN增加一个分割分支。但做起来不易——分割需要更精细的位置信息,需要输出像素与输入像素的对齐。 - -## 3.1. Mask R-CNN的结构 - -Mask R-CNN大致结构分为两部分:RPN和检测器。RPN见Faster R-CNN。检测器由 **主干** 后接三个并列的 **头部(解码器)** 组成,分别为 - -* **CLS**,用于**分类**。给出RoI是K个目标类或1个背景类的概率。 -* **BOX**,用于**框选**。给出K个目标类的目标框。 -* **SEG**,用于**分割**。给出K个目标类的目标掩模。 - -注意,RPN和Fast R-CNN共享主干模型。 - -> 术语:主干backbone≈编码器encoder,头head≈尾tail≈解码器decoder - -**主干结构有较广泛的选择:** - -* ResNet[19]、ResNeXt[45] -* Feature Pyramid Network (FPN)[27] - -**头部结构:** Figure 4 - -## 3.3. RoIAlign - -SEG分支的输入是RoI特征,而不是原图。RoI特征的尺度远小于原图。故直接在RoI特征上分割会使分割的位置不准确。为了让RoI特征无损保留位置信息,作者提出RoIAlign层。 - -**RoIPool层暗含两次取整:** - -① 把浮点坐标映射到特征图上。设特征图的步长为s,则特征图的长宽和原图比缩小s倍。从而特征图上的位置$$\left( x', y' \right) $$与源位置$$\left( x, y \right)$$ 的关系为 -$$ -x'=\left[ x/s \right] , y'=\left[ y/s \right] -$$ -其中,方括号为某种取整方式。 - -② 对每个小格的像素长宽取整。【特征图的像素长宽不一定能被网格行列数整除】 - -==缺点:我们不可能从取整后的特征图坐标还原出原图坐标。位置不准,则分割不准。== - -**RoIAlign层消除取整** - -RoIAlign层是==改进的RoIPool层==。 - -如Figure 3. ① 该层在网格的每个小格里均匀地放置M个采样点 - -② 把网格和采样点按照$$x'=x/s, y'=y/s$$【不取整!】的变换方式摆放到特征图上 - -③ 在特征图的各个通道,用双线性插值求出各采样点的像素值 - -④ 在特征图的各通道、网格的各小格,找到采样点的最大值 - -## 3.2. 损失函数 - -==第 $$i$$ 个RoI==的损失函数定义为 -$$ -L^{\left( i \right)}=L_{\mathbf{CLS}}^{\left( i \right)}+L_{\mathbf{BOX}}^{\left( i \right)}+L_{\mathbf{SEG}}^{\left( i \right)} -$$ -其中,前两项(CLS、BOX)沿袭Faster R-CNN[12]。 - -对第三项需要特别注意。尽管分割尾输出K张$$m\times m$$的二值mask,但计算SEG损失时,要a. ==只计算答案类上的BCE损失==。而不是~~b. 对所有类的BCE失求平均。~~ - -作者认为,b方案会导致来自不同类的梯度相互抵消,产生**类间竞争**。典型的FCN分割网络对每个像素采用Softmax+多项交叉熵损失,这会带来类间竞争。而作者的SEG分支对每个像素采用Sigmoid+二项交叉熵损失,这直接铲除了类间竞争的土壤。 - -> 在后文,作者用实验说明了,消除类间竞争对实例分割是关键的。 - - - -# 4.2. 消融实验 - -作者设计了一系列消融实验,结果记录在Table 2。 - -## (一)主干模型 - -从**Table 2a**可以看出,Mask R-CNN能受益于更深的网络、更先进的设计(如FPN、ResNeXt)。 - -并非所有模型能受益于上述因素,详见评测[21]。 - -## (二)Mask的通道数 - -Mask R-CNN**坚持使用单通道mask**,也就是为RoI在每个类预测一张Mask【方案1】。 - -从**Table 2b**可以看出,如果使用FCN惯用的多通道mask【方案2】,则AP会显著下降。 - -方案1的实现:Sigmoid + BCEs - -方案2的实现:Softmax + CE - -## (三)可不可以预测一个Mask? - -可以。 - -仅为RoI预测一个object mask,而不关心object是什么类别。和「每类一mask」相媲美。 - -【这个版本怎么实现呢?】 - -## (四)RoIAlign - -* RoIAlign提高IoU 【Table 2c中,使用RoIAlign能提高AP75】 -* RoIAlign用max/avg效果差别不大 -* 消除取整很关键【Table 2c中,RoIWarp只比RoIPool略好点。RoIWarp没有去掉RoIPool的第一次取整】 -* 编码器步长越大,i.e. 层数越多,RoIAlign作用越大【Table 2d】 -* 关键点检测任务也能受益于RoIAlign【Table 6】 - +# 贡献 + +给Faster R-CNN添加分割分支,从而为每个RoI预测一个掩模,实现实例分割。 + +把RoIPool改成RoIAlign,从而保留精确的位置,让输出像素和输入像素对齐。 + +发现「分别做多分类和二值分割」,比「做多类分割」好。 + +# 3. 模型 + +Mask R-CNN说起来简单——只是为Faster R-CNN增加一个分割分支。但做起来不易——分割需要更精细的位置信息,需要输出像素与输入像素的对齐。 + +## 3.1. Mask R-CNN的结构 + +Mask R-CNN大致结构分为两部分:RPN和检测器。RPN见Faster R-CNN。检测器由 **主干** 后接三个并列的 **头部(解码器)** 组成,分别为 + +* **CLS**,用于**分类**。给出RoI是K个目标类或1个背景类的概率。 +* **BOX**,用于**框选**。给出K个目标类的目标框。 +* **SEG**,用于**分割**。给出K个目标类的目标掩模。 + +注意,RPN和Fast R-CNN共享主干模型。 + +> 术语:主干backbone≈编码器encoder,头head≈尾tail≈解码器decoder + +**主干结构有较广泛的选择:** + +* ResNet[19]、ResNeXt[45] +* Feature Pyramid Network (FPN)[27] + +**头部结构:** Figure 4 + +## 3.3. RoIAlign + +SEG分支的输入是RoI特征,而不是原图。RoI特征的尺度远小于原图。故直接在RoI特征上分割会使分割的位置不准确。为了让RoI特征无损保留位置信息,作者提出RoIAlign层。 + +**RoIPool层暗含两次取整:** + +① 把浮点坐标映射到特征图上。设特征图的步长为s,则特征图的长宽和原图比缩小s倍。从而特征图上的位置$$\left( x', y' \right) $$与源位置$$\left( x, y \right)$$ 的关系为 +$$ +x'=\left[ x/s \right] , y'=\left[ y/s \right] +$$ +其中,方括号为某种取整方式。 + +② 对每个小格的像素长宽取整。【特征图的像素长宽不一定能被网格行列数整除】 + +==缺点:我们不可能从取整后的特征图坐标还原出原图坐标。位置不准,则分割不准。== + +**RoIAlign层消除取整** + +RoIAlign层是==改进的RoIPool层==。 + +如Figure 3. ① 该层在网格的每个小格里均匀地放置M个采样点 + +② 把网格和采样点按照$$x'=x/s, y'=y/s$$【不取整!】的变换方式摆放到特征图上 + +③ 在特征图的各个通道,用双线性插值求出各采样点的像素值 + +④ 在特征图的各通道、网格的各小格,找到采样点的最大值 + +## 3.2. 损失函数 + +==第 $$i$$ 个RoI==的损失函数定义为 +$$ +L^{\left( i \right)}=L_{\mathbf{CLS}}^{\left( i \right)}+L_{\mathbf{BOX}}^{\left( i \right)}+L_{\mathbf{SEG}}^{\left( i \right)} +$$ +其中,前两项(CLS、BOX)沿袭Faster R-CNN[12]。 + +对第三项需要特别注意。尽管分割尾输出K张$$m\times m$$的二值mask,但计算SEG损失时,要a. ==只计算答案类上的BCE损失==。而不是~~b. 对所有类的BCE失求平均。~~ + +作者认为,b方案会导致来自不同类的梯度相互抵消,产生**类间竞争**。典型的FCN分割网络对每个像素采用Softmax+多项交叉熵损失,这会带来类间竞争。而作者的SEG分支对每个像素采用Sigmoid+二项交叉熵损失,这直接铲除了类间竞争的土壤。 + +> 在后文,作者用实验说明了,消除类间竞争对实例分割是关键的。 + + + +# 4.2. 消融实验 + +作者设计了一系列消融实验,结果记录在Table 2。 + +## (一)主干模型 + +从**Table 2a**可以看出,Mask R-CNN能受益于更深的网络、更先进的设计(如FPN、ResNeXt)。 + +并非所有模型能受益于上述因素,详见评测[21]。 + +## (二)Mask的通道数 + +Mask R-CNN**坚持使用单通道mask**,也就是为RoI在每个类预测一张Mask【方案1】。 + +从**Table 2b**可以看出,如果使用FCN惯用的多通道mask【方案2】,则AP会显著下降。 + +方案1的实现:Sigmoid + BCEs + +方案2的实现:Softmax + CE + +## (三)可不可以预测一个Mask? + +可以。 + +仅为RoI预测一个object mask,而不关心object是什么类别。和「每类一mask」相媲美。 + +【这个版本怎么实现呢?】 + +## (四)RoIAlign + +* RoIAlign提高IoU 【Table 2c中,使用RoIAlign能提高AP75】 +* RoIAlign用max/avg效果差别不大 +* 消除取整很关键【Table 2c中,RoIWarp只比RoIPool略好点。RoIWarp没有去掉RoIPool的第一次取整】 +* 编码器步长越大,i.e. 层数越多,RoIAlign作用越大【Table 2d】 +* 关键点检测任务也能受益于RoIAlign【Table 6】 + diff --git "a/\344\275\225\346\201\272\346\230\216/Mask R-CNN.pdf" "b/\344\275\225\346\201\272\346\230\216/7 - Mask R-CNN.pdf" similarity index 100% rename from "\344\275\225\346\201\272\346\230\216/Mask R-CNN.pdf" rename to "\344\275\225\346\201\272\346\230\216/7 - Mask R-CNN.pdf" diff --git "a/\344\275\225\346\201\272\346\230\216/PointRend.pdf" "b/\344\275\225\346\201\272\346\230\216/8 - PointRend.pdf" similarity index 100% rename from "\344\275\225\346\201\272\346\230\216/PointRend.pdf" rename to "\344\275\225\346\201\272\346\230\216/8 - PointRend.pdf" diff --git "a/\344\275\225\346\201\272\346\230\216/PointRend.xmind" "b/\344\275\225\346\201\272\346\230\216/8 - PointRend.xmind" similarity index 55% rename from "\344\275\225\346\201\272\346\230\216/PointRend.xmind" rename to "\344\275\225\346\201\272\346\230\216/8 - PointRend.xmind" index 4b7e8630cdb9f06c030286bb908c0419bb7ceebd..b01f5490ec00a8a67badee23c58103ec1b6ea2ec 100644 Binary files "a/\344\275\225\346\201\272\346\230\216/PointRend.xmind" and "b/\344\275\225\346\201\272\346\230\216/8 - PointRend.xmind" differ