模型壓縮之Distilling Knowledge From a Deep Pose Regressor Network

Distilling Knowledge From a Deep Pose Regressor Network


image.png

原始文檔:https://www.yuque.com/lart/gw5mta/nnqdlk#j7uhw

主要工作

本文使用知識蒸餾來做pose regression的. 考慮到適用於分類的知識蒸餾依賴於"dark knowledge", 而這樣的知識對於pose regression是not available的(?), 並且教師的預測並不總是準確的, 所以這裏提出了一種基於對老師模型的結果的"信任"程度來附加蒸餾損失的方案. 這通過計算教師模型的預測與真值之間的差異作爲其在監督中重要性的依據.

關於蒸餾主要使用了兩點兩個損失:

  • attentive imitation loss(AIL)
  • attentive hint training(AHT)(在FitNet的基礎上使用了類似AIL的加權方式)

似乎這篇文章是第一篇將蒸餾用到了pose regression中的論文.

主要結構

image.png

損失函數

image.png

關於損失的構造, 這篇文章比較有意思的是給出了不同的蒸餾損失構造的考量. 接下來順着來一遍. 不過最終是按照了上面圖中b所示的結果進行了構造.

原始的蒸餾

  • 教師網絡T輸出表示爲: image.png, 其中的aT表示教師網絡的logits, 也就是softmax之前的輸出(pre-softmax output)
  • 學生網絡S輸出表示爲: image.png, 其中的aS表示學生網絡的logits
  • 由於OT通常非常接近於分類標籤的one-hot編碼形式, 所以一般會使用一個溫度參數t>1, 來軟化T的輸出分佈, 同樣, 學生網絡也使用相同的溫度參數, 也就是有:image.pngimage.png. 但在測試的時候使用t=1
  • 最終的損失表示爲式子1所示, 其中H表示交叉熵損失, y表示one-hot編碼的真值, 也就是圖1a中所示的情況

image.png

因爲對於傳統的知識蒸餾而言, 這樣的設定是爲了利用來自教師模型的帶有一定不準確信息相對概率, 以便於更好的泛化到新的數據上, 但是對於迴歸問題而言, 這個優勢並不存在. 從圖1b中可以看到, 教師和真值標籤有着相同的特徵(這裏應該是在說對於分類任務而言, 教師的預測和真值的表示實際上還是不一樣的, 畢竟一個是soft target一個是hard target, 而對於迴歸問題, 值都是連續的, 所以傳統蒸餾的這種設定出發點就站不住了).

所以更願意直接最小化學生網絡關於真值的損失, 因爲教師模型結果是被未知的誤差分佈影響的. 然而直接使用真值來訓練S的實現效果也不是太好. 所以還是要探索如何更合適的使用蒸餾手段來處理.

爲了進一步探索整流技術使用方法, 這裏進行了多種嘗試, 其中將學生預測關於真值的損失記作student loss, 關於教師模型的預測的損失記作imitation loss, 教師模型關於真值的損失記作teacher loss.

使用student&imitation loss最小值

  • 假設T在所有條件下都有着很好的預測準確率, 這種情況下, T的預測就很接近真值了, 對於最小化S關於真值還是T沒有太大區別
  • 處於"簡單"的原則, 直接最小化student loss和imitation loss中的最小值, 損失也就可以表示爲式子2中的情況

image.png

這裏的PS, Pgt, PT分別表示學生網絡的預測, 真值, 教師網絡的預測.

將Imitation loss作爲輔助損失

  • 這種情況下, 不去專門尋找二者的最小值, 而是直接將imitation loss作爲一個輔助損失來對student loss進行補充
  • 這種情況下, imitation loss實際上可以看做是一種對於網絡的正則化的方式, 可以在一定程度上阻止網絡的過擬合
  • 目標函數最終變成了式子3所示的樣子, 這個形式實際上和原始針對分類的蒸餾的表達(式子1)是相似的, 除了原始的交叉熵被替換成了迴歸損失(regression loss)

image.png

將teacher loss作爲損失的上界

  • 等式2和3實際上都需求教師模型T在大多數情況下都要有着良好的泛化能力, 這在實際中很難的, T可能會有很多誤導, 在不利環境中, T可能預測相機姿態和真值是相反的
  • 不在直接最小化S關於T的損失, 而是利用T作爲S的上界, 這意味着S的預測應該儘可能接近真值, 但是當它性能超過T的時候, 不會收到額外的約束(損失)
  • 這種情況下, 損失函數就變成了類似式子4和5的情況

image.png

使用probabilistic imitation loss(PIL)

  • 正如前所述, T並不總是準確的. 因此T的預測是包含一些不確定性的, 這可以顯式利用參數分佈來模擬這個不確定性
  • 可以使用Laplace分佈來模擬imitation loss, 如式子6所示, 這裏的σ\sigma是一個S應該預測的額外的數
  • 這種情況下, imitation loss可以轉化爲最小化式子6的負對數似然來表達, 如式子7所示
  • 最終的目標函數通過使用式子7來替換式子4中的Limit實現.對於S來說, 可以將式子7看作是學習合適的係數(通過σ\sigma)來對於不可靠的T的預測進行向下加權(down-weight)的一種方式
  • 這裏的參數分佈也可以使用高斯分佈
  • 可以看式子7中的表達, 對於PS和PT相近的時候, 得到imitation loss就會被放大, 而差異較大的時候(可以認爲這種情況下是教師模型的輸出的誤差太大了), 損失因爲這種形式的表現, 結果反而影響不會太大

