計算機視覺崗常見面試題
問題:Softmax+Cross Entropy反向求導
問題:BatchNorm層的詳細解讀(具體可以參考之后出版的百面深度學習2333)
-
作用:
- 使得每層的輸入/輸出分布更加穩定,避免參數更新和網絡層次變深大幅度影響數據分布。從而使模型訓練更穩定。
-
參數?β?和?γ的作用
- 保留網絡各層在訓練過程中的學習成果
- 保證激活單元的非線性表達能力
- 使批歸一化模塊具有復原初始輸出分布能力。
BN放在激活層之前還是之后
-
各種不同的Norm![各種不同的Norm]
問題:Conv+BN加速策略
在inference階段,可以將BN層的參數合并在之前的Linear或Conv層中,加速推斷時間(因為二者都是線性變換)。
w = module.weight.data
b = module.bias.data # conv的bias可以用全0代替
ws = [1] * len(w.size())
ws[0] = w.size()[0]
invstd = bn_module.running_var.clone().add_(bn_module.eps).pow_(-0.5)
w.mul_(invstd.view(*ws).expand_as(w))
b.add_(-bn_module.running_mean).mul_(invstd)
if bn_module.affine:
w.mul_(bn_module.weight.data.view(*ws).expand_as(w))
b.mul_(bn_module.weight.data).add_(bn_module.bias.data)
問題:目標檢測里如何有效解決常見的前景少背景多的問題
- 采用Focal Loss或OHEM進行負樣本挖掘,加大Hard Example損失權重
- 訓練時只利用Ground Truth周邊的Prior Boxes進行訓練,忽略其他背景區域,只考慮困難背景區域
問題:ROIPool和ROIAlign的區別,以及ROIAlign的簡單實現(不考慮并行,cpu串行即可)
- ROIPool存在兩次量化誤差,首先是將候選框邊界量化為整數點坐標值,其次是將量化后的邊界區域平均分割成 k x k 個單元,對每一個單元的邊界進行量化。ROIAlign通過雙線性插值避免了量化操作,保存了原始ROI的空間分布,有效避免了誤差的產生;對于檢測圖片中大目標物體時,兩種方案的差別不大,而如果是圖片中有較多小目標物體需要檢測,則優先選擇ROIAlign,更精準一些
問題: 斜著的矩形框如何求iou, 兩個多邊形的框如何求iou
首先要求解兩個多邊形的面積,方法見該鏈接
關鍵在于如何求出交集的面積
思路一
蒙特卡洛 + 采樣,近似求解交集的面積,但是中間涉及判斷點在不在多邊形內,判斷點是否在多邊形內
思路二
適合于兩個凸多邊形(非凸沒想到好的思路),凸多邊形可以看做是半平面的交集,因此兩個凸多邊形的交集,可以看作是(m+n)個半平面的交集(假設兩個凸多邊形分別有m個頂點和n個頂點),求出來半平面的交集(仍舊是一個凸多邊形)之后,求解該多邊形的面積即可。求解半平面交集
問題:BN在training和inference的時候有什么區別
- 在訓練時,我們可以計算出batch的均值和方差,迭代訓練過程中,均值和方差一直在發生變化。但是在推理時,均值和方差是固定的,對于均值來說直接計算所有batch u值的平均值,對于標準偏差采用每個batch σB的無偏估計。