2021 BDCI 華爲零售商品識別競賽一等獎方案分享

【GiantPandaCV導語】上學期快結束的時候參加了華爲和CCF組織的零售商品識別的比賽,隊伍名稱爲GiantPandaCV隊,比賽大約持續了兩個月,期間從開始摸索MindSpore框架,配置環境,上手ModelArts花費了不少功夫。現在比賽終於告一段落,本文進行一下覆盤。

背景

CCF大數據與計算智能大賽(CCF Big Data & Computing Intelligence Contest,簡稱CCF BDCI)由中國計算機學會於2013年創辦。大賽由國家自然科學基金委員會指導,是大數據與人工智能領域的算法、應用和系統大型挑戰賽事。大賽面向重點行業和應用領域徵集需求,以前沿技術與行業應用問題爲導向,以促進行業發展及產業升級爲目標,以衆智、衆包的方式,匯聚海內外產學研用多方智慧,爲社會發現和培養了大量高質量數據人才。

本賽題識別對象是零售商品,使用的數據集是RP2K數據集,RP2K是品覽基於零售商品識別能力發佈的零售數據集。不同於一般聚焦新產品的數據集,RP2K收錄了超過50萬張零售商品貨架圖片,商品種類超過2000種,該數據集是目前零售類數據集中產品種類數量TOP1,同時所有圖片均來自於真實場景下的人工採集,針對每種商品,我們提供了十分詳細的註釋。