image.png

image.png

使用attentive imitation loss(AIL)

  • 從PIL形式的imitation loss可以看出來, 這裏對於不確定性使用一個參數分佈來進行模擬, 可能並不能準確的反映出T的預測的誤差分佈
  • 這裏不再依賴S來學習一個數量σ\sigma來對於T的預測進行down-weight, 而是使用T的預測關於真值的經驗誤差(empirical error)來做這件事
  • 目標函數最終變成了如同式子8的形式

image.png

這裏的Φi\Phi_i表示對於每個樣本i的歸一化教師損失, 其中的eie_i表示來自整個訓練數據的教師損失集合, 並且其中的η\eta是一個歸一化參數. 注意其中的i&j|| \cdot ||_i \& || \cdot ||_j並不表示p-norm, 其中的i表示對於來自一個batch樣本的索引(i=1, …n), 而j表好似對於整個訓練數據集中樣本的索引(j=1, …, N).

圖1b中的結構展示瞭如何將式子8表達出來. 此時的Φi\Phi_i更多的是表達着相對的重要性, 所以被稱爲"attentive". 整個損失還可以被重新表達爲:Lreg=αni=1npSpgti2+1αni=1nΦipSpTi2L_{reg}=\frac{\alpha}{n}\sum^n_{i=1}||\mathbf{p}_S-\mathbf{p}_{gt}||^2_i+\frac{1-\alpha}{n}\sum^n_{i=1}\Phi_i||\mathbf{p}_S-\mathbf{p}_T||^2_i. 這樣一來, 在知識遷移過程彙總, imitation loss更多的會依賴T更擅長的樣本數據.

學習教師網絡的中間表達

這裏有些類似與FitNet的構思. 旨在通過Hint Training(HT)這樣的訓練方式, 使得S可以mimicT的潛在表達(latent representation), 這被設計爲原始知識蒸餾的一種擴展. 對於原始的FitNet的設定, 通過將T的知識遷移到有着更深但是會更瘦的S上, 甚至可以取得超越T的效果. 這裏將這樣的方法用到了較淺的迴歸網絡中. HT可以看做是另一種正則化S的方法, 可以更好地mimic模型T的泛化能力.

對於原始FitNet的方法, 這裏只需要直接優化image.png即可, 但是這個式子沒有考慮T可能並不是一個完美的函數估計器, 並且可能給S誤導.

借鑑自式子8, 這裏同樣的使用"attentive"的方法, 來作爲改進(attentive hint training):

image.png

這裏的Φi\Phi_i是歸一化的teacher loss, 同式子9中是一樣的.

實驗細節

雖然8和12可以一起訓練, 但是發現分開單獨訓練可以產生更好的效果:

  1. The 1st stage trains S up to the guided layer with (12) as the objective.
    1. 如圖3中所示, 選擇T的第一個FC層作爲hint, 並且S的第三個FC層作爲guided層(或者是drate<75%的時候對應第二個FC層)
    2. 使用T的FC層作爲hint, 不只是爲訓練S提供一個更容易的引導(因爲對於T和S的FC層有着相同的分佈), 而且也是爲了遷移T學習相機姿勢的長期運動動力學(long-term motion dynamics of camera poses), 因爲T的FC層是位於RNN-LSTM層後的
  2. The 2nd stage trains the remaining layer of S (from guided until the last layer) with (8) as the objective.
    1. 第二階段中凍結第一階段訓練出來的那部分權重, 只訓練剩下的層
  • We implemented T and S in Keras. We employed NVIDIA TITAN V GPU for training and NVIDIA Jetson TX2 for testing.
  • The training for each stage goes up to 30 epochs.
  • For both training stages
    • we utilize Adam Optimizer with 1e-4 learning rate.
    • We also applied Dropout with 0.25 dropout rate for regularizing the network.
  • For the data, we used KITTI and Malaga odometry dataset.
    • We utilized KITTI Seq 00-08 for training and Seq 09-10 for testing.
    • Before training, we reduced the KITTI image dimension to 192 × 640.
    • We only use Malaga dataset for testing the model that has been trained on KITTI.
    • For this purpose, we cropped the Malaga images to the KITTI image size.
    • Since there is no ground truth in Malaga dataset, we perform qualitative evaluation against GPS data.

結果

image.png

  • HT 表示使用的hint training方法
  • Final Obj. 表示最終使用的目標函數
  • Rec. Error 表示在hint training中的重建誤差
  • ATE 表示Absolute Trajectory Error(絕對軌跡誤差), ATE表示的是估計出來的軌跡與ground truth之間的絕對距離(評估之前使用相似變換進行alignment)

image.png

image.png

  • RMS: Root Mean Square
  • RPE: Relative Pose Error (RPE). RPE表示的是在一個固定長度的間隔內, 所估計的相機姿態到ground truth的平均誤差
  • ATE: 表示Absolute Trajectory Error(絕對軌跡誤差), ATE表示的是估計出來的軌跡與ground truth之間的絕對距離(評估之前使用相似變換進行alignment)

相關鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章