衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用深度學習做圖像分類?教給你教程和代碼

DPVg_AI_era ? 2018-04-06 00:24 ? 次閱讀

深度學習推動計算機視覺、自然語言處理等諸多領域的快速發展。在AI大熱和人才奇缺的今天,掌握深度學習成為進入AI領域研究和應用的必備技能。來自亞馬遜主任科學家李沐將以計算機視覺的經典問題——圖像分類為例,手把手地教導大家從0到1搭建深度神經網絡模型。對于初學者面臨的諸多疑問,提供了從環境設置,數據處理,模型訓練,效果調優的完整介紹和代碼演示,包括使模型快速獲得良好效果的常用方法——遷移學習。讓大家有一個全景和基礎的了解。

深度學習時代,網絡的加深使得對訓練數據集規模的依賴更勝以往。學術界較成功的大規模數據集通常圍繞基礎性的一般認知問題,離有日常有體感的應用場景較遠。時尚與人們日常生活息息相關,但行業大量內容仍然依賴人工編輯。通過引入人工智能技術來提升效率,讓機器來認知時尚將是一個有趣且有用的課題。

近期,阿里巴巴圖像和美團隊與香港理工大學紡織及制衣學系聯合舉辦了2018FashionAI全球挑戰賽,并在比賽中開放的FashionAI數據集,是首個圍繞衣食住行中的“衣”的大規模高質量數據集。該數據集包含八種不同服飾的圖片數據,選手們的任務之一就是設計一個算法對圖片中服飾的屬性做出準確判斷。例如其中的裙子類圖片,就分為不可見,短裙,中裙,七分裙,九分裙和長裙等總共六種屬性。我們可以將其視為經典的圖片分類問題,并通過卷積神經網絡來解決。

FashionAI數據集中使用的圖像數據,全部來源于電商真實場景,刻畫了在模型在真實場景應用會遇到的挑戰。在FashoinAI數據集上訓練的模型,既有學術研究價值,又能在未來實際應用,幫助識別服飾上的專業設計元素。對于計算機視覺研究者來說,不失為一個好的選擇。

本文將利用MXNet進行方法講解。MXNet是一個易安裝易上手的開源深度學習工具,它提供了一個python接口gluon,能夠讓大家很快地搭建起神經網絡,并進行高效訓練。接下來,我們將以比賽中的裙子任務為例,向大家展示如何用gluon從零開始,設計一個簡單而又效果好的卷積神經網絡算法。

亞馬遜主任科學家 李沐

環境配置

系統配置

對于深度學習訓練而言,用GPU加速訓練是很重要的。這次競賽的數據量雖然不算大,但是只用CPU計算可能還是會讓一次模型訓練花上好幾天的時間!因此我們建議大家使用至少一塊GPU來進行訓練。還沒有GPU的同學,可以參考如下兩種選擇:

根據自己的預算和需求入手(年輕人的第)一塊GPU。我們寫了一篇GPU購買指南[1],方便大家選購。

為了這次比賽租用亞馬遜云的GPU服務器。我們寫了一篇AWS的運行教程[2],幫助大家配置自己的云服務器。

配置好了硬件與系統之后,我們需要安裝Nvidia提供的CUDA與CUDNN,從而把我們的代碼與GPU硬件真正連接起來。這部分的安裝比較容易,可以參考這一部分[3]的指導。

如果選擇使用亞馬遜云服務器,那么我們建議在選擇系統鏡像時選擇Deep Learning AMI,這個鏡像把與GPU訓練相關的環境(CUDA,CUDNN)都已經配置好了,不需要做其他的配置了。

安裝MXNet

配置好了環境之后,我們就可以安裝MXNet了。有很多種方式可以安裝MXNet,如果要在Linux系統上為python安裝GPU版本,只需要執行:

就可以了。如果系統中安裝的是CUDA8.0,可以將代碼改成對應的mxnet-cu80。如果有同學想要使用其他的語言接口或者是操作系統,或者是自己從源碼編譯,都可以在官方的安裝說明[4]中找到符合自己情況的安裝步驟。在接下來的教程中,我們使用MXNet的python接口gluon帶領大家上手此次競賽。

數據處理

數據獲取

首先我們在當前目錄下新建data文件夾,然后從官網上將熱身數據集,訓練數據集和測試數據集下載到data中并解壓。比賽的數據可以從比賽官網[5]獲取,不過同學們要登錄天池賬號并注冊參加比賽之后才能下載。主要的數據集有三個:

fashionAI_attributes_train_20180222.tar是主要訓練數據,里面含有八個任務的帶標記訓練圖片。這份教程中我們只選用其中的裙子任務做演示。

