Unsupervised Pre-Training of Image Features on Non-Curated Data論文研讀

Abstract

目前大多數非監督的特徵學習的數據集一般都是小且經過精挑細選的,比如說ImageNet,因爲評估transfer task的時候使用non-curated的原數據會降低特徵的質量.
這篇文章的目的就是去研究在non-curated的數據下的非監督學習的方式.針對這一問題,提出了一種新的無監督方法,即利用自監督和聚類的方法來獲取大規模數據中的complementary statistics。我們對來自YFCC100M的9600萬張圖像進行了驗證.在無監督的基準測試方法中取得state of art的效果.
我們還證明,用我們的方法訓練一個監督的VGG-16(使用deepercluster得到的卷積層的權重進行對網絡進行初始化),在imagenet的驗證集上達到了74.9%的top-1的分類精度,比從頭開始訓練的網絡(vgg-16)提高了+0.8%。

1.Introduction

獲得大量標註的圖像很困難,所以無監督學習的方法就很重要了.
最近的一些工作都展示了無監督學習的方式的效果和有監督的的方式越來越靠近了.然而,他們都是訓練在ImageNet上面的,而訓練的方式就是簡單的刨除了標籤,但是它僅僅還是移除了人類的監督(標籤),但是ImageNet裏面的數據還是經過精挑細選的,並且裏面的類別都是balance的,所有這篇文章主要是在沒有經過這樣處理的YFCC100M的數據集上做的,這個數據集裏面包括了9900萬的沒有標註且不是精挑細選的從Flickr這個圖像分享網站上面的圖像.這個數據集是unbalanced的,類別數呈現"long-tail"分佈(這正是和ImageNet相反的地方),比如guenon這個類別和baseball這個類別在ImageNet上面都是1300張,但是在YFCC100M裏面,一個是226張,一個是256758張,非常的unbalanced.
我們提出了一種新的無監督方法,專門用來利用大量的原始數據,事實上,關於大規模的non-curated數據的訓練需要(一)模型的複雜性隨數據集的大小而增加;(二)模型對數據分佈變化的穩定性。一個簡單而有效的解決方案是將無監督學習的兩個領域的方法結合起來:聚類和自監督學習.
由於聚類方法,如深度聚類,是從圖像間(inter-image)的相似性來建立監督,所以當圖像數量增加時,手頭的任務就變得更加複雜。此外,當聚類的數量隨數據集的大小變化時,DeepCluster可以捕捉到圖像之間更細微的關係。聚類方法在推斷目標標籤的同時,特徵也在被學習。因此,目標標籤在訓練過程演變,所有使得基於聚類的方法不穩定。(大概意思就是每訓練一次就聚類一次,每次學習到的特徵都在變,讓再將特徵聚類,所有基於聚類的方法不是很穩定).此外,這些方法直接依賴底層數據的簇結構,因此對數據分佈非常敏感(比如上面提到的long-tail)。假設我們知道潛在類的分佈,顯式地處理不平衡的類別分配可能是一個解決方案.但是我們這個方法是不知道潛在類的分佈的.另一方面,自監督學習是通過從輸入信號中自動提取預測僞標籤來設計一個pretext task.換句話說,自我監督的方法,如RotNet,利用圖像內部(intra-image)的統計信息來建立監督,這通常與數據分佈無關。然而,數據集的大小對任務的性質和結果特徵的性能幾乎沒有影響.利用較大數據集的解決方案需要手動增加自我監督任務的難度.我們的方法通過聚類策略自動地增加複雜性。
在這裏插入圖片描述
(簡單的介紹一下這個表:RotNet是利用圖像內部(intra-image)的統計信息來建立監督,這通常與數據分佈無關。所有對於long-tail類型的數據可能效果比較好,而deepcluster是利用圖像之間的統計信息來建立監督,對long-tail類型可能效果並不是特別好,.所以作者結合deepcluster和rotnet提出來deepercluster這一個模型.)

DeeperCluster,在自我監督的約束下,通過對整個數據集的特徵進行聚類,自動生成目標。由於原始數據的long-tail分佈,處理大數據集和學習大量的標籤是必要的,使得問題從計算的角度具有挑戰性。對於這一個問題,作者提出了層次公式去適應分佈式訓練.這種方式能夠去探索發現在tail部分潛在的種類.(可以去了解一下什麼是long-tail效應).雖然我們的框架是通用的,但在實踐中我們側重於將Gidaris(rotnet)等人[15]的旋轉監督分類任務與Caron(deepcluster)等人[6]的聚類方法相結合。圖1所示,當我們增加訓練圖像的數量時,特徵的質量會提高並超過那些在curated數據集上沒有標籤的訓練圖像的質量。

2.Related Work

Self-supervision
自監督學習從輸入信號中建立一個pretext task來訓練一個不帶標註的模型。現在提出了很多pretext task,其中包括利用空間上下文、跨通道預測或視頻的時間結構。一些pretext task明確地鼓勵表示對特定類型的輸入轉換是不變的或有區別的。例如,Dosovitskiy等人的認爲每個圖像及其轉換是一個類,以強制數據轉換的不變性。在這篇論文中,作者建立在Gidaris(rotnet)等人的工作上,他們的模型鼓勵特徵對於圖像的旋轉是有區別的。最近,Kolesnikov等人在不同的卷積網絡架構產生了了一個廣泛的自監督學習方法的benchmark。與我們的工作相反,他們使用curated數據集進行預培訓。
Deep clustering
聚類、密度估計和降維是無監督學習方法的一家子。人們曾嘗試使用聚類來訓練convnets。我們的論文以Caron(deepcluster)等人的工作爲基礎,其中k-means被用來聚類視覺表示。與我們的工作不同,他們主要專注於使用沒有標籤的ImageNet來訓練他們的方法。最近,Noroozi等人的表明,聚類也可以作爲一種distillation(蒸餾)的形式來提高自我監督訓練的網絡的性能。與我們的工作相反,他們只是把聚類作爲一個後處理步驟,並沒有利用聚類和自我監督之間的互補性來進一步提高特性的質量.
Learning on non-curated datasets
一些方法旨在從non-curated的數據流中學習視覺特徵。它們通常使用諸如散列標記或地理定位之類的元數據作爲嘈雜的支持。特別是Mahajan等人,訓練了一個網絡,將數十億的Instagram圖片分類爲預定義的乾淨的標籤集。它們表明,在幾乎不需要人爲干預的情況下,學習一些能夠很好地傳遞給大腦的功能是可能的,如果fine-tuned得好,能達到最先進的性能(SOTA)。與我們的工作相反,他們使用一個必須清理的外部監督來源.

3. Preliminaries

在自監督學習中,使用pretext task直接從數據中提取目標標籤。這些標籤可以採取多種形式。它們可以被歸類爲與一個多類問題相關的類別標籤,比如預測旋轉的角度.
假設我們有一組n個圖像{x1,…,xN}我們爲每個輸入分配一個pseudo-labels(僞標籤)。鑑於這些pseudo-labels,我們學習的參數θ(卷積層的參數)會同線性分類器V預測pseudo-labels解決這個問題:
在這裏插入圖片描述
yn是聚類生成的僞標籤,fθ(xn)是卷積層提取出來的特徵,經過分類器V之後得到預測的標籤,將聚類的僞標籤yn作爲真實標籤,去優化θ和V.在優化過程中,僞標籤是固定的,學習過程的質量完全取決於它們的相關性.
Rotation as self-supervision
Gidaris等人最近的研究表明,當訓練一個卷積神經網絡來區分不同的圖像的旋轉角度(0,90,180,270)時,可以獲得良好的特徵。我們借鑑了他的pretext task:RotNet,這個網絡在自我監督學習這一塊表現的很好,這個pretext task與一個多分類相連:分爲0,90,180,270這四類.每一個在公式1中的輸入xn都被隨機旋轉,並且與標籤yn相關聯,yn代表着旋轉的角度.
Deep clustering
基於聚類的深層網絡方法通常通過對convnets生成的可視化特徵進行聚類來構建目標類(target classes)。因此,在訓練過程中,標籤會隨着特徵表示的變化而更新,並且在每個時代可能會有所不同.在這種情況下,我們定義了一個潛在的僞標籤zn在Z的每個圖像n以及相應的線性分類器W.這些clustering-based方法交替學習參數θ和W 和更新僞標籤zn,在兩次重新分配之間,固定僞標籤zn,通過優化參數θ和分類器W,去解決:
在這裏插入圖片描述
與式(1)的形式相同,通過最小化輔助損失函數,可以重新分配僞標籤zn。這種損失有時與Eq.(2)一致,但也有一些工作提出了另一的objective.
Updating the targets with k-means
在這項工作中,我們重點研究了Caron(deepcluster)等人提出的深度聚類的框架,其中利用k-means對活動進行聚類來獲得潛在標籤。更準確地說,通過求解以下優化問題,實現了目標zn的更新:
在這裏插入圖片描述
C是一個矩陣,其中每一列對應一個聚類中心, k是聚類中心的數目,zn是一個只有一個非零項的二元向量(裏面只有一個1,其實全是0,爲1的位置的索引就是預測的標籤類別)。該方法假設簇k的數量是先驗已知的;在實踐中,我們通過對下游任務(dowmstream task)的驗證來設置它。當目標最小化(2)時,潛在標籤在隨機梯度下降T個epoch之後再進行更新(2)。(聚類標籤每T個epoch之後才更新一次)

4.Method

在這一節中,我們將描述如何將自監督學習與深度聚類相結合,以擴展到大數據集圖像和標籤。
4.1. Combining self-supervision and clustering
我們假設輸入x1,…, xn爲被旋轉的圖像,每個圖像與一個編碼其旋轉角度的目標標籤yn和一個賦值爲zn的簇相關.在訓練過程中,隨着視覺表示(特徵)的變化,聚類產生的標籤也發生了變化.我們用Y表示可能的旋轉角度集合,用Z表示可能的簇分配集合。將自監督與深度聚類相結合的一種方法是將Eq.(1)和Eq.(2)中定義的損失相加。然而,把這些損失加在一起假定旋轉和聚類關係是兩個獨立的任務,這可能會限制可以捕獲的信號.相反,我們使用笛卡爾積空間Y×Z,它可以捕獲兩個任務之間更豐富的交互。我們得到如下優化問題:
在這裏插入圖片描述
請注意,任何聚類或自監督方法(多目標分類)都可以與這個公式相結合。例如,我們可以使用一個自我監督任務來捕獲有關圖像塊排列、或視頻幀排序的信息.但是,這一公式在combined target的數目上不具規模.其複雜度爲O(|Y||Z|),這限制了使用大數目的聚類或具有大輸出空間的自監督任務.特別是,如果我們想要捕獲包含在non-curated數據集tail分佈部分的信息,我們可能需要大量聚類數目。因此,我們提出了一個基於scalable的分級損失的方案它是爲適應分佈式訓練而設計的.

4.2. Scaling up to large number of targets Hierarchical

層次結構損失通常用於語言建模,其目標是從一個大的詞彙表中預測一個單詞。這些方法不是在完整的詞彙表上做出一個decision,而是將這個過程劃分爲一個層次的decision,每一個包含一個更小的輸出空間(split the process in a hierarchy of decisions, each with a smaller output space)。例如,詞彙表可以被分成語義相似的詞的簇,層次過程將首先觀察一個簇,然後在這個簇中觀察一個詞。
horizontal flip
按照這一流程,我們將目標標籤劃分爲一個2級層次結構,在這個層次結構中,我們首先預測(predict,這裏應該是predict嗎?)一個超類(super-class),然後在其關聯的目標標籤中預測一個子類。第一個層次是將圖像劃分爲S個超類(super-class),用yn表示圖像n的{0,1}S中的超類賦值向量,用yns表示yn的第s項.這個超類的分配是在top-feature上用一個線性分類器V來完成的。層次結構的第二級是通過對每個超類(super-class)內部的劃分來實現的。我們用屬於超類s的圖像n,用zns向量表示在{0,1}Ks的賦值表示ks的子類(意思就是講s個超類分成K個子類,這樣每一個樣本就有兩個標籤:S大類的標籤和K小類的標籤).有S個子類分類器W1,…,Ws.每一個都預測相對應的超類s中的子類成員。線性分類器的參數(V,W1,…,WS)和θ是通過最小化損失函數共同學習的,損失函數如下:
在這裏插入圖片描述
注意,不屬於超類s的圖像也不屬於這個超類的的ks子類.

Choice of super-classes.

一種自然的劃分方法是根據自監督任務的目標標籤來定義超類,並根據聚類生成的標籤來定義子類。然而,這將意味着整個數據集的每個圖像都將出現在每個超類中(具有不同的旋轉),這樣就不會利用層次結構的優點來使用更多的clusters.
相反,我們通過每隔T個週期在完整數據集上運行m個聚類中心的k- means來將數據集分割成m個集合。然後我們使用分配給這些m個簇和角度旋轉類之間的笛卡爾積來形成超類。有4m個超類,每個超類由屬於相應集羣的數據子集組成(如果集羣完全平衡,則爲N/m個圖像)。然後用k-means將這些子集進一步劃分爲k個子類。這相當於在完整的數據集上運行一個具有旋轉約束的層次k-均值聚類來形成我們的層次損失.我們通常使用m = 4和k = 80k,所有總共有320k個不同的集羣被分成4個子集。我們的方法“DeeperCluster”與DeepCluster有相似之處,但deepercluster是設計用於擴展到更大的數據集。我們在對非旋轉圖像特徵進行聚類和訓練網絡預測輸入數據的旋轉和與此旋轉對應的聚類之間的集羣分配之間進行了改變(這裏不知道咋翻譯的)

Distributed training