RP2K數據集(https://arxiv.org/pdf/2006.12634.pdf)具有以下特性:

(1) 迄今爲止,就產品類別而言,它是規模最大的數據集。

(2) 所有圖片均在實體零售店人工拍攝,自然採光,符合實際應用場景。

(3) 爲每個對象提供了豐富的註釋,包括大小、形狀和味道/氣味。

數據分析

數據集中的一些樣本如下圖所示,大部分分佈是細長的,長寬分佈要比ImageNet等數據集更加分佈不均勻:

此外,該數據集的數據量和類別數量也非常多,下圖展示了RP2K和其他零售數據集的對比,RP2K具有2388個類別的零售商品,屬於大規模分類問題。

此外,數據集某一些類間分佈差異較小,相同品牌不同子產品之間差異較小,可以歸屬爲細粒度分類問題。數據質量也存在一定的問題,比如光照,包裝差異,拍攝角度,標註錯誤等等問題。

經過統計,該數據集呈現明顯的長尾分佈:

數據預處理

1. Resize策略

Structure-Retention Resize策略,保留原有的結構化信息。性能上能夠提升3個百分點,如下圖所示,也就是padding黑邊的方式。這個策略在比賽初期是最有效的策略,比傳統的resize方法能夠提高3.17%個百分點。

2. 數據增強

我們測試了三種經典的數據增強方法:

  • Cutout數據增強策略,在隨機位置Crop正方形Patch。
  • AutoAugmentation策略,使用了針對ImageNet搜索得到的策略。
  • Random Erasing策略,隨機擦除原圖中的一個矩形區域,將區域內部像素值替換爲隨機值。

實驗效果如下:

3 後處理方法FixRes

採用了NIPS19年Facebook提出的FixRes的後處理技巧,ImageNet上經典的數據增強方式會導致訓練時和測試時的模型看到的目標尺寸出現差異。

之前寫過一篇文章解讀FixRes詳細內容可以看這裏:

xxx

https://blog.csdn.net/DD_PP_JJ/article/details/121202386?spm=1001.2014.3001.5501

簡單來說是由於ImageNet經典的數據處理方法會導致Region of Classification,即模型看到的目標尺寸不同。

可以看到,下圖中通過訓練和測試過程得到的“7喜”的logo標誌大小存在差異,爲了彌補兩者差異,最簡單的方式是提高測試過程中分辨率。

FixRes有三步流程:

  • 第一步,正常以224分辨率進行訓練
  • 第二步,將測試分辨率調高到280
  • 第三步,固定backbone,只對Linear層進行finetune。

具體實驗結果如下:

模型改進

1 模型選擇

由於數據集規模比較大,爲了快速測試各個模型的有效性,使用了50%的數據進行快速驗證,驗證選擇的模型包括:

  • ResNet50_BAM

  • ResNet50

  • ResNet101

  • ResNet_CBAM

  • SEResNet50

  • Swin Transformer

  • EfficientNet

  • SEResNeXt50

  • Inception_resnet_v2

我們最終選擇了SEResNeXt50作爲主要模型,並配合ResNet50_CBAM還有Inception_resNet_v2進行模型集成。Swin Transformer和EfficientNet兩個模型由於其運行速度太慢,在比賽時間限制下沒有使用兩者。

SEResNeXt模型有兩部分構成

  • ResNeXt在ResNet基礎上引入了基數, 通過引入組卷積讓模型能夠學到更diverse的表示。
  • Squeeze & Excitation Module讓模型能夠自適應地調整各個通道的重要程度,學習到了通道之間的相關性,提升模型表達能力。

2 模型改進

模型改進部分是一個簡單而符合直覺的方法,我們觀察到,現有的大部分模型都是針對ImageNet進行設計的,而ImageNet類別數爲1000個類別,但RP2K數據集規模比較大,擁有2388個類別。

我們關注大多數模型的最後一個linear層的設計,針對ImageNet設計的模型的Linear層通常由2048維度映射到1000維度,由高緯度映射到低緯度比較合理。

但是由於RP2K的規模較大,類別數量爲2388,直接由2048映射至2388可能會導致容量不夠的問題,由低緯度映射映射至高緯度則不太符合直覺。

針對此,我們進行了簡單而符合直覺的改進,如下圖所示:

通過以上改進,擴充了模型的容量,取得了0.26%的提升。

3. 模型訓練細節

  • 使用label smooth來降低過擬合,更好地處理難分樣本。

  • 優化器使用SGD init lr=0.1

  • 調度器: Cosine Annealing mini lr=1e-6

  • Batch Size: 128 Epoch: 75

  • 混合精度:GPU O2 Ascend O3

  • 模型集成:(本次比賽不允許集成,但是這裏也展示了一下集成的效果)

  • SEResNeXt50(96.94)+ResNet50BAM(97.24%)+Inception_resnet_v2(96.35%) + TTA(HorionFlip) = 97.49% top1

錯例分析

在林臻幫助下,手工分析了一下錯誤樣例(注:以上分析去除了others類別錯分樣本),可以發現這個數據集比較難處理的是細粒度帶來的識別困難、疑似數據標註錯誤、以及長尾分佈的尾部類別,這也符合我們數據分析的結論。

MindSpore框架使用感受

本次比賽面向國產AI框架,基於MindSpore開發商品識別算法,必須在昇騰910平臺訓練和部署模型,以官方復現結果爲準。

使用MindSpore的感受:

  1. 優點:

    • 最大的優點,與昇騰平臺兼容好,訓練效率比較高。我們這邊沒有昇騰平臺,大部分實驗在GPU上跑的,後期進行驗證的過程中發現,GPU上運行速度要遠低於昇騰平臺運行速度(同一套代碼,唯一區別可能是O2與O3的區別),大概速度上能快接近一倍。

    • 支持動態圖和靜態圖,動態圖方面進行調試,靜態圖運行效率更高。

    • 社羣友好,加入了MindSpore高校網絡調試聯盟,其中負責復現Swin Transformer的作者@項靖陽等人的指點,在我們遇到一些坑的過程中能快速跳出來。

    • 快速開發,在擁有Pytorch經驗的基礎上,轉到MindSpore之後結合API查詢,可以比較快的上手。

    • 數據預處理部分與PyTorch不同的是,MS提供了c_transforms和py_transforms,經過實測c_transforms在數據處理速度上要比py_transforms快非常多,如果沒有特殊需要,還是建議使用c_transforms。

  2. 缺點:說幾個開發過程中缺點

    • 預訓練模型不太友好,個人感覺model zoo支持模型比較少,甚至有一部分數量的權重是基於CIFAR10訓練的,並沒有ImageNet訓練的模型,如果需要用的話還需要將PyTorch的權重轉換過來才能使用。
    • 動態圖運行效率非常低,這個坑浪費了我幾乎一天的時間,調試的過程中忘記將動態圖轉化爲靜態圖了,然後發現運行時間翻倍,仔細一看GPU利用率非常低,仔細排查以後發現使用的是動態圖。由此看來MS的動態圖支持(GPU上的)效率不是很高,我們轉化爲靜態圖之後瞬間利用率高了很多。
    • 封裝過程略深,官方推薦的運行方式其實更接近於Keras,構建callbacks來完成訓練過程的處理。(當然官方也支持像PyTorch那種展開的寫法)

最後對MindSpore感興趣的小夥伴可以使用以下的參考資料快速上手:

開源代碼

GiantPandaCV隊比賽的全部源碼已經開源,收集了非常多的模型,歡迎嘗試。

Github地址:https://github.com/pprp/GoodsRecognition.MindSpore

Gitee地址:https://gitee.com/pprp/GoodsRecognition.MindSpore

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