fashionAI_attributes_test_a_20180222.tar是預測數據,里面含有八個任務的不帶標記訓練圖片,我們的目的就是訓練出模型之后在這份數據上給出分類預測。

warm_up_train_20180201.tar是熱身數據,里面含有與訓練集不重復的裙子訓練集圖片,是對訓練數據很重要的補充。在進一步運行前,請確認當前的目錄結構是這樣的:

注意事項:下載好的數據在解壓前與解壓后會各占用約8G的硬盤空間,在接下來的數據整理中我們會將數據復制為更方便的目錄結構,因此請預留足夠的硬盤空間。

因為圖片數據集通常很大,因此gluon不會一次性將所有圖片讀入內存,而是在訓練過程中不斷讀取硬盤上的圖片文件。請有條件的同學將圖片存在SSD硬盤上,這樣可以避免數據讀取成為瓶頸,從而大幅提高訓練速度。

首先,我們在data下新建一個目錄train_valid,作為所有整理后數據的目錄。

我們選用裙子數據的原因之一,就是熱身數據與訓練數據中都提供了它的訓練圖片,從而能讓我們能夠有更豐富的訓練資源。下面我們將分別從熱身數據欲訓練數據的標記文件中:

讀取每張圖片的路徑和標簽

將這張圖片按照它的標簽放入data/train_valid目錄下對應的類別目錄中

將前90%的數據用做訓練,后10%的數據用作驗證

第一步,讀取訓練圖片的路徑和標簽。

我們來檢查一下讀入的數據。image_path應該由路徑和圖片對應標簽組成,其中標簽是若干個n一個y組成的字符串,字母y出現的位置就是圖片對應的類型。

可以看出這張圖中的裙子是長裙,對應上官方的說明,可以發現與標記吻合。接下來,我們就準備好訓練集和測試集的目錄,以及6個裙子類別對應的子目錄。

運行后的目錄結構如下:

要想處理其他類型的服飾,只需要將task變量指定為對應的服飾類型名稱就行了。最后,我們將圖片復制到各自對應的目錄中。需要注意的是,這里我們刻意隨機打亂了圖片的順序,從而防止訓練集與測試集切分不均勻的情況出現。

遷移學習

數據準備完畢,接下來我們可以開始著手設計算法了。

服裝的識別可以被視作計算機視覺中的經典問題:圖片分類。一個典型的例子是ImageNet數據集與ILSVRC競賽,其中選手們要為分別從屬于1000個類別的逾1400萬張圖片設計算法,將它們準確分類。在服飾屬性判別競賽中,我們可以認為不同屬性的服飾從屬于不同的類別,于是便能參考ImageNet中的優勝算法來參賽。

在初賽階段,主辦方給每類服飾各提供了約一萬張圖片用來訓練,這樣的數據量還不足以讓我們從零開始訓練一個很棒的深度學習模型。于是我們可以借用遷移學習的想法,從一個在ImageNet數據集上被訓練好的模型出發,一點點把它改造成“更懂衣服”的模型。如下圖所示,左邊的是在ImageNet數據集上訓練好的網絡,右邊的是我們即將用來參賽的網絡,這兩個網絡主體結構一致,因此我們可以將主要的網絡權重都復制過來。因為兩個網絡在輸出層的分類個數與含義都不一樣,我們需要將輸出層重新定義并隨機初始化。

在ImageNet數據集上,大家主要用卷積神經網絡,而在過去的幾年中也出現了很多不同的網絡架構。gluon官方提供了許多不同的預訓練好的卷積神經網絡模型,我們在這個比賽中選擇效果比較好的resnet50_v2模型作為訓練的出發點。關于遷移學習更詳細的介紹可以參考gluon中文教程中的Fine-tuning:通過微調來遷移學習[6]一節。

首先,我們準備好需要用到的環境。

下面我們可以一句話導入預訓練好的resnet50_v2模型。如果是首次導入模型,代碼會需要一點時間下載預訓練好的模型。

在ImageNet上訓練的模型輸出是1000維的,我們需要定義一個新的resnet50_v2網絡,其中

輸出層之前的權重是預訓練好的

輸出是6維的,且輸出層的權重隨機初始化

之后,我們可以根據具體的機器環境選擇將網絡保存在CPU或者是GPU上。

在上面代碼中的最后一行我們調用了hybridize,這是gluon的主要特性之一,能將命令式編程構建的模型在執行時把大部分運算轉成符號式來執行,這樣一方面提高了開發效率,同時也保證了運行速度。關于hybridize更詳細的介紹可以參考gluon中文教程中的Hybridize:更快和更好移植[7]一節。

