Tensorflow最簡單的圖像搭建識別系統
Tensorflow最簡單的圖像搭建識別系統
從我們見到的各種圖像識別軟件來看,機器似乎能認出人臉、貓、狗、花草、各種汽車等等日常生活中出現的物體,但實際上,這有一個前提:你要用這些類別的圖像,對它進行過訓練。
確切地說,該叫它“圖像分類”。
建立一個圖像分類器並不復雜,技術博客Source Dexter上最近發表的一篇文章,介紹了該如何快速用TensorFlow實現圖像分類。
以下是量子位節選自這篇文章的內容:
在進入正題之前,我們先講一些基本概念。
圖像分類是怎樣實現的?
向一個訓練過的系統輸入圖像,我們會得到一組概率值:每個訓練過的類別都有一個,然後,系統會將圖像歸到概率最高的類。
比如說你訓練了一個系統,來識別貓和狗。當你輸入一張圖像時,系統會輸出這張圖像屬於貓的概率和屬於狗的概率。
不過,這種分類器也有一個缺陷:如果你輸入一張蛇的圖片,它也只能判斷這張圖片包含貓的概率高,還是包含狗的概率高一點。
神經網絡和深度神經網絡
概括地說,神經網絡是計算單元的連接,能夠從提供給它的一組數據中進行學習。
把多層神經網絡堆疊在一起,我們就得到了深度神經網絡。建立、訓練和運行深度神經網絡的過程,稱為深度學習。
量子位之前發布的文章詳細介紹了包括神經網絡在內的《25個深度學習基礎概念》,可以點擊查看。
TensorFlow
TensorFlow是一個數學庫,也是深度學習領域使用最廣的開源框架,由Google開發。
在這篇文章中,我們將用TensorFlow預訓練模型來設置我們的分類器。
想要設置這個分類器,還有幾個先決條件:
你的機器上安裝並設置好了TensorFlow;你會用Python。
從零開始訓練一個深度學習的分類器需要幾周、甚至幾個月的時間,這取決於你用什麽硬件。為了避免這種麻煩,我們將使用預先訓練的模型。 Tensorflow預訓練的模型通常能夠識別大約1000類不同的物體。
接下來,我們開始設置自己的圖像分類器:
第1步:下載預訓練模型、計算圖和腳本
clone這個存儲區,並用以下命令進入:git clone https://github.com/akshaypai/tfClassifier
第2步:運行腳本找到最佳預測
你可以提供要分類的圖像,來運行這個腳本。默認情況下,將顯示概率最高的結果。Python classifier.py --image_file file_path_to_image
如果想獲得前幾個分類結果,可以使用以下參數。Python classifier.py --image_file file_path_to_image --num_top_predictions number_of_top_results
示例:以下是我們輸入玫瑰花圖像,獲得的結果。
python classifier.py --image_file ~/Pictures/rose.jpg
分類器說,這個圖像是朝鮮薊,可能性是24%。
第3步:運行腳本來獲取前n個識別出的類
現在讓我們嘗試給出一個具有更多屬性的圖像,如下面的房子的形象:
python classifier.py --image_file ~/Pictures/house.jpg picket fence, paling (score = 0.86108)
從上面的結果可以看出,分類器認為這張圖片中包含柵欄的可能性是86%,還有可能包含另一個柵欄、庭院/露臺等。
用TensorFlow預訓練的模型對圖像進行分類,就是這麽簡單。不過,預訓練模型能識別的類是有限的,如果你希望分類器來區分你需要的類別,需要重新訓練這個模型。
下面,我們再介紹一下如何對模型進行重新訓練。
第1步:設置圖像文件夾
這一步涉及設置文件夾結構,好讓TensorFlow能輕松獲取這些類別。比如說你想訓練神經網絡,識別5種花:玫瑰、郁金香、蒲公英、可可花、萬壽菊。
創建文件夾結構時:
為每種花創建一個文件夾,該文件夾的名稱是類別的名稱(在我們舉的例子中,是這種花的名稱);
將花的圖像添加到其各自的文件夾中。例如把玫瑰的所有圖像放進“玫瑰”文件夾。
將所有文件夾添加到另一個父文件夾中,比如說“花”。
添加完之後,你將看到這樣的文件夾結構:~/flowers
所有文件夾都這樣設置,文件夾結構就準備好了。
第2步:運行重新訓練腳本
用下面的命令來運行腳本:python retrain.py --model_dir ./inception --image_dir ~/flowers --output_graph ./output --how_many_training_steps 1000
命令行參數:
-model_dir:該參數給出了預訓練模型的位置。預先訓練的模型存儲在git存儲庫的inception文件夾下。
-image_dir:在上一步中創建的圖像文件夾的路徑。
-output_graph:存儲新訓練圖的位置。
-how_many_training_steps:training steps表示要執行的叠代次數,默認是4000。找到正確的次數需要經過不斷試錯,一旦找到最好設置,就可以開始用了。
下列參數可以用來提高模型的準確度:
random_crop:隨機裁剪能夠讓你專註於圖像的主要部分。
Random_scale:和裁剪類似,但可以隨機擴展圖像大小。
flip_left_right:翻轉。
以上,就是重新訓練深度學習模型所需的步驟,這樣就可以識別自定義的物體了。
想學習更多可以訪問:http://www.tensorfly.cn/tfdoc/get_started/introduction.html
Tensorflow最簡單的圖像搭建識別系統