1. 程式人生 > >【深度網路】Non-local Neural Networks

【深度網路】Non-local Neural Networks

博文參考了這篇博主的部分理解,傳送門:KFXW

Motivation

作者主要是想解決non-local的問題。在目前的深度網路中,一系列的卷積層構成了深度網路的主要架構,每一層網路可以理解為用一個核在該層輸入上做卷積操作,由於卷積核通常是1X1, 3X3這種固定的尺寸,這使得輸出feature map只能感受到對應輸入fearute map點上週圍點的資訊,當網路層數加深時,feature map的感受野才會慢慢增大。

這使得深度網路在融合非區域性資訊的時候,會有明顯的不足。此外,對於時序性的任務(視屏,語音,文字)而言,深度網路很難融合時序上的資訊,這對這些任務而言可以說是一種資訊浪費。

Contribution

基於以上原因,作者受non-local means的啟發,提出了一種非區域性模組(non-local block),這種模組可以將同一影象上相隔很遠的畫素點聯絡起來,也可以將視訊中前後幾幀中同一空間的畫素聯絡起來。

Non-local Neural Networks

首先看看文中對non-local 的定義:
這裡寫圖片描述
對於影象而言,Xi,Xj表示兩個畫素點,f 用來度量二者之間的關係,g 是一個只與Xj有關的函式。作者表示 f 和 g 的選取有很多種,示例中選取的 f 是一個高斯函式
這裡寫圖片描述
我的理解是可以認為 f 是一個相似性的度量,對與 Xi 相似的 Xj 給予更大權重。 g 是一個簡單的乘法:這裡寫圖片描述


C(x)相當於做了一個softmax。

non-local與卷積(conv)操作或者全連線(fc)的區別在與:
卷積操作每一層只能感知到卷積核大小區域的畫素,所以是 local的。而fc只能做固定size的全連線,non-local可用於可變的size上,此外,non-local對空間上變化敏感,而fc是用學習得到的固定權值(不知道是不是這麼理解)

這裡寫圖片描述
這是從上面那個博主那扒來的一張圖,詳細解釋了每一步操作對應的block中的結構,可以看到,整個non-local block可以嵌入在前向網路上,不會影響原始的主幹網路。

Implementation

這裡只簡單記錄一下在video上的實現,假如輸入是TxHxWx1024的feature map,然後用tx1x1的核去做卷積,這裡圖片序列是要做padding的,具體是用 0 padding還是用圖片padding不知道,沒實驗過。如果輸出是一張圖的feature map(1xHxWx1024),需要在輸出後再做一個卷積。

Experiment

實驗表格就不貼了,就是在各種model下普遍漲點,主要注意以下幾個結論:
1. Non-Local block放入網路主幹的位置:放在網路淺層效能提升更明顯,高層提升作用下降。
2. 對視訊任務而言,同時作用在時序和空間上(3D)比單獨作用於時序或空間上要好。