接下來我們定義幾個輔助函數,它們分別是

計算AveragePrecision,官方的結果評價標準。

訓練集與驗證集的圖片增廣函數。

每輪訓練結束后在測試集上評估的函數

關于圖片增廣更詳細的介紹可以參考中文教程中的圖片增廣[8]一節。

下面我們定義一些訓練參數。注意,在遷移學習中,我們一般認為整個網絡的參數不需要進行很大地改動,只需要在訓練數據上微調,因此我們的學習速率都設為一個比較小的值,比如0.001。

為了方便演示,我們只循環兩輪訓練,展示過程。

接下來我們可以讀入數據了。經過之前的整理,數據可以用接口gluon.data.DataLoader讀入

下面我們定義網絡的優化算法和損失函數。這次比賽中我們選用隨機梯度下降就能得到比較好的效果。分類問題一般用交叉熵作為損失函數,另外,我們除了mAP指標之外也關心模型的準確率。

至此萬事俱備,我們可以開始訓練了!再次提醒,這里為了快速演示,我們只做兩次循環,為了達到更好的訓練效果請記得將epochs調大。

訓練結束了,那效果怎么樣呢?我們可以直接拿幾張測試集的圖片出來,用人眼對比一下看看預測的類型是否準確。

可以看到,雖然只有兩輪訓練,但我們的模型在展示的幾張圖片上都做出了正確的預測。

總結

至此,我們展示了從數據整理直到作出預測的樣例代碼。你可以從這里開始,不斷地改進代碼,向著更好的結果出發。也建議大家去下載FashoinAI數據集,直接用實踐本文中所學習到的技巧。下面我們給出一些可以改進的方向,你可以從他們開始著手:

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

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

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

不同數據的最佳參數可能是不一樣的,建議對每個任務選取相應的最佳參數

2.選擇模型。除了ResNet模型之外,gluon還提供很多其他流行的卷積神經網絡模型,可以到官方文檔根據它們在ImageNet上的表現進行選擇。

在計算資源有限的情況下,可以考慮選用占內存更小、計算速度更快的模型。

3.更全面的圖片增廣可以考慮在訓練時加上更多的圖片操作。image.CreateAugmenter函數有很多其他的參數,不妨分別試試效果。

在預測時將預測圖片做不同的裁剪/微調并分別預測,最后以平均預測值為最后答案,可以得到更穩健的結果。

特別感謝:作者/亞馬遜主任科學家 李沐

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4780

    瀏覽量

    101174
  • AI
    AI
    +關注

    關注

    87

    文章

    31530

    瀏覽量

    270342
  • 深度學習
    +關注

    關注

    73

    文章

    5515

    瀏覽量

    121553

