整合一下能夠查到的資料,然后結合自己的理解,算是對這篇文章的一個小小的總結吧。這是CVPR2018的一篇關於小目標檢測的文章,出發點是作者認為小目標的檢測信息隨着層數的增加而不斷地丟失了,所以想利用語義分割強化淺層的特征信息(這里強化可能用得不准確,但是我是這么理解的)。整體的網絡框架分為三個部分Detection Branch (這里簡稱DB)+ Segmentation Module (這里簡稱SM)+ Global Activation Module(這里簡稱GAM)。SM和GAM本質上都是采用的語義分割的方式增強語義信息並且隨着SSD往更高層進行傳遞。
整體結構框圖:
操作過程以DB為主框架:1、在淺層網絡中選擇SM增強low level特征的語義信息。SM模塊的輸入是DB主框架的con4_3輸出以及用anchor定義的語義分割ground truth, 輸出再返回到con4_3作為下一層的輸入,這樣就可以將低層的語義分割結果融合到高層特征信息中。2、高層通過GAM增強high level的特征語義信息,GAM本質上也就是attention的思想,首先計算特征權重然后根據權重來融合多尺度的特征信息。
SM模塊是這篇論文中重點強調的一個模塊,這個部分主要有兩個作用,通俗點理解就是產生增強的語義信息並且通過訓練使得輸出的語義信息增強效果越來越好。其中H支路是輸入x在經過4個atrous convolution(既保證了特征圖的尺寸不變,也能減少卷積過程中的噪聲)卷積之后經過H()函數操作得到類似attention中的mask z,最后x與z做點乘得到,且以為后續檢測工作的輸入。F支路的作用是利用損失函數訓練H支路得到的attention,和分割算法類似,分割算法是針對每個像素點做分類,在F支路中訓練所用的ground truth中的每個像素點的標簽為對應ground truth框的標簽,如果一個像素點同時在多個ground truth框中,則該點的標簽為面積最小的那個框的標簽,其他情況的點標簽都是背景。
網上有一大堆對於sm模塊的公式分析,關於通道數以及維度之類的,個人覺得文章中提到的一大串公式里,最能體現出和語義分割關系的是公式:
F支路最后的輸出Y中每個點的通道數為N+1,這里的特征投影中每個點在所有的channel上的累加和為1,而且值最大的那個點對應的標簽就是分割得到的圖像中對應點的標簽。
圖4表示ground truth的生成方式,圖像中像素的標簽不需要額外再標注,圖2表示segmentation module,A是輸入圖像,B是輸出圖像經過特征提取之后的feature map,C是對應的輸出Z,D是B和C點乘之后的結果,也就是文章強調的需要增強的小目標的語義特征。
由GAM模塊的計算公式就可以很直觀的看出來和語義分割非常像,這個模塊主要包含三個操作:spatial pooling相當於給輸入的特征圖做了歸一化處理,而channel-wise learning則是利用兩層激活函數突顯了特征圖的權重信息,最后的broadcasted multiplying將S和輸入x點乘得到最后的輸出,類似於attention的思想。
整個損失函數包括檢測的損失函數和分割損失函數,分割的損失函數就是文章設計的SM模塊中的訓練損失函數。整體實驗效果雖然比同年CVPR的另外一篇文章低一點,但是結果還是很好的。