玩轉數據系列:利用阿里雲機器學習在深度學習框架下實現智能圖片分類


伴隨着今日阿里雲機器學習PAI在雲棲大會的重磅發布,快來感受下人工智能的魅力。

一、背景

隨着互聯網的發展,產生了大量的圖片以及語音數據,如何對這部分非結構化數據行之有效的利用起來,一直是困擾數據挖掘工程師的一到難題。首先,解決非結構化數據常常要使用深度學習算法,上手門檻高。其次,對於這部分數據的處理,往往需要依賴GPU計算引擎,計算資源代價大。本文將介紹一種利用深度學習實現的圖片識別案例,這種功能可以服用到圖片的檢黃、人臉識別、物體檢測等各個領域。

下面嘗試通過阿里雲機器學習平台產品,利用深度學習框架Tensorflow,快速的搭架圖像識別的預測模型,整個流程只需要半小時,就可以實現對下面這幅圖片的識別,系統會返回結果“鳥”:

二、數據集介紹

本案例數據集及相關代碼下載地址:https://help.aliyun.com/document_detail/51800.html?spm=5176.doc50654.6.564.mS4bn9

使用CIFAR-10數據集,這份數據是一份對包含6萬張像素為32*32的彩色圖片,這6萬張圖片被分成10個類別,分別是飛機、汽車、鳥、毛、鹿、狗、青蛙、馬、船、卡車。數據集截圖:

數據源在使用過程中被拆分成兩個部分,其中5萬張用於訓練,1萬張用於測試。其中5萬張訓練數據又被拆分成5個data_batch,1萬張測試數據組成test_batch。最終數據源如圖:

三、數據探索流程

下面我們一步一步講解下如何將實驗在阿里雲機器學習平台跑通,首先需要開通阿里雲機器學習產品的GPU使用權限,並且開通OSS,用於存儲數據。
機器學習:https://data.aliyun.com/product/learn?spm=a21gt.99266.416540.112.IOG7OU
OSS:https://www.aliyun.com/product/oss?spm=a2c0j.103967.416540.50.KkZyBu

1.數據源准備

第一步,進入OSS對象存儲,將本案例使用的相關數據和代碼放到OSS的bucket路徑下。首先建立OSS的bucket,然后我建立了aohai_test文件夾,並在這個目錄下建立如下4個文件夾目錄:
https://zos.alipayobjects.com/rmsportal/eXgLTWObHKpDvnWTWTVN.png

每個文件夾的作用如下:

  • check_point:用來存放實驗生成的模型

  • cifar-10-batches-py:用來存放訓練數據以及預測集數據,對應的是下載下來的數據源cifar-10-batcher-py文件和預測集bird_mount_bluebird.jpg文件

  • predict_code:用來存放訓練數據,也就是cifar_pai.py

  • train_code:用來存放cifar_predict_pai.py

本案例數據集及相關代碼下載地址:https://help.aliyun.com/document_detail/51800.html?spm=5176.doc50654.6.564.mS4bn9

2.配置OSS訪問授權

現在我們已經把數據和訓練需要的代碼放入OSS,下面要配置機器學習對OSS的訪問,進入阿里雲機器學習,在“設置”按鈕的彈出頁面,配置OSS的訪問授權。如圖:
https://zos.alipayobjects.com/rmsportal/FFRjZMOnAhneNokppRgU.png

3.模型訓練

從左邊的組件框中拖拽“讀OSS Bucket”以及“Tensorflow”組件鏈接,並且在“Tensorflow”的配置項中進行相關設置。

  • Python代碼文件:OSS中的cifar_pai.py
  • 數據源目錄:OSS中的cifar-10-batches-py文件夾
  • 輸出目錄:OSS中的check_point文件夾

點擊運行,實驗開始訓練,可以針對底層的GPU資源靈活調節,除了界面端的設置,需要在代碼中也有相應的支持,代碼編寫符合Tensorflow的多卡規范。

4.模型訓練代碼解析

這里針對cifar_pai.py文件中的關鍵代碼講解:
(1)構建CNN圖片訓練模型

network = input_data(shape=[None, 32, 32, 3], data_preprocessing=img_prep, data_augmentation=img_aug) network = conv_2d(network, 32, 3, activation='relu') network = max_pool_2d(network, 2) network = conv_2d(network, 64, 3, activation='relu') network = conv_2d(network, 64, 3, activation='relu') network = max_pool_2d(network, 2) network = fully_connected(network, 512, activation='relu') network = dropout(network, 0.5) network = fully_connected(network, 10, activation='softmax') network = regression(network, optimizer='adam', loss='categorical_crossentropy', learning_rate=0.001) 

(2)訓練生成模型model.tfl

    model = tflearn.DNN(network, tensorboard_verbose=0) model.fit(X, Y, n_epoch=100, shuffle=True, validation_set=(X_test, Y_test), show_metric=True, batch_size=96, run_id='cifar10_cnn') model_path = os.path.join(FLAGS.checkpointDir, "model.tfl") print(model_path) model.save(model_path) 

5.查看訓練過程中的日志

訓練過程中,右鍵“Tensorflow”組件,點擊查看日志。

點擊打開logview連接,按照如下鏈路操作,打開ODPS Tasks下面的Algo Task,雙擊Tensorflow Task,點擊StdOut,可以看到模型訓練的日志被實時的打印出來:

隨着實驗的進行,會不斷打出日志出來,對於關鍵的信息也可以利用print函數在代碼中打印,結果會顯示在這里。在本案例中,可以通過acc查看模型訓練的准確度。

5.結果預測

再拖拽一個“Tensorflow”組件用於預測,

  • Python代碼文件:OSS中的cifar_predict_pai.py
  • 數據源目錄:OSS中的cifar-10-batches-py文件夾,用來讀取bird_mount_bluebird.jpg文件
  • 輸出目錄:讀取OSS中的check_point文件夾下模型訓練生成的model.tfl模型文件

預測的圖片是存儲在checkpoint文件夾下的圖:

結果見日志:

6.預測代碼數據

部分預測代碼解析:

  predict_pic = os.path.join(FLAGS.buckets, "bird_bullocks_oriole.jpg") img_obj = file_io.read_file_to_string(predict_pic) file_io.write_string_to_file("bird_bullocks_oriole.jpg", img_obj) img = scipy.ndimage.imread("bird_bullocks_oriole.jpg", mode="RGB") # Scale it to 32x32 img = scipy.misc.imresize(img, (32, 32), interp="bicubic").astype(np.float32, casting='unsafe') # Predict prediction = model.predict([img]) print (prediction[0]) print (prediction[0]) #print (prediction[0].index(max(prediction[0]))) num=['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck'] print ("This is a %s"%(num[prediction[0].index(max(prediction[0]))])) 

首先讀入圖片“bird_bullocks_oriole.jpg”,將圖片調整為像素32*32的大小,然后帶入model.predict預測函數評分,最終會返回這張圖片對應的十種分類['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']的權重,選擇權重最高的一項作為預測結果返回。

閱讀全文:http://click.aliyun.com/m/15442/  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM