天天看點

基于TensorFlow的食物圖像識别

   參考https://github.com/sourcedexter/tfClassifier/tree/master/image_classification​

  主要介紹如何在win10系統中使用TensorFlow環境運作一個最基本的圖像分類器。

  一、基礎知識

    1.物體分類的思想

      物體分類,也就是訓練系統識别各個物體,如貓咪、狗狗、汽車等。TensorFlow是谷歌開發出的人工智能學習系統,相當于我們的運作環境。

    2.神經網絡與Inception v3體系結構模型

      神經網絡示意圖如下:

        

基于TensorFlow的食物圖像識别

      通俗了講,就是将若幹個輸入,進行若幹次操作(線性或者非線性),最後輸出結果。Inception v3模型是谷歌釋出的一個深層卷積網絡模型。我們使用的retrain_new.py腳本就是使用了Inception v3模型進行一個遷移學習。

    3.訓練集、測試集和驗證集

      訓練集用來訓練模型,驗證集用來驗證模型是否進行了過拟合,測試集用來測試模型的準确程度。三種圖檔集的比例會對準确度産生影響。

    4.學習速率

      不同的學習速率會導緻不同的結果。如果速率過大,會導緻準确率在訓練的過程中不斷上下跳動,如果速率過小會導緻在訓練結束前無法到達預期準确度。

  二、環境搭建

    1.具體環境搭建可以檢視之前的文章。

      主要逐注意版本對應。

    2.TensorFlow環境搭建(gpu)

      (1)直接pip安裝。指令:         

          pip install tensorflow-gpu

          這樣就安裝好TensorFlow了,但是我們還需要GPU加速,是以還需要安裝cuda和cuDnn(專門為deep learning準備的加速庫)。

      (2)cuda安裝

        下載下傳完後正常安裝就可以了。

      (3)cuDnn庫下載下傳

        下載下傳完後解壓縮,将三個檔案拷貝到相應的檔案中即可。一定注意對應覆寫。

      (4)測試

        import tensorflow as tf

        hello = tf.constant('Hello, TensorFlow!')

        sess = tf.Session()

        檢視是否輸出。

   三.基本使用

    1.資料集的收集與建立

      我用的是2018全球AI挑戰賽的資料集。連結:https://challenger.ai/datasets/lad2018

    2.訓練模型

      訓練模型使用retrain_new.py腳本。在指令行運作,指令格式如下:

      python retrain_new.py --model_dir 存放classify_image_graph_def.pb的路徑 --image_dir 剛才的建立的DataSet的路徑 --output_graph 産生的,pb檔案的存放路徑 --output_labels 産生的output_labels.txt的 存放路徑 --how_many_training_steps 訓練步數 -- learning_rate 學習速率 --testing_percentage 測試集比例 --validation_percentage 驗證集比例

      示例指令:

      python retrain_new.py --model_dir E:\tfclassifier\image_classification\inception --image_dir E:\tfclassifier\DataSet --output_graph E:\tfclassifier\image_classification\output_dir\output_graph.pb --output_labels                                               E:\tfclassifier\image_classification\output_dir\output_labels.txt --how_many_training_steps 500 --learning_rate 0.3 --testing_percentage 10 --validation_percentage 10

      說明:    

model_dir參數:指定了model的存放位置,就是我們的inception檔案夾

image_dir參數:指定了資料集的位置

output_graph參數:産生的output_graph.pb檔案的存放路徑(後面要用)

output_labels 參數:産生的output_labels.txt的存放路徑(後面要用)

how_many_training_steps參數:訓練步數,和學習速率配合調整(我用的500)

learning_rate參數:學習速率,和訓練步數配合調整(我用的0.3,常用的有0.001,0.01,0.1,0.3,1,3,可自己調整嘗試一下)

testing_percentage參數:測試集比例

validation_percentage參數:驗證集比例

    3.測試模型

      核心的檔案是output_graph.pb檔案(我們訓練所産生的圖,是一個二進制檔案)和output_labels.txt檔案。

      使用retrain_model_classifier.py腳本來測試模型。指令格式如下:

      cd E:\tfclassifier\image_classification(進入retrain_model_classifier.py腳本所在的目錄)python retrain_model_classifier.py 要識别圖檔的路徑

      然後會看到一些版本資訊,和輸出結果:

      

基于TensorFlow的食物圖像識别

  四.遇到的問題以及解答

    1.版本對應問題

      python版本,cuda版本和cuDNN版本都是對應的,如果結果中出現了亂碼,很大機率是版本的問題。

    2.帶參數的python腳本編寫與運作

      想讓python腳本帶參數,可以在python腳本的末尾添加如下格式的代碼:

基于TensorFlow的食物圖像識别

      運作時需要在python xxx.py後加上“--image_dir 參數”就可以了。

    3.測試腳本的調整

      要不斷訓練、測試,不斷調整參數,直到訓練快要結束的時候,驗證比例達到穩定,并且在90以上,我們才認為系統較為完善。