ACCV2022|大規(guī)模細(xì)粒度圖像分類冠軍方案
作者丨ABCDEFG
編輯丨極市平臺
在剛剛結(jié)束的 ACCV 2022 國際細(xì)粒度圖像分析挑戰(zhàn)賽中,我們團(tuán)隊(duì)在?133?支參賽隊(duì)伍中脫穎而出,在?Leadboard-B?上以 2.5 的絕對優(yōu)勢取得冠軍。

在比賽過程中,我們使用了一些對細(xì)粒度分類十分有效的解決方案。
例如,在數(shù)據(jù)清洗方面我們?nèi)サ舳x性的圖片;
模型選擇和方法方面我們使用了 ViT-L和 Swin-v2;
為了提高實(shí)驗(yàn)效率,方便整個實(shí)驗(yàn)過程的管理,我們基于?MMSelfSup?和?MMClassification?兩個開源算法框架開展比賽。
所有的模型權(quán)重和全部代碼都已經(jīng)開源,歡迎大家使用。
本次賽事相關(guān)的所有預(yù)訓(xùn)練,微調(diào)以及推理的代碼和配置文件分別放在 MMSelfSup 以及 MMClassification 的 projects 中, 歡迎大家 star 和使用。
自監(jiān)督預(yù)訓(xùn)練部分:?https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/projects/fgia_acCV2022_1st
微調(diào)與模型推理:?https://github.com/open-mmlab/mmclassification/tree/dev-1.x/projects/fgia_acCV2022_1st
今天這篇文章我們將整體介紹此次奪冠的方案,希望為大家提供一些經(jīng)驗(yàn)以供參考。
比賽介紹
ACCV 2022 細(xì)粒度圖像分析挑戰(zhàn)賽是由南京理工大學(xué)和澳大利亞 University of Wollongong 主辦、極市平臺提供技術(shù)支持的國際性賽事。
本賽事涉及的細(xì)粒度圖像分析是計(jì)算機(jī)視覺和模式識別中的熱門研究課題,其目標(biāo)是對細(xì)粒度級別圖像中的物體子類(如不同種類的“狗”:“哈士奇”、“阿拉斯加”、“薩摩耶”)進(jìn)行定位、識別及檢索等視覺分析任務(wù)的研究,具有真實(shí)場景下廣泛的應(yīng)用價值。然而因細(xì)粒度級別子類別間較小的類間差異和較大的類內(nèi)差異,使其區(qū)別于傳統(tǒng)圖像分析問題成為更具挑戰(zhàn)的任務(wù)。
此次我們參加的賽題是:網(wǎng)絡(luò)監(jiān)督的細(xì)粒度識別,接下來我們將從數(shù)據(jù)清洗、模型選擇、訓(xùn)練技巧(Bag-of-tricks)、模型集成和后處理等角度介紹我們的方案。
數(shù)據(jù)清洗
官方提供的數(shù)據(jù)包含: Train、Test-A 和 Test-B。Train 是用于訓(xùn)練的數(shù)據(jù),這部分?jǐn)?shù)據(jù)官方提供了 label。同時因?yàn)檫@項(xiàng)比賽分為 A/B 榜,所以 Test A 和 Test B 分別是用于評測的數(shù)據(jù),這兩部分?jǐn)?shù)據(jù)是可以獲得的,但是他們的 label 是不提供的。
這幾部分的數(shù)據(jù)的詳細(xì)信息如下:
Train: 835K
Test-A: 60K
Test-B: 90K
對于用于訓(xùn)練的數(shù)據(jù) Train, 其分布如下:

可以發(fā)現(xiàn)該數(shù)據(jù)為長尾分布,其中最多類的數(shù)據(jù)有 422 張圖,最少類數(shù)據(jù)卻只有 3 張圖, 均值為 166 張。
除了以上的分布問題,訓(xùn)練數(shù)據(jù)還存在以下幾個問題:
有噪聲的圖片,數(shù)據(jù)集中存在大量的圖表圖片(如下面這些圖片所示)
有些圖片的分辨率非常小
有一部分圖片有多個 label
有些數(shù)據(jù)不可讀取



針對以上問題,我們嘗試了以下幾種方案:
成功的方案:
我們過濾掉這些不可讀取的圖片,一共 4687 張
根據(jù)哈希文件名,過濾掉這些具有多個 label 的圖片
我們不創(chuàng)建額外的 validation set,所有數(shù)據(jù)用于訓(xùn)練
無明顯效果的方案:
由于數(shù)據(jù)集是一個長尾分布,我們嘗試了 class-balanced sampler
采用聚類方法,將這些離群的異常值除去掉
模型選擇和方法
考慮到模型性能和速度,我們所有實(shí)驗(yàn)均采用 ViT-L 和 Swin-V2。方法總覽如下圖所示:

總結(jié)起來就以下幾步:
對 ViT-L [1] 和 Swin-V2 [2] 進(jìn)行自監(jiān)督預(yù)訓(xùn)練
使用預(yù)訓(xùn)練的權(quán)重進(jìn)行微調(diào)(fine-tunine)
然后對各個模型進(jìn)行集成
推理時候進(jìn)行數(shù)據(jù)的后處理
其中第 2 步和第 3 步通過自蒸餾的形式進(jìn)行迭代,自蒸餾是指本次訓(xùn)練得到的集成模型充當(dāng) teacher 對下一輪模型的訓(xùn)練進(jìn)行指導(dǎo)。
訓(xùn)練技巧
在分類微調(diào)(fine-tuning)的過程中我們使用了以下幾種策略:

模型集成
我們最終使用了 17 個模型進(jìn)行集成,其中包含 10 個 ViT-L 模型和 7 個 Swin-v2 模型,集成的權(quán)重根據(jù)模型在 Test A 上的精度,按比例得到??傮w來說就是,高精度模型權(quán)重更大,低精度模型權(quán)重更小。
后處理
因?yàn)楸荣愔杏姓f明,Train 集中的類別不平衡,但 Test 集中類別是按均勻分布的,所有對最后的預(yù)測結(jié)果,我們微調(diào)了標(biāo)簽的分布,調(diào)整前后的標(biāo)簽分布如下圖所示:

總結(jié)
最終,我們模型的消融效果如下圖所示:

代碼倉庫
考慮到效率和實(shí)驗(yàn)管理,我們選擇了?MMSelfSup?和?MMClassification,這兩個庫均來自于 OpenMMLab 開源框架。
此次賽事相關(guān)的所有預(yù)訓(xùn)練,微調(diào)以及推理的代碼和配置文件分別放在 MMSelfSup 和 MMClassification 的 projects 中, 歡迎大家 star 和使用。
自監(jiān)督預(yù)訓(xùn)練部分:?https://github.com/open-mmlab/mmselfsup/tree/dev-1.x/projects/fgia_acCV2022_1st
微調(diào)與模型推理:?https://github.com/open-mmlab/mmclassification/tree/dev-1.x/projects/fgia_acCV2022_1st

實(shí)驗(yàn)日志信息截圖