構建基於數據分割的超類有助於實現在圖像數量上良好擴展的分佈式實現。具體地說,在優化式(5)時,我們在p個gpu形成的的分佈式communication groups,其數目和超類的數目相同,即G = 4m。不同的communication group共享參數θ和超類分類器V,而子類的的參數分類器W1,…,WS僅在communication group內共享。每個communication group只處理圖像的子集和與超類s相關的旋轉角度。

Distributed k-means

每隔T個epoch,我們通過在整個數據集上運行兩次連續的k-means來重新計算超類和子類的賦值。這是通過在不同的gpu之間隨機分割數據集來實現的。每個GPU負責計算其分得的聚類分配,而聚類中心則在GPU之間進行更新。我們通過只sharing每個集羣分配的元素數量及其特性的總數來減少gpu之間的通信.然後根據這些統計數據計算新的聚類中心.我們從經驗上觀察到k-均值在10次迭代中趨於收斂。我們使用64個gpu(每次迭代1分鐘)將維度爲4096的9千6百萬個特徵聚類成m = 4個簇。然後,我們將這個gpu池分成4組,每組16個gpu。每個組將23M的特徵聚類成80k的聚類中心中(每次迭代4分鐘)

4.3. Implementation details

採用小批量隨機梯度下降,使Eq.(5)的損失最小化。每個小批處理包含3072個實例(什麼實例???),分佈在64個GPU中,所以每個小批處理每個GPU中有48個實例。我們使用了dropout, weight decay, momentum和一個恆定的學習速率0.1。我們每3個時代重新分配一次集羣。爲了加快訓練速度,我們在YFCC100M上訓練RotNet的權重來初始化網絡.

總結一下這個method(轉載的):

文章提出了一個基於大規模未處理數據的非監督feature學習方法:DeeperCluster。該方法受self-supervised learning和clustering 兩種方法的啓發:
1.Self-supervised learning。這類方法通過設計一個“輔助任務”來實現。“輔助任務”會在輸入數據上加上一個僞標籤,然後用一個網絡來預測這個僞標籤。例如:把輸入的圖片旋轉一個角度,然後預測旋轉的角度。(也可以是對圖片做一個transformation,然後預測出transformation)
3.Clustering。其實就是k-means聚類。通過k-means在圖片的feature空間上進行聚類,能給每個圖片設置一個類標籤,然後可以用一個網絡來預測這個類標籤。

這兩個方法,相當於用兩種不同的方式,”創造“出兩種不同類型的類的集合。假設用Self-supervised learning"創造“出來的類的集合是A,Clustering創造出來的類的集合是B,A和B的笛卡爾乘積爲C,用C來表示所有圖片的類型的集合(每張圖片從屬的兩個不同類型的類,組合成的新類,肯定在C裏面)。然後用一個網絡來預測圖片所屬的新類。通過這種方式,只需要用一個網絡,就可以預測兩個類型,把Self-supervised learning和Clustering結合到了一起。
Self-supervised learning採用了判斷圖片旋轉類型的方法(參考《Unsupervised representation learning by predicting image rotations》)。Clustering採用了分級的方式:先把所有圖片聚類成m個大類;再通過旋轉(總共有4中旋轉),把一個大類變成4個大類;最後每個大類內的圖片再聚類成n的小類。

用k-means在圖片的feature空間上進行聚類時,由於在訓練過程中,模型參數在不斷的更新,相當於feature提取器在不斷更新,所以圖片的feature空間也在不斷的更新。算法並不是每次更新模型參數時,都重新用k-means爲所有圖片重新聚類,而是每經過T個epoch重新聚類一次。

算法流程如下:
1.最終目的是要訓練出來一個好的特徵提取網絡。所以,先要初始化一個未訓練的特徵提取網絡,用來提取圖片feature。
2.用k-means對所有圖片(未旋轉)的feature進行聚類(clustering),分成m個大類。(每張未旋轉的圖片有了一個大類的標籤)
3.然後將這m個類的每一類分成k個類,對應4中的旋轉之後的圖像的僞標籤.
4.對m個大類進行擴展:用“旋轉角度的類型”(4種)和“m個大類“計算笛卡爾乘積,得到4m個新的大類。每張經過旋轉的圖片,只屬於4m個大類裏面的一個類型。(每張經過旋轉的圖片有了一個大類的標籤)
5.4m個大類的每個類,再分別使用k-means對屬於本類中的圖片的feature進行聚類,分成k個子類。(每張經過旋轉的圖片,在一個大類下面,又有了一個子類的標籤)
6.構建1個大類的分類器(4m個大類),每個大類下面再構造1個子類分類器(4個子類),總共1 + 4m個分類器。所有分類器分成兩部分:特徵提取網絡,分類網絡。不同分類器的特徵提取網絡是共享的,分類網絡各不相同。然後用Deeper Clustering loss來訓練,訓練T個epochs。
7.T個epochs後,重新回到第2步。

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