服裝標籤項目總結與心得
先放項目代碼倉庫:https://github.com/JosephPai/FashionAI-Attributes
強烈歡迎Star/Follow
關於代碼或者數據集如果有任何問題,歡迎大家本博客或者github issues留言一起交流學習
任務描述
從屬性標籤知識體系中拿出了8種重要的屬性維度對服裝進行標籤識別。
這些屬性維度是:頸線設計、領子設計、脖頸設計、翻領設計、袖長、衣長、裙長、褲長。
具體示意,見下圖:
針對八個不同的屬性維度,分別訓練了各自的分類器。
經驗總結
從零開始接觸這個任務到現在,一些不成熟探索的經驗
1.Pre-trained model
最開始接觸這個任務的時候,用了一個ResNet101網絡直接訓練,一方面訓練極慢,另一方面效果很差。
雖說訓練集有兩萬多張圖片好像看起來不是很少,但是對於CNN提取基礎的features來說還不夠,
更不用說和ImageNet weights相比。
導致模型完全overfit了訓練集,訓練集Acc達到95%+,測試集Acc約爲67%。
使用Pre-trained weights後,訓練過程收斂很快,效果也提升了很多。
準確率提升約’7-10%’
2. Data augmentation
數據增強對於提升模型的泛化能力有很強的作用。
但是在選擇augment類型時候,要針對特定任務有取捨,選錯了方法則適得其反。
比如屬性標籤任務中,可以大致分爲設計和長度兩大類(每一大類各包括四個屬性維度)。
通過一些實驗結果得出,比較適用於長度的增強方法:
- 顏色通道偏移 channel_shift
- 隨機旋轉 rotation
- 水平翻轉 horizontal_flip
這應該是比較通用的幾個增強方法了,適用於絕大部分分類任務
針對設計任務,在上面的基礎上,還可以增加
- 錯切,x座標(或y)保持不變,而對應的y(或x)按比例發生平移 shear
- 水平/垂直隨機放縮 zoom
可以想象,如果把垂直放縮方法應用到長度任務上,很可能會對模型造成負面影響
一些框架工具自帶的增強類型有限,可以用imgaug的python庫
準確率提升約’3-5%’
3. Backbone網絡的選擇
對於沒有特殊需求的圖片分類任務,個人覺得,
應該從AlexNet、VGG一路到ResNet再一路到NASNet進行排序,
根據自己的硬件條件選擇可以使用的最強的網絡
本次任務暫時選用DenseNet121作爲統一的Backbone
4. 利用人的先驗知識挖掘數據中的信息
例如長度任務,我們的知識告訴我們,這些長度是一個遞增的關係。
我們可以基於此設計一個weighted loss function。
weight權重是基於類間距離的,預測結果和正確結果差別越大,懲罰應該越大。
準確率提升約’1-1.5%’
值得一提的是,這次的數據集中,標籤中含有m(maybe)。
如果單純根據y標籤,進行one-hot編碼,則損失了m信息。
利用m標籤信息,編碼爲soft label(例如y 0.7, m 0.3)。使用此編碼方式時需要注意數據中可能存在多個m。
準確率提升約’1.5-2.5%’
5. Padding
一開始忘了對圖片進行padding操作,讀入之後直接resize了,好在數據集的圖片都比較友好
經丹陽哥提醒,進行了padding操作
準確率提升約’0.3%’(當數據集不夠規範時候,是否進行padding操作對結果影響要大很多)
6. Image Size
圖像的大小(分辨率)對於模型效果有很大影響,尤其在設計的維度
更大的圖像包含更多的信息
例如在collar design任務中,將Image size從320提升至448,準確率提升約’3%’
7. Attention
好的模型應該是自適應attention的。
在神經網絡學習過程中,應該能夠自動關注到對分類結果有影響的區域。
當然外力的attention驅動還是可以使模型更專注的關注到該區域。
只不過,當Image size越大,網絡越強,attention帶來的提升會相對越小。
基於heat map的attention使準確率提升約’1-2%’
熱度圖heat map的獲得一般參考Grad-CAM。
可視化熱度圖,對於理解模型原理,判斷模型是否真正有效,
以及attribute localization and manipulation有很強的指導意義。
8. 多任務聯合訓練
TODO
9. 調參
個人感受是,在模型基本固定的情況下,learning rate是最重要的參數。
一般先用Adam(1e-4)快速收斂
然後再用SGD(3e-5, 1e-5, 3e-6)等手動微調
訓練結果
屬性 | Accuracy | Precision |
---|---|---|
collar design | 87.3% | 86.8% |
lapel design | 90.1% | 89.6% |
neck design | 88.6% | 88.7% |
neckline design | 88.4% | 89.2% |
pant length | 84.5% | 83.4% |
skirt length | 81.3% | 81.7% |
sleeve length | 80.8% | 79.4% |
coat length | 78.2% | 78.3% |