SiamMask中的分類分支、回歸分支與Mask分支,有何本質差異?
- 一、引言
- 二、分支定位與任務目標
- 三、網絡結構與感受野設計
- 3.1 分類分支(Classification Head)
- 3.2 回歸分支(Regression Head)
- 3.3 Mask分支(Mask Head)
- 四、輸入特征與輸出形式
- 五、損失函數與監督信號
- 5.1 分類分支損失
- 5.2 回歸分支損失
- 5.3 Mask分支損失
- 5.4 總損失
- 六、三者協同工作流程
- 七、實驗對比與可視化示例
- 八、小結與展望
本文是“Siam 系列網絡深度解析”之三,重點對比并深入剖析SiamMask在跟蹤與分割任務中,分類分支、回歸分支和Mask分支的不同設計思路、網絡結構與訓練策略。
一、引言
SiamMask以多任務學習的方式,實現了目標跟蹤(Tracking)與目標分割(Segmentation)的統一框架。模型共有三條并行分支:分類分支(Classification Head)、回歸分支(Regression Head)和Mask分支(Mask Head)。雖然它們都基于同一個深度相關特征圖 g ∈ R C × H × W g\in\mathbb R^{C\times H\times W} g∈RC×H×W,并且都執行二分類或回歸操作,但在設計目標、網絡結構、輸入/輸出粒度、損失函數及訓練方式等方面均存在本質區別。
本篇文章將從以下角度展開:
- 分支定位與任務目標
- 網絡結構與感受野設計
- 輸入特征與輸出形式
- 損失函數與監督信號
- 三者協同工作流程
- 實驗對比與可視化示例
二、分支定位與任務目標
分支 | 任務目標 | 輸出意義 |
---|---|---|
分類分支 | 判斷某空間位置是否為目標中心 | 前景概率熱力圖 S ∈ [ 0 , 1 ] 1 × H × W \mathbf S\in[0,1]^{1\times H\times W} S∈[0,1]1×H×W |
回歸分支 | 回歸Anchor相對于真實框的偏移量 | 邊界框偏移量 Δ = ( l , t , r , b ) ∈ R 4 × H × W \Delta=(l,t,r,b)\in\mathbb R^{4\times H\times W} Δ=(l,t,r,b)∈R4×H×W |
Mask分支 | 對目標區域進行像素級前景/背景分割 | 掩膜概率圖 M ^ ∈ [ 0 , 1 ] 1 × H m × W m \hat M\in[0,1]^{1\times H_m\times W_m} M^∈[0,1]1×Hm?×Wm? |
- 分類分支:提供一個粗粒度的定位信號,告訴模型“目標的大致中心在哪里”。
- 回歸分支:基于分類分支給定的位置,從每個Anchor出發,用4個通道精確地回歸邊界框。
- Mask分支:在回歸出的目標框內部,生成高分辨率的像素級掩膜,實現精細分割。
三、網絡結構與感受野設計
3.1 分類分支(Classification Head)
- 典型實現:1~2層 3 × 3 3\times3 3×3卷積 + Sigmoid
- 感受野:適中,關注當前位置的上下文信息,以便區分前景/背景
- 輸出分辨率:與輸入特征等大(如 H × W = 17 × 17 H\times W=17\times17 H×W=17×17或 25 × 25 25\times25 25×25)
示例代碼:
self.cls_conv = nn.Conv2d(C, C, kernel_size=3, padding=1)
self.cls_score = nn.Conv2d(C, 1, kernel_size=1)
# forward:
feat = F.relu(self.cls_conv(g)) # [B,C,H,W]
score = torch.sigmoid(self.cls_score(feat)) # [B,1,H,W]
3.2 回歸分支(Regression Head)
- 典型實現:同樣是2~3層小卷積 + 無激活
- 感受野:與分類相近,但關注邊緣位置的特征變化以便回歸準確
- 輸出分辨率: 4 × H × W 4\times H\times W 4×H×W,對應每個位置的 l , t , r , b l,t,r,b l,t,r,b值
示例代碼:
self.reg_conv = nn.Conv2d(C, C, kernel_size=3, padding=1)
self.reg_offset = nn.Conv2d(C, 4, kernel_size=1)
# forward:
feat = F.relu(self.reg_conv(g)) # [B,C,H,W]
offset = self.reg_offset(feat) # [B,4,H,W]
3.3 Mask分支(Mask Head)
- 典型實現:U-Net風格或多層卷積 + 上采樣
- 感受野:更大,需要捕捉目標內部與邊界細節
- 輸出分辨率:高于跟蹤特征圖,通常為 63 × 63 63\times63 63×63或更高
- 關鍵組件:RoIAlign/Crop → 一系列卷積與反卷積 → Sigmoid
示例代碼:
# RoIAlign后得到局部特征 [B,C,H,W]
x = roi_align(feature_map, boxes, output_size=(H,W))
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = F.convTranspose2d(x, ...) # 上采樣
mask = torch.sigmoid(self.conv_final(x)) # [B,1,H_m,W_m]
四、輸入特征與輸出形式
分支 | 輸入特征 | 輸出形式 | 下游依賴 |
---|---|---|---|
分類分支 | 全局 DW-XCorr 特征 g g g | 熱力圖 S \mathbf S S | 決定回歸與Mask的位置 |
回歸分支 | 全局 DW-XCorr 特征 g g g | 偏移量 Δ \Delta Δ | 生成最終邊界框 |
Mask分支 | RoIAlign 裁剪特征 | 掩膜 M ^ \hat M M^ | 精細分割 |
- 分類分支和回歸分支共享同一輸入: g ∈ R C × H × W g\in\mathbb R^{C\times H\times W} g∈RC×H×W。
- Mask分支通過RoIAlign從回歸出的候選框中裁剪特征,得到局部高分辨率特征,用于掩膜預測。
五、損失函數與監督信號
5.1 分類分支損失
二元交叉熵:
L c l s = ? ∑ i , j [ y i , j log ? S i , j + ( 1 ? y i , j ) log ? ( 1 ? S i , j ) ] \mathcal L_{cls} = -\sum_{i,j}\bigl[y_{i,j}\log S_{i,j} + (1-y_{i,j})\log(1 - S_{i,j})\bigr] Lcls?=?i,j∑?[yi,j?logSi,j?+(1?yi,j?)log(1?Si,j?)]
- y i , j ∈ { 0 , 1 } y_{i,j}\in\{0,1\} yi,j?∈{0,1}:某位置是否為前景Anchor
- 監督信號稀疏,僅中心Anchor或與GT匹配的Anchor為正樣本
5.2 回歸分支損失
Smooth L1 Loss:
L r e g = ∑ c ∈ { l , t , r , b } ∑ i , j S m o o t h L 1 ( Δ c , i , j ? Δ c , i , j ? ) \mathcal L_{reg} = \sum_{c\in\{l,t,r,b\}} \sum_{i,j} \mathrm{SmoothL1}(\Delta_{c,i,j} - \Delta^*_{c,i,j}) Lreg?=c∈{l,t,r,b}∑?i,j∑?SmoothL1(Δc,i,j??Δc,i,j??)
- Δ ? \Delta^* Δ?:Ground-Truth邊界框與Anchor的真實偏移
5.3 Mask分支損失
像素級二元交叉熵:
L m a s k = ? 1 H m W m ∑ u , v [ M u , v ? log ? M ^ u , v + ( 1 ? M u , v ? ) log ? ( 1 ? M ^ u , v ) ] \mathcal L_{mask} = -\frac{1}{H_mW_m}\sum_{u,v}\bigl[M^*_{u,v}\log\hat M_{u,v} + (1-M^*_{u,v})\log(1-\hat M_{u,v})\bigr] Lmask?=?Hm?Wm?1?u,v∑?[Mu,v??logM^u,v?+(1?Mu,v??)log(1?M^u,v?)]
- M u , v ? ∈ { 0 , 1 } M^*_{u,v}\in\{0,1\} Mu,v??∈{0,1}:像素級前景/背景標簽
5.4 總損失
多任務加權:
L t o t a l = λ c l s L c l s + λ r e g L r e g + λ m a s k L m a s k \mathcal L_{total} = \lambda_{cls}\mathcal L_{cls} + \lambda_{reg}\mathcal L_{reg} + \lambda_{mask}\mathcal L_{mask} Ltotal?=λcls?Lcls?+λreg?Lreg?+λmask?Lmask?
常見設定: λ c l s = 1 , λ r e g = 1.2 , λ m a s k = 32 \lambda_{cls}=1,\lambda_{reg}=1.2,\lambda_{mask}=32 λcls?=1,λreg?=1.2,λmask?=32。
六、三者協同工作流程
- 特征提取:模板與搜索圖通過Backbone、FPN提取多尺度特征。
- DW-XCorr:得到全局匹配特征圖 g g g。
- 分類分支:生成熱力圖 S \mathbf S S,選取得分最高的位置作為候選Anchor。
- 回歸分支:對候選Anchor回歸偏移,得到精確邊界框。
- Mask分支:對每個候選框進行RoIAlign裁剪,預測高分辨率掩膜。
七、實驗對比與可視化示例
下面對比三者輸出:
- 分類熱力圖:低分辨率,但清晰標出目標中心
- 回歸框:粗略定位目標范圍
- Mask掩膜:高分辨率,精確描繪目標輪廓
+----------------------+----------------------+----------------------+
| Classification | BBox Regression | Mask |
+----------------------+----------------------+----------------------+
| 17×17 heatmap | 4×17×17 offsets | 63×63 mask |
+----------------------+----------------------+----------------------+
(此處可插入示意圖:熱力圖、邊框圖、掩膜圖)
八、小結與展望
- 分類分支聚焦“哪個位置是目標”,為后續模塊提供定位基準;
- 回歸分支細化Anchor到精確框,實現尺度與位移回歸;
- Mask分支在局部框內做細粒度分割,獲得目標輪廓。
三者分工明確、協同高效,共同構成了SiamMask的跟蹤+分割能力。
下篇我們將撰寫:
《分類分支 vs Mask分支:為什么不能一個分支包辦所有任務?》
敬請期待!