PaddleClas預訓練模型ResNet50_vd_ssld精度突破84%

提到“野生動物非法貿易“大家一定不陌生,根據國際刑警組織的研究估算,每年和野生動物相關的非法貿易額高達200億美元,是僅次於毒品和軍火的全球第三大犯罪。打開這個潘多拉盒子,我們會發現這條血腥的產業鏈已經通過互聯網(社交媒體、電商平臺)從線下黑市走到了線上,交易觸點越來越多,打擊難度越來越大。

2020年“世界地球日”,百度與國際愛護動物基金會聯合發佈全球首個利用人工智能技術打擊野生動物製品非法貿易的平臺“瀕危物種 AI 守護官“,對互聯網上的野生動物圖片實時監控,協助相關部門及時發現犯罪隱患。

這一有溫度的工具,得益於百度飛槳工業應用級圖像分類套件PaddleClas的加持。2020年4月,飛槳正式開源PaddleClas,包含23個系列的分類網絡以及117個預訓練模型和性能評估,從數據增廣、骨幹網絡設計、損失定義、優化器設計、知識蒸餾、特徵遷移學習等不同的角度對圖像分類問題進行深入探索,助力圖像分類技術的產業落地。無論是瀕危動物保護、零售商品分類、眼疾識別還是農作物品質分級,從理想到現實,通過開源的PaddleClas,您都可以實現!

     

那麼在飛槳開源框架1.8版本中,PaddleClas又有哪些新變化呢?

1.8版本中PaddleClas增強了SSLD知識蒸餾方案(SSLD,Simple Semi-supervised Label Distillation)。實驗證明,使用更大尺度的圖像數據(標準爲224,這裏修改爲320)對ResNet50_vd_ssld模型進行微調,在ImageNet1k驗證集上的精度可達到84.0%。當前ResNet50_vd_ssld預訓練模型已經開源,即使開發者的數據數據量比較少,通過模型Finetune,也可實現高精度的圖像分類。Github地址:

https://github.com/PaddlePaddle/PaddleClas

那麼,84.0%的ResNet50_vd_ssld模型精度,PaddleClas是如何實現的呢?

衆所周知,在數據量足夠大的情況下,通過合理構建網絡模型的方式增加其參數量,是可以顯著改善模型性能。但是模型複雜度越高,意味着計算量越大,不單需要大量的計算資源,還會影響推理速度,影響產業應用。

這時大家開始思考,是否可以在不影響模型精度的情況下,減少其規模?

目前學術界有幾種模型壓縮方法可以減小模型的參數量,如:知識蒸餾、裁剪、量化等。知識蒸餾是指使用教師模型(精度更高、泛化能力強、模型相對複雜)去指導學生模型(參數量小、模型相對簡單)學習特定任務,保證小模型在參數量不變的情況下,得到比較大的性能提升,甚至獲得與大模型相似的精度指標。在傳統的蒸餾方案中,使用了一定的標籤信息,數據擴充的成本較高。PaddleClas融合目前常用的蒸餾方法,提出了一種簡單的半監督標籤知識蒸餾方案SSLD,其一大特色就是無需使用圖像的真值標籤,可以任意擴展訓練集的大小實驗證明,基於ImageNet1k分類數據集,使用SSLD蒸餾策略後,ResNet_vd和MobileNet系列模型上的精度均有超過3%的精度提升,如下圖所示。

SSLD蒸餾原理

SSLD蒸餾原理實現如下圖所示,其核心策略爲:大數據集訓練+ImageNet1k蒸餾Finetune。

第一步:引入ImageNet 22K數據集。將ImageNet 22k數據集與ImageNet 1k驗證集進行去重,防止訓練集中摻雜驗證集圖像。ImageNet 22K數據集中包含1400萬張圖片。

第二步:提取數據,生成訓練集。依據Top-k數據選擇方法從其中挑選出400萬張圖片,與ImageNet-1k訓練集整合在一起,得到一個新的包含500萬張圖片的數據集。

第三步:計算網絡的損失函數。將教師模型和學生模型輸出的soft label計算JS散度,作爲蒸餾模型的損失函數(在訓練時,固定教師模型的參數)。

第四步:ImageNet1k蒸餾Finetune。由於引入了額外的ImageNet22k數據集,導致ImageNet 1K訓練集和驗證集的數據分佈發生了變化。在模型蒸餾結束之後,需要在ImageNet1k數據集上進行模型微調,恢復訓練集與驗證集的數據分佈一致性。

關於Top-k數據選擇方法的介紹可參考:

https://github.com/PaddlePaddle/PaddleClas/blob/master/docs/zh_CN/advanced_tutorials/distillation/distillation.md

如此高精度的預訓練模型,代碼實現會不會很複雜呢?

手把手實踐