原文標題:MXNet 作者李沐:用深度學習做圖像分類,教程+代碼

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    討論紋理分析在圖像分類中的重要性及其在深度學習中使用紋理分析

    地執行基于紋理特征的分類任務。為了讓深度學習在基于紋理的數據上更好地工作,需要有一種方法,可以從圖像中提取紋理特定的特征,并將其傳遞給全連接層,同時保留全局特征。這樣的架構設置將使全連
    發表于 10-26 16:57

    什么是深度學習?使用FPGA進行深度學習的好處?

    什么是深度學習為了解釋深度學習,有必要了解神經網絡。神經網絡是一種模擬人腦的神經元和神經網絡的計算模型。作為具體示例,讓我們考慮一個輸入圖像
    發表于 02-17 16:56

    圖像分類的方法之深度學習與傳統機器學習

    實際情況非常復雜,傳統的分類方法不堪重負。現在,我們不再試圖用代碼來描述每一個圖像類別,決定轉而使用機器學習的方法處理圖像
    發表于 09-28 19:43 ?0次下載

    基于數據挖掘的醫學圖像分類方法

    一種深度學習的新方法卷積受限玻爾茲曼機模型,并且采用改進的快速持續對比散度算法對模型進行訓練。該方法直接從乳腺X光圖像中自主學習特征并利用學習
    發表于 11-22 16:32 ?8次下載

    一種新的目標分類特征深度學習模型

    受限和高識別率要求,提取圖像的局部方向梯度直方圖( HOG)特征,構建稀疏自編碼器棧對HOG特征進行深層次編碼,設計Softmax多分類器對所抽取的特征進行分類。在深度神經網絡模型
    發表于 03-20 17:30 ?0次下載
    一種新的目標<b class='flag-5'>分類</b>特征<b class='flag-5'>深度</b><b class='flag-5'>學習</b>模型

    Xilinx FPGA如何通過深度學習圖像分類加速機器學習

    了解Xilinx FPGA如何通過深度學習圖像分類示例來加速重要數據中心工作負載機器學習。該演示可通過Alexnet神經網絡模型加速
    的頭像 發表于 11-28 06:54 ?3852次閱讀

    FPGA深度學習加速的技能總結

    深度學習加速器已經兩年了,從RTL設計到仿真驗證,以及相應的去了解了Linux驅動,深度學習壓縮方法等等。
    的頭像 發表于 03-08 16:29 ?8885次閱讀
    FPGA<b class='flag-5'>做</b><b class='flag-5'>深度</b><b class='flag-5'>學習</b>加速的技能總結

    如何使用深度卷積神經網絡改進服裝圖像分類檢索算法

    針對利用深度學習的服裝圖像檢索算法分類精度較低的問題,提出基于深度卷積神經網絡的改進服裝圖像
    發表于 08-27 10:09 ?6次下載
    如何使用<b class='flag-5'>深度</b>卷積神經網絡改進服裝<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>檢索算法

    深度學習圖像分割的方法和應用

    介紹使圖像分割的方法,包括傳統方法和深度學習方法,以及應用場景。 基于人工智能和深度學習方法的現代計算機視覺技術在過去10年里取得了顯著進展
    的頭像 發表于 11-27 10:29 ?3243次閱讀

    詳解深度學習圖像分割

    基于人工智能和深度學習方法的現代計算機視覺技術在過去10年里取得了顯著進展。如今,它被用于圖像分類、人臉識別、圖像中物體的識別、視頻分析和
    的頭像 發表于 01-06 15:50 ?3725次閱讀

    基于深度學習圖像修復模型及實驗對比

    深度學習技術在解決¨大面積缺失圖像修復”問題時具有重要作用并帶來了深遠影響,文中在簡要介紹傳統圖像修復方法的基礎上,重點介紹了基于深度
    發表于 04-08 09:38 ?20次下載
    基于<b class='flag-5'>深度</b><b class='flag-5'>學習</b>的<b class='flag-5'>圖像</b>修復模型及實驗對比

    OpenCV使用深度學習邊緣檢測的流程

    導讀 分析了Canny的優劣,并給出了OpenCV使用深度學習邊緣檢測的流程。 在這篇文章中,我們將學習如何在OpenCV中使用基于深度
    的頭像 發表于 05-08 11:05 ?2318次閱讀
    OpenCV使用<b class='flag-5'>深度</b><b class='flag-5'>學習</b><b class='flag-5'>做</b>邊緣檢測的流程

    深度學習中的圖像分割

    深度學習可以學習視覺輸入的模式,以預測組成圖像的對象類。用于圖像處理的主要深度
    的頭像 發表于 05-05 11:35 ?1301次閱讀

    OpenCV庫在圖像處理和深度學習中的應用

    本文深入淺出地探討了OpenCV庫在圖像處理和深度學習中的應用。從基本概念和操作,到復雜的圖像變換和深度
    的頭像 發表于 08-18 11:33 ?952次閱讀

    深度學習中的時間序列分類方法

    時間序列分類(Time Series Classification, TSC)是機器學習深度學習領域的重要任務之一,廣泛應用于人體活動識別、系統監測、金融預測、醫療診斷等多個領域。隨
    的頭像 發表于 07-09 15:54 ?1169次閱讀
    立博百家乐官网游戏| 大发888出纳柜台 2014| 百家乐和| 伯爵百家乐娱乐平台| 乐天堂百家乐娱乐场| 木星百家乐的玩法技巧和规则 | 百家乐桌出租| 网络百家乐公式打法| 网上百家乐做假| 红9百家乐的玩法技巧和规则| 玩百家乐技巧巧| 威尼斯人娱乐城百家乐| 大发888官方888| 玛多县| 网上百家乐官网优博| 百家乐官网赌法| 墨尔本百家乐官网的玩法技巧和规则| 24山灶位吉凶歌| 百家乐韩泰阁| 大发888娱乐充值| 皇冠赌球| 百家乐官网网络视频游戏| 皇冠百家乐官网赢钱皇冠| 大众百家乐官网的玩法技巧和规则| 百家乐出租平台| 百家乐在线娱乐网| 大发888苹果手机下载| 什邡市| 真人百家乐官网大转轮| 做生意进门风水| 真人百家乐蓝盾| 申城棋牌官网| 圣淘沙百家乐官网娱乐城| 网络百家乐开户网| 合乐娱乐| 百家乐官网游戏源码手机| 百家乐有多少局| 新全讯网353788| 留坝县| V博百家乐官网的玩法技巧和规则| 皇冠百家乐在线游戏|