1.1FGVC介紹
FGVC全稱為Fine-Grained Visual Categorization,細粒度影像分類,即區分不同的動物和植物、汽車和摩托車模型、建築風格等,是機器視覺社群剛剛開始解決的最有趣和最有用的開放問題之一。細粒度影像分類在於基本的分類識別(物件識別)和個體識別(人臉識別,生物識別)之間的連續性。相似的類別之間的視覺區別通常非常小,因此很難用當今的通用識別演算法來解決。
今年是FGVC舉辦的第六屆比賽,往屆比較著名的比賽諸如iNaturalist和iMaterialist,前者側重於區分自然界不同的生物,後者則是側重於區分不同的人造物體。
不同於傳統的廣義上的分類任務,FGVC的挑戰致力於子類別的劃分,需要分類的物件之間更加相似,例如區分不同的鳥類、不同的植物、不同的日用品等。
1.2賽題介紹
Cassava Disease Classification挑戰賽是一個根據木薯的葉子區分不同種類的木薯疾病的任務。Cassava 譯為木薯,是非洲第二大碳水化合物供應者,因為其能夠承受惡劣的環境。因此木薯是小農種植的一種關鍵的糧食安全作物,在撒哈拉以南非洲,至少80%的小農家庭種植木薯,而病毒性疾病是低產量的主要來源。
在這次比賽中,主辦方引入一個包含5種類別的木薯葉疾病的資料集,該資料集源於在烏干達定期調查中收集到的9436標記影像,主要從農民在自家田地裡拍攝的圖片,然後由國家作物資源研究所(NaCRRI)與Makarere大學的人工智慧實驗室共同對影像進行標註。
資料集包括木薯植株的葉子影像,9,436張帶註釋的影像和12,595張未標記的影像。參與者可以選擇使用未標記的影像作為額外的訓練資料。目標是學習一個模型,使用訓練資料中的影像將給定的影像分類為這4個疾病類別或健康葉子的類別。
1.3團隊成績
1.4題目特點以及常用方法
細粒度影像分類 (Fine-grained image categorization), 又被稱作子類別影像分類 (Sub-category recognition)。 其目的是對屬於同一基礎類別的影像進行更加細緻的子類劃分, 但由於子類別間細微的類間差異以及較大的類內差異, 更傳統的影像分類任務相比, 細粒度影像分類難度明顯要大很多。從下圖中的木薯的葉子可以看出,不同的葉子病變情況長相非常相似,此外同一類別由於姿態,背景以及拍攝角度的不同,存在較大的類內差異。
細粒度影像分類的常用方法可以分為兩種,分別是基於強監督資訊的方法和僅使用弱監督資訊的方法。前者需要使用物件的邊界框和區域性標註資訊,後者僅使用類別標籤,Cassava Disease Classification是一種弱監督資訊的細粒度識別,一般採用預訓練模型finetune,並結合訓練技巧對模型精調。
1.5實驗模型:SENet、ResNet、DenseNet
ResNet是CNN歷史上一個里程碑事件,模型深度達到了152層,這和之前CNN的層數完全不在一個量級上。ResNet中的identity的這條線類似一條電路上的短路(shortcuts,skip connection),使得模型學習更加容易,深層可以直接得到淺層的網路特徵。
DenseNet的原理不同於ResNet透過加深網路層數以及Inception透過加寬網路寬度來提高模型識別能力,而是利用特徵重用和類似ResNet的Bypass的方式,減少了網路引數和緩解了梯度消失的問題。
SENet提出了Sequeeze and Excitation block,該模組於傳統網路的最大區別在於其側重於構建通道之間的依賴關係,利用global average pooling來Sequeeze特徵圖,並用Excitation對前者進行非線性變換,最後再疊加到輸入特徵上。可以自適應的校準通道的相應特徵,並且該模組可以嵌入到現有的網路結構中,實現精度的提升。
1.6模型訓練與評測。
由於訓練集樣本過少,對比分析後對輸入資料採取 VerticalFlip, HorizontalFilp 、RandomRotate和RandomCrop的增強操作。此外,還使用了RandomErasing和Cutout,方法會在原圖隨機選擇一些矩形區域,改變該區域的畫素值,透過這些資料增強的方式,訓練集的圖片會被不同程度的遮擋,這樣可以進一步降低過擬合的風險並提高模型的魯棒性。
同樣的,為了增強模型的魯棒性減少過擬合,本次比賽我們利用5-fold cross validation,交叉驗證有效利用了有限的資料,並且評估結果能夠儘可能接近模型在測試集上的表現。用cross validation之後,SE_ResNeXt50測試集準確率提升0.01016,ResNet34測試集準確率提升0.01142。
這次比賽中,我們還使用了Mixup和label smoothing的訓練策略。Mixup顧名思義就是將兩張圖片按一定比例融合起來作為輸入,計算loss時,針對兩張圖片的標籤分別計算,然後按比例加權求和。Mixup是一種抑制過擬合的策略,透過增加了一些資料上的擾動,從而提升了模型的泛化能力。
實驗證明,該方式能將Top1準確率提高近一個百分點。對於分類問題,常規做法時將類別換成one-hot vector。由於標籤是類別的one-hot vector,這樣做易導致過擬合使得模型泛化能力下降;同時這種做法會將所屬類別和非所屬類別之間的差距儘可能大,因此很難調優模型。為此,可以用label smoothing對標籤進行平滑處理,軟化one-hot型別標籤,使得計算損失函式時能有效抑制過擬合現象。
訓練以Adam為optimiser,學習率的設定為階梯狀,共四個取值,[3e-4, 1e-4, 1e-5, 1e-6],設定patience為4來衰減學習率,即模型連續4個epoch在驗證集上效果沒有提升則衰減學習率,訓練總的epcoh在20次左右。本實驗使用的GPU為4卡2080Ti,並行訓練一個模型,batch size通常設為32,較大的模型根據實際情況適當減小。
模型在預測時採用了資料增強的方式Test time augmentation(TTA),即將樣本影像進行多個不同的變換獲得多個不同的預測結果,再將預測結果進行平均,提高精度。本次任務利用3*TTA,包括 RandomCrop, RandomCrop+HorizontalFlip 和RandomCrop+VerticalFlip 。
模型整合是演算法比賽中常用的提高模型精度方法,本次比賽我們訓練了大量在ImageNet上表現優良的模型,其中表現較好的模型如下表所示、在採取多種融合方式之後,最終發現SE_ResNeXt50、SE_ResNeXt101、SENet154以及DenseNet201按照歸一化後權重的融合效果最好,在測試集上的準確率達到了0.92516。
模型 | 測試集準確率 |
SE_ResNeXt50 | 0.92251 |
SE_ResNeXt101 | 0.92384 |
SENet154 | 0.92384 |
DenseNet201 | 0.91721 |
MobileNetV2 | 0.91601 |
ResNet152 | 0.91710 |
SE_ResNeXt50+SE_ResNeXt101+SENet154+DenseNet201 | 0.92516 |
本次比賽主辦方提供了12595張未帶label的額外資料集,為了充分利用該資料集,利用在測試集表現最好的融合模型給這些資料集貼上偽標籤。然後利用訓練集和偽標籤資料集訓練模型,為了防止模型在偽標籤上過擬合,我們對偽標籤採取了一定的篩選操作。
採取的思路是:用多個不同機率閾值的過濾所得到的偽標籤進行線下實驗,看哪個閾值下的資料線上下的表現最好,就用透過該閾值篩選過濾出的資料,最終以0.95的閾值篩選出一半的資料作為新增到訓練集的偽標籤資料。
實驗證明這種半監督的學習方法具有更強的泛化能力。
模型 | 測試集準確率 (public leaderboard) | Private leaderboard |
SE_ResNeXt50 | 0.92251 | 0.93012 |
SE_ResNeXt50 with pseudo data | 0.92195 | 0.93512 |
SE_ResNeXt101 | 0.92384 | 0.93134 |
SE_ResNeXt101 with pseudo data | 0.92202 | 0.93409 |
SENet154 | 0.92384 | 0.93054 |
SE_ResNeXt154 with pseudo data | 0.92283 | 0.93428 |
SE_ResNeXt50+SE_ResNeXt101+ SENet154+DenseNet201 | 0.92516 | 0.93727 |
SE_ResNeXt50+SE_ResNeXt101+ SENet154+DenseNet201 with pseudo data | 0.92516 | 0.9386 |
1.7進一步工作
針對細粒度影像分類,MSRA有一個結論:分析該問題時影像的形態、輪廓特徵原沒細節紋理特徵重要,而傳統的CNN模型都是在構建輪廓特徵,因此在構建神經網路時,應該更加精確地找到影像中最有區分度的子區域,然後再對這些區域採用高解析度、精細化特徵的方法,這樣可以進一步提高細粒度影像分類的準確率。
另外對資料本身我們可能需要做更多的工作,在任務初期沒有做足夠的探索性資料分析,例如資料的分佈、型別、輸入影像的尺寸等都是影響結果的因素,因此資料分析也是後面的一個嘗試點。