對於開發者來說,獲取足夠大的數據集進行模型訓練是件非常困難的事情。PaddleClas的ResNet50_vd_ssld預訓練模型的好處就在於,只少量數據,通過直接加載預訓練模型進行微調,也可以獲得高精度指標。下面我們以ResNet50_vd_ssld在圖像分類遷移學習的應用爲例,手把手教你如何使用PaddleClas。

注意:本操作過程需要在GPU環境下運行(可以在百度AI Stuido蹭個GPU算力)

1. 安裝飛槳(建議使用最新的1.8版本)。

2. 下載PaddleClas代碼庫並設置環境變量。

git clone https://github.com/PaddlePaddle/PaddleClas.git
cd PaddleClas
export PYTHONPATH=$PWD:$PYTHONPATH

3. 下載預訓練模型。爲了驗證模型精度提升效果,需要下載ResNet50_vd和ResNet50_vd_ssld兩個預訓練模型。

python tools/download.py -a ResNet50_vd -p ./pretrained -d 1
python tools/download.py -a ResNet50_vd_ssld_v2 -p ./pretrained -d 1

4. 下載並解壓Flowers102數據集,大約300M左右。

cd dataset/flowers102
wget https://paddlemodels.bj.bcebos.com/flowers/102flowers.tgz
wget https://paddlemodels.bj.bcebos.com/flowers/imagelabels.mat
wget https://paddlemodels.bj.bcebos.com/flowers/setid.mat
tar -xf 102flowers.tgz

5. 製作數據標籤文件並返回PaddleClas根目錄。

python generate_flowers102_list.py jpg train > train_list.txt
python generate_flowers102_list.py jpg valid > val_list.txt
cd ../../

6. 對ResNet50_vd預訓練模型進行微調。

export CUDA_VISIBLE_DEVICES=0
python -m paddle.distributed.launch \
    --selected_gpus="0" \
    tools/train.py \
        -c ./configs/quick_start/ResNet50_vd_finetune.yaml

最終輸出驗證集精度(Top-1 Acc)爲93.33%

7. 對ResNet50_vd_ssld預訓練模型進行微調。

export CUDA_VISIBLE_DEVICES=0
python -m paddle.distributed.launch \
    --selected_gpus="0" \
    tools/train.py \
        -c ./configs/quick_start/ResNet50_vd_ssld_finetune.yaml \
    -o pretrained_model=./pretrained/ResNet50_vd_ssld_v2_pretrained/

最終輸出驗證集精度爲94.61%

通過兩個預訓練模型在相同數據集的測試精度對比可以發現,在其參數相同的情況下, ResNet50_vd_ssld預訓練模型精度可提升1.3%。(說明:該數據集較小,因此在訓練時,指標可能會有少許波動)。

實現過程是不是很簡單,這就是1.8版本PaddleClas爲小夥伴們開源的 ResNet50_vd_ssld預訓練模型。

此外在目標檢測任務上,飛槳提出了一種面向服務器端實用的目標檢測方案PSS-DET(Practical Server Side Detection),它的圖像分類部分應用了ResNet50_vd_ssld預訓練模型。實驗證明,基於COCO2017目標檢測數據集,V100單卡預測速度爲爲61FPS時,COCO mAP可達41.6%;預測速度爲20FPS時,COCO mAP可達47.8%。

感興趣的同學可以參考:

https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/rcnn_enhance/README.md

隨着AI技術的不斷成熟和算力的發展,越來越多的深度學習方案會走出實驗室,實現產業應用,比如:垃圾分類、工業質檢、眼疾篩查等等。你有想法,飛槳有技術,希望小夥伴們天馬行空的創意能越來越多的在飛槳中實現。

Join us:飛槳爲深度學習愛好者提供了多個實習生崗位,如果您具有圖像處理、計算機視覺等科研背景,並願意與飛槳攜手,一起圓夢人工智能的未來,期待您的加入。

如在使用過程中有問題,可加入飛槳官方QQ羣進行交流:703252161

如果您想詳細瞭解更多飛槳的相關內容,請參閱以下文檔。

飛槳 PaddleClas 項目地址:

GitHub: https://github.com/PaddlePaddle/PaddleClas

Gitee: https://gitee.com/paddlepaddle/PaddleClas

PaddleClas文檔地址:

https://paddleclas.readthedocs.io

30分鐘玩轉PaddleClas:

https://paddleclas.readthedocs.io/zh_CN/latest/tutorials/quick_start.html

PaddleClas 快速體驗aistudio地址:

https://aistudio.baidu.com/aistudio/projectdetail/428501

官網地址:

https://www.paddlepaddle.org.cn

飛槳開源框架項目地址:

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee: 

https://gitee.com/paddlepaddle/Paddle

END

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