本文主要介紹了如何使用TensorFlow環境運行一個最基本的圖像分類器(Win10系統)。源碼地址https://github.com/sourcedexter/tfClassifier/tree/master/image_classification
(這個大神好像改名了,原來叫akshaypai來着)
一.基礎概念介紹
1.物體分類的思想
物體分類,也就是訓練系統識別各個物體,如貓咪、狗狗、汽車等。TensorFlow是谷歌開發出的人工智能學習系統,相當於我們的運行環境。
2.神經網絡與Inception v3體系結構模型
神經網絡示意圖如下:
通俗了講,就是將若干個輸入,進行若干次操作(線性或者非線性),最后輸出結果。Inception v3模型是谷歌發布的一個深層卷積網絡模型。我們使用的retrain_new.py腳本就是使用了Inception v3模型進行一個遷移學習。
3.訓練集、測試集和驗證集
訓練集用來訓練模型,驗證集用來驗證模型是否進行了過擬合,測試集用來測試模型的准確程度。三種圖片集的比例會對准確度產生影響。
4.學習速率
不同的學習速率會導致不同的結果。如果速率過大,會導致准確率在訓練的過程中不斷上下跳動,如果速率過小會導致在訓練結束前無法到達預期准確度。
二.環境搭建
1.Python環境搭建
具體的python搭建細節可以自行百度。參考鏈接:
https://blog.csdn.net/lyj_viviani/article/details/51763101
這里要注意一下版本,因為要對應后文的cuDnn庫與cuda的版本。(我用的是python 3.6.4)
2.TensorFlow環境搭建(gpu)
(1)直接pip安裝。命令:
pip install tensorflow-gpu
這樣就安裝好TensorFlow了,但是我們還需要GPU加速,所以還需要安裝cuda和cuDnn(專門為deep learning准備的加速庫)。
(2)cuda安裝
cuda v8.0安裝包下載:https://developer.nvidia.com/cuda-downloads
進行如下選擇:
下載完后正常安裝就可以了。
(3)cuDnn庫下載
下載鏈接:https://developer.nvidia.com/rdp/cudnn-archive
我下載的是這個版本(cuDNN v7.0.5),這個版本要對應好cuda的版本。
下載完后解壓縮,出現如下文件夾結構:
然后將這三個文件夾下的文件分別拷貝到cuda對應的文件夾下面就行了。
到這里還不能完整的運行,還需要配置一下環境變量:cuda安裝完成后默認的環境變量配置不對,CUDA_PATH是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0,但是這樣不能直接訪問到bin和lib\x64下的程序包,在path中加上這兩個路徑即可。
(4)測試
用如下代碼測試:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
三.基本使用
1.數據集的收集與創建
我用的是2018全球AI挑戰賽的數據集。鏈接:
https://challenger.ai/datasets/lad2018
下載完后,將所有文件夾都放在一個文件夾下(我自己創建了一個叫DataSet),結構如下:
文件夾的名字就是最后輸出的分類的結果。
每一個文件夾下都是圖片(不能再有子文件夾),即:
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參數:驗證集比例
注意:訓練會在根目錄下生成一個tmp文件夾,存放相關文件,即:
3.測試模型
核心的文件是output_graph.pb文件(我們訓練所產生的圖,是一個二進制文件)和output_labels.txt文件。
使用retrain_model_classifier.py腳本來測試模型。命令格式如下:
E:
cd E:\tfclassifier\image_classification(進入retrain_model_classifier.py腳本所在的目錄)
python retrain_model_classifier.py 要識別圖片的路徑
例如:
python retrain_model_classifier.py D:\test2\testPic.jpg
然后會看到一些版本信息,和輸出結果(紅框部分):
四.遇到的問題以及解答
1.版本對應問題
Python版本,cuda版本和cuDNN版本都是對應的,如果結果中出現了亂碼,很大概率是版本的問題。
2.帶參數的python腳本編寫與運行
想讓python腳本帶參數,可以在python腳本的末尾添加如下格式的代碼:
運行時需要在python xxx.py后加上“--image_dir 參數”就可以了。
3.測試腳本的調整
要不斷訓練、測試,不斷調整參數,直到訓練快要結束的時候,驗證比例達到穩定,並且在90以上,我們才認為系統較為完善。
五.參考鏈接:
深度學習動手入門:GitHub上四個超棒的TensorFlow開源項目
http://www.techweb.com.cn/news/2017-07-31/2566452.shtml
Win10 TensorFlow(gpu)安裝詳解
https://blog.csdn.net/sb19931201/article/details/53648615
用Inception-V3模型進行圖像分類
https://blog.csdn.net/xingwei_09/article/details/79152796
谷歌機器學習速成課程
https://developers.google.cn/machine-learning/crash-course/prereqs-and-prework