當前位置:
首頁 > 最新 > 實戰阿里天池競賽——服飾屬性標籤識別

實戰阿里天池競賽——服飾屬性標籤識別

近期阿里巴巴的天池演算法競賽平台上線了有著高額獎金的 FashionAI全球挑戰賽—服飾屬性標籤識別。第一名隊伍將得到高達 50 萬人民幣的獎金!是不是非常動心?

反正我是動心了,可能有很多小夥伴也動心了。

為了幫助躍躍欲試的大家更好地上手這次比賽,我寫了一個通過 訓練模型的教程,從配置環境開始一步步帶領大家訓練出不錯的模型。另外,我還提供一份能完整訓練並參賽的腳本,讓大家能夠基本不做修改就馬上進行訓練並提交成績。

比賽簡介

首先,讓我們來了解一下這個比賽的具體情況。主辦方此次給出了真實線上商城的服飾圖片,希望大家能夠設計一個演算法從圖片上讀出服飾的屬性。什麼是服飾的屬性呢?這裡的服飾屬性可以簡單地理解為不同的設計風格:對袖子來說,它的屬性就可能是無袖,短袖還是長袖;對於衣領來說,它的屬性就是娃娃領,襯衫領還是飛行員領等等。比賽的官方網站提供了如下的一張手繪圖片,讓大家更好地理解這個概念:

這次比賽分為初賽,複賽和決賽三個階段。目前還處於初賽階段,選手們能拿到的是八類服飾屬性的圖片數據,其中訓練數據大約為 7 GB,測試數據大約為 800 MB。初賽會一直持續到 4 月 21 日,名列前 100 名的同學將獲得晉級複賽的機會,屆時主辦方也將在複賽增加新的訓練數據。

我們可以將這次比賽視為八個獨立的圖像分類問題,可以對每一種服飾分別訓練一個模型。對於圖片分類問題而言,當下最流行的模型當屬卷積神經網路了。通過 ,我們可以快速地開發並訓練準確的卷積神經網路,進而在比賽中取得好的成績。

為什麼用 ?

是我們最近為 實現的 介面。你可能要問了,現在各路深度學習工具基本都有各自的 Python 介面,為什麼還要用 呢?

各個工具的 Python 介面大致可以分為兩類設計:符號式和命令式。如果用一句話來說明 的優勢,那就是:能拿到命令式介面的便利之處,但仍然可以享受符號式的速度優勢

使用命令式介面時,你可以方便地以 「pythonic」 的代碼搭建自己的模型與控制訓練過程。有過實踐經驗的同學們應該了解,深度學習模型的訓練是一個容錯率很低的過程,命令式的介面能讓用戶方便地開發與調試 Python 代碼。當然,這樣的設計會帶來一個眾所周知的問題:用純粹的 Python 代碼來訓練模型,可能會比較低效。

正因為命令式介面的效率問題,有不少介面選擇了符號式的設計。符號式介面更高效,然而實現代碼時通常需要經過下面的三個步驟:

定義計算流程

編譯成可執行的程序

給定輸入調用編譯好的程序

當然,符號式介面的弱點也很明顯,那就是難以實現與調試。

針對這兩個問題, 試著提出 一種解決方法,那就是以命令式介面的方法來寫代碼,然後還能以符號式介面的速度來訓練模型。特別地,這個特性對於比賽參賽者而言也是很有吸引力的,因為參賽者需要方便地嘗試各種模型、參數與技巧,同時也不能在模型訓練上消耗過長時間浪費自己的提交機會。

參加比賽

你如果被上面一段說服了,那麼就可以開始上手 ,準備參加比賽了。約兩周前,我公布了 這份代碼庫,希望能夠為大家參賽提供一個不錯的起點。

教程與樣例代碼

如果這是你的第一次深度學習競賽甚至是第一次深度學習實踐,那麼請閱讀參考 這一份教程。這份教程從環境配置出發,手把手地帶你走過數據下載與整理,模型訓練與分析等流程,最後也給出了一些提高成績的改動方向。

如果你就想要一份代碼跑跑看,先提交一次再說,那麼可以參考 這個代碼庫 中的 腳本來訓練。這份腳本的結果提交後能達到大約0.95的榜上成績,在這份代碼剛實現時可以進入前 20。當然,在代碼公布之後榜上分數水漲船高,為了進入前 100 參加複賽,大家需要付出越來越多的努力了。

遷移學習

在教程和樣例代碼中,我們選擇了遷移學習的思想來訓練模型。打個比方,遷移學習就是「站在巨人的肩膀上」,它的思路就是拿已經在別的數據上訓練好的模型來再次訓練。這樣做的一個好處就是模型的起點比較高,相當於有了很多額外的訓練數據,在比賽數據不是很豐富的情況下尤為有效。

我們為 用戶提供了很多種不同的預訓練模型,完整的列表和成績可以參考 官方文檔。在教程中,我們選擇使用在 ImageNet 數據集上訓練過的 ResNet50 V2 模型進行遷移學習。選擇遷移學習模型時一般會考慮資源佔用和準確率兩個因素:

資源佔用即再訓練模型所需要的顯存與耗時,一般會基於自己用來參賽的硬體條件來做相應選擇。

準確率即模型在原數據集上達到的成績,但要注意遷移學習並不保證原數據集上越準確的模型在新數據集上也一定越準確。

進階提高

相信這份樣例代碼只是各位的起點,為了達到更好的成績,選手們一般會嘗試各種各樣的改進。

下面我們給出關於如何改進的建議,你可以從它們出發,讓自己的成績更上一層樓:

調整參數,比如學習速率,批量大小,訓練循環次數等。

參數之間是有互相影響的,比如更小的學習速率可能意味著更多的循環次數。

以驗證集上的結果來選擇參數。

不同任務上的最佳參數可能是不一樣的,建議分別調整。

選擇模型

在手頭計算資源的限制下,嘗試效果更好的模型。

更全面的圖片增廣

可以考慮在訓練時加上更多的圖片增廣操作,例如色彩調整,增加噪音等。

集成學習

訓練多個不同的好模型,然後將它們的預測結果平均起來。

下一步

掃描或者長按下面QR碼來關注我們:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

橫寫起來很難嗎?
手機,見鬼去吧

TAG:全球大搜羅 |