小議如何跳出魔改網路結構的火坑
- 2020 年 3 月 4 日
- 筆記
本文原載於知乎,已獲作者授權轉載,請勿二次轉載,
https://zhuanlan.zhihu.com/p/108838471
引言
0202 年,CV 領域已經相當內卷。
知乎上,如何設計一個網路擬合 xx 函數的討論層出不窮(e.g. 判斷一個數是奇數還是偶數、能否被 n 整除);
學術上,為了補充訓練集中缺少的先驗資訊網路結構被修改的搖搖欲墜:為了學習位置資訊(距離較遠的內容資訊)各種 Attention 層出不窮;為了應對旋轉(形變)資訊, STN 被嫁接在混亂的拓撲圖中;
對於 low-level 的任務,手動計算一個先驗的濾波器都不足為怪;對於 high-level 的任務,GCN 開始被廣泛用於捕捉樣本間(流形)上的關聯關係;
就在前幾天的 AAAI 上,老爺子還老當力壯,想要通過 capsule 網路改善 CNN 的種種弊病......
在這種內卷情況下,和 CV 領域頭部的大佬直接拼刺刀著實有些困難。畢竟,(虛假的)idea 好想但是不好 work。那麼如何跳出魔改網路結構的火坑呢?正如一個人有兩條腿走路,CV 領域也有模型和數據兩條腿。魔改模型不行,我們可以魔改數據集(跳入魔改數據集的火坑)!
回到 10 年前,特徵工程總比魔改 SVM 更直觀和有效,魔改數據集、在數據集中添加任務需要的先驗知識,比魔改模型結構更容易出成果(至少在競賽和我的部分科研實踐中如此)。
結合目前 semi-supervise 和 self-supervise 的發展,這裡總結一些魔改數據集的 baseline idea,祝大家論文年年有,今年尤其多~
自監督學習
在數據集中,標籤的數量和標籤蘊含的資訊往往是有限的。例如,在 ImageNet 上進行影像分類任務時,標籤能夠為模型提供圖片的類別資訊,即,這張圖片是貓還是狗。
但是,標籤並沒有顯式地指明,這張圖片表現的是一隻白色的貓還是一隻黃色的貓,是一隻正面拍攝的貓還是一隻側面拍攝的貓,貓的眼睛在貓的鼻子上面還是貓的鼻子下面等等。
對此,自監督希望充分利用數據的自身資訊,根據影像的結構或者特性,人為構造標籤進行訓練(這個過程被稱為 pretext 訓練)。pretext 訓練完後,再讓模型在有監督的數據集上 fine-tune,完成相關任務。
其實質是,儘可能人為地利用影像,學習影像中隱含的本質特徵。再用這種本質特徵作為先驗知識,指導學習相關任務。
目前,現有工作一般是基於「剔除-重構」策略構造標籤的。模型學習需要影像中某方面特徵時,就將該部分特徵從原圖中剔除掉作為標籤,再將被剔除掉部分特徵的影像作為模型的輸入,訓練模型重構被剔除的部分(標籤),從而學習到該方面的先驗知識。

LeCun 在 Energy-Based Self-Supervised Learning 中提到的「剔除-重構」策略
目前自監督學習的發展已經遠超 LeCun 當時的總結,異彩紛呈~這裡總結一些常用的先驗知識學習方法:
- 顏色資訊(Image Colorization)
- 高解析度資訊(Image Superresolution)
- 相對位置(內容)資訊(Image Inpainting / Context Prediction / Image Jigsaw Puzzle)
- 形變資訊(Geometric Transformation Recognition)
- 關聯資訊(Image Clustering)
1. 顏色資訊(Image Colorization)
要想學習物體的顏色作為下游任務的先驗知識,我們只需要在原圖的基礎上剔除顏色資訊,將原圖灰度化生成灰度圖,再訓練模型根據灰度圖重構原圖。這種策略在 Image Colorization 任務中很常見。
現有工作一般先對影像進行灰度化。

學習顏色資訊 step 1:在原圖的基礎上剔除顏色資訊
之後使用 Auto-Encoder 模型,將灰度圖作為輸入重構彩色圖。在訓練時,將重構的彩色圖與原圖的 MSE(L2 距離)作為損失函數,優化 Auto-Encoder 。
在訓練過程中,Auto-Encoder 能夠掌握影像中物體的顏色資訊,例如,天會被塗上藍色,山會被塗成綠色,雪會被塗成白色。Encoder 和 Decoder 都可以用在下游任務中取得較好的效果。

學習顏色資訊 step 2:訓練 Auto-Encoder 根據灰度圖重構原圖
[1] Colorful Image Colorization
[2] Real-Time User-Guided Image Colorization with Learned Deep Priors
[3] Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification
2. 高解析度資訊(Image Superresolution)
要想學習物體的高解析度資訊(細節資訊)作為下游模型的先驗知識,我們只需要在原圖的基礎上剔除細節資訊,將原圖縮放成小圖,並訓練模型根據小圖重構原圖。這種策略在 Image Superresolution 任務中很常見。
現有工作一般使用雙線性差值對影像進行縮放,得到原圖和其對應的小圖(縮略圖)。

學習高解析度資訊 step 1:在原圖的基礎上剔除細節資訊
之後使用 GAN 模型,將小圖作為輸入重構高解析度影像。在訓練時,將重構的高解析度影像與原圖的 MSE(L2 距離)、內容損失(Content Loss)和對抗損失作為生成器的損失函數,將二分類損失作為判別器的損失函數,將生成器和判別器進行對抗訓練。
在訓練過程中,生成器能夠掌握影像中物體的細節資訊,生成逐漸清晰的影像;判別器能夠掌握一張圖片的細節資訊是否準確,判別生成影像和原圖的差異。生成器和判別器都可以用在下游任務中取得較好的效果。

學習高解析度資訊 step 2:訓練 SRGAN 根據灰度圖重構原圖
[4] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
3. 相對位置(內容)資訊(Image Inpainting / Context Prediction / Image Jigsaw Puzzle)
影像中物體的上下文資訊、或是不同物體的相對位置資訊、亦或是遠距離物體的相關性在電腦視覺中扮演著重要的角色。在魔改網路結構時,為了學習這些資訊,我們往往會設計各種 Attention 模組。
在自監督學習中,我們可以顯式地讓模型學習這些資訊。目前,比較常見(我認為)有效的策略有三類。
第一種,要想學習物體的內容資訊作為下游模型的先驗知識,我們只需要在原圖的基礎上剔除某塊物體或區域,只保該留物體或區域的上下文,並訓練模型根據上下文重構原圖。這種策略在 Image Inpainting 任務中很常見。
現有工作一般先從影像中隨機選擇(或者通過物體檢測選擇)一塊區域摳出。

學習物體的內容資訊 step 1:在原圖的基礎上剔除物體或區域
之後使用 GAN 模型,將影像中摳出一塊區域所得的殘留圖(區域出現的上下文)作為輸入,訓練模型修復出完整影像。在訓練時,使用對抗損失作為生成器的損失函數,使用二分類損失作為判別器的損失函數,對生成器和判別器進行對抗訓練。

學習物體的內容資訊 step 2:訓練 GAN 根據上下文重構原圖(被剔除的物體或區域)
[5] Context encoders: Feature learning by inpainting
第二種方法認為物體中不同局部的相對位置比紋理更能表達內容資訊。例如,我們在觀察狗的時候,會發現狗的頭總在狗的身體上方。假如一種生物的身體在頭的上方,那麼這種生物肯定不是狗。
要想學習這種物體隱含的相對位置資訊,我們只需要在原圖的基礎上提取一個局部內連續的 9 塊區域(一個中心區域及其 8 個方向的相鄰區域),保區域內的紋理資訊,並訓練模型根據紋理預測區域在中心區域的哪個方向。這種策略在 Context Prediction 任務中很常見。
現有工作一般是將影像中物體所在區域切分成 9 個 Patch,記錄 8 個 Patch 與中心 Patch 的相對位置關係(如下圖,1 對應左上)。

學習物體內含的相對位置資訊 step 1:原圖的基礎上剔除物體或區域中包含的相對位置資訊
之後使用 CNN-based 的分類器,將中心區域和某一塊相鄰區域作為輸入,用共享權重的特徵提取器分別提取特徵,合併兩區域的特徵並通過 MLP 輸出相鄰區域相對中心區域的方向(例如 6 是下)。在訓練時,使用多分類損失作為損失訓練分類器學習相對位置資訊。

學習物體內含的相對位置資訊 step 2:訓練 CNN 根據紋理重構相對位置資訊
[6] Unsupervised Visual Representation Learning by Context Prediction
第三種,同樣是學習物體內含的相對位置資訊,我們還可以將原圖切分成 9 塊區域進行隨機打亂,並訓練模型預測這 9 塊區域被打亂的方式屬於哪種情況。這種策略在 Image Jigsaw Puzzle 任務中很常見。
現有工作一般先將影像分成 9 塊 Patch,定義對 9 塊 Patch 的 64 種打亂方式,每次從 64 種打亂方式里隨機選一種進行打亂。

學習物體內含的相對位置資訊 step 1:原圖的基礎上剔除物體或區域中包含的相對位置資訊
之後使用 CNN-based 的分類器(CFN),將 9 塊 Patch 作為輸入,用共享權重的特徵提取器分別提取特徵,合併 9 個 Patch 的特徵並通過 MLP 輸出打亂的方式屬於 64 種中的哪一種。在訓練時,使用多分類損失作為損失訓練分類器學習相對位置資訊。

學習物體內含的相對位置資訊 step 2:訓練 CFN 根據紋理重構相對位置資訊
[7] Unsupervised learning of visual representions by solving jigsaw puzzles
6. 形變資訊(Geometric Transformation Recognition)
CNN 有限的旋轉不變性一直飽受研究者的詬病,在一些工作中,學習到物體的旋轉角度顯得十分重要。在魔改網路結構時,為了學習這些資訊,我們往往嫁接 STN 模組。
在自監督學習中,我們可以顯式地讓模型學習這些資訊。一些工作提出根據原圖生成不同方向新影像(當然也可以理解為剔除不同旋轉角度影像中的旋轉角度得到原影像),並訓練模型根據新影像預測旋轉角度。這種策略在 Geometric Transformation Recognition 任務中很常見。
現有工作一般對影像進行 0、90、180、270 度的旋轉,生成新影像並記錄對應的旋轉角度。

學習旋轉資訊 step 1:原圖的基礎上生成不同方向新影像
之後使用 CNN-based 的分類器,將旋轉後的影像作為輸入,預測旋轉角度。在訓練時,使用多分類損失作為損失訓練分類器學習旋轉角度資訊。

學習旋轉資訊 step 2:訓練 CNN 根據新影像預測旋轉角度
[8] Unsupervised Representation Learning by Predicting Image Rotations
7. 關聯資訊(Image Clustering)
在訓練 CNN 時,樣本間的關聯關係往往會被忽視,但是在影像檢索等領域這些關聯關係卻對提高任務精度為重要。在魔改損失函數時,我們可能會用到 metric learning;
在魔改網路結構時,我們會使用 GCN 計算節點之間的相似度進行圖卷積。而在自監督學習中,我們可以顯式地讓模型學習這些資訊。
現有工作一般使用聚類演算法先對影像進行聚類,記錄聚類結果並將樣本標註上對應簇的標籤;(當然也可以理解為剔除相關樣本帶來的簇資訊)並訓練模型根據影像預測樣本所屬的簇。
相比於任務相關的類別標籤,簇所指向的標籤更符合數據本來的特徵(例如真假人臉分類可能會聚簇為男女),粒度可能也更細(例如貓狗分類可能會聚簇成不同顏色的貓狗等)。

學習樣本間的資訊 step 1:對影像進行聚類並記錄聚類結果作為標籤
之後使用 CNN-based 的分類器(CFN),影像作為輸入,預測影像所屬的簇。在訓練時,使用多分類損失作為損失訓練分類器學習樣本間的模式差異。

學習樣本間的資訊 step 2:訓練 CNN 根據影像預測簇標籤
[9] Deep clustering for unsupervised learning of visual features
半監督學習
前面我們提到,在數據集中,標籤的數量和標籤蘊含的資訊往往是有限的。而自監督希望充分利用數據自身,通過數據自身的結構或者特性,人為構造標籤進行訓練(這個過程被稱為 pretext 訓練)。
另外一些工作提出,在一部分數據集標籤未知的情況下,我們是否能夠根據已知樣本的標籤,人為構造任務相關的標籤進行訓練呢?這就是半監督學習的初衷。
有些同學會說,我們的數據集都是 banchmark,都是有監督的數據集,我們是否還需要半監督方法呢?答案是肯定的。
在科研過程中,如果模型在某個數據集上表現尷尬,而創意卻很難割捨,我們(的朋友)往往會選擇擴充數據集構造一個新數據集進行驗證。
但是擴充的數據集往往缺少標籤(錢),這時半監督的方法對比不失為一種選擇。即使是在比賽中,外部數據集也經常會被摻雜在任務數據集中提高模型的泛化能力(甚至是在頻譜分類數據集中摻雜 Flickr)。
這時的外部數據集八成是沒有任務相關的標籤了,我們就需要半監督學習來救場,生成任務相關的標籤。
根據生成標籤所代表的「指導方向」的不同,這裡總結一些半監督學習的方法:
- TODO

