http://www.voidcn.com/article/p-wyaahqji-dr.htmlhtml
從咱們見到的各類圖像識別軟件來看,機器彷佛能認出人臉、貓、狗、花草、各類汽車等等平常生活中出現的物體,但實際上,這有一個前提:你要用這些類別的圖像,對它進行過訓練。python
確切地說,該叫它「圖像分類」。git
創建一個圖像分類器並不複雜,技術博客Source Dexter上最近發表的一篇文章,介紹了該如何快速用TensorFlow實現圖像分類。github
如下是小編節選自這篇文章的內容:網絡
在進入正題以前,咱們先講一些基本概念。框架
向一個訓練過的系統輸入圖像,咱們會獲得一組機率值:每一個訓練過的類別都有一個,而後,系統會將圖像歸到機率最高的類。dom
好比說你訓練了一個系統,來識別貓和狗。當你輸入一張圖像時,系統會輸出這張圖像屬於貓的機率和屬於狗的機率。學習
不過,這種分類器也有一個缺陷:若是你輸入一張蛇的圖片,它也只能判斷這張圖片包含貓的機率高,仍是包含狗的機率高一點。ui
歸納地說,神經網絡是計算單元的鏈接,可以從提供給它的一組數據中進行學習。命令行
把多層神經網絡堆疊在一塊兒,咱們就獲得了深度神經網絡。創建、訓練和運行深度神經網絡的過程,稱爲深度學習。
關於深度學習,以前網上發佈很火的文章詳細介紹了包括神經網絡在內的《25個深度學習基礎概念》,
TensorFlow是一個數學庫,也是深度學習領域使用最廣的開源框架,由Google開發。
在這篇文章中,咱們將用TensorFlow預訓練模型來設置咱們的分類器。
想要設置這個分類器,還有幾個先決條件:
你的機器上安裝並設置好了TensorFlow;
你會用Python。
從零開始訓練一個深度學習的分類器須要幾周、甚至幾個月的時間,這取決於你用什麼硬件。爲了不這種麻煩,咱們將使用預先訓練的模型。 Tensorflow預訓練的模型一般可以識別大約1000類不一樣的物體。
接下來,咱們開始設置本身的圖像分類器:
clone這個存儲區,並用如下命令進入:
git clone https://github.com/akshaypai/tfClassifier cd tfClassifier
你能夠提供要分類的圖像,來運行這個腳本。默認狀況下,將顯示機率最高的結果。
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/fruit.jpg pomegranate (score = 0.98216)
分類器說,這個圖像是石榴,可能性是98%。
如今讓咱們嘗試給出一個具備更多屬性的圖像,以下面的房子的形象:
python classifier.py --image_file ~/Pictures/house.jpg --num_top_predictions 5picket fence, paling (score = 0.95750) worm fence, snake fence, snake-rail fence, Virginia fence (score = 0.03615) beacon, lighthouse, beacon light, pharos (score = 0.00018) boathouse (score = 0.00013) patio, terrace (score = 0.00007)
從上面的結果能夠看出,分類器認爲這張圖片中包含柵欄的可能性是95%,還有可能包含另外一個柵欄、庭院/露臺等。
用TensorFlow預訓練的模型對圖像進行分類,就是這麼簡單。不過,預訓練模型能識別的類是有限的,若是你但願分類器來區分你須要的類別,須要從新訓練這個模型。
下面,咱們再介紹一下如何對模型進行從新訓練。
這一步涉及設置文件夾結構,好讓TensorFlow能輕鬆獲取這些類別。好比說你想訓練神經網絡,識別5種花:玫瑰、鬱金香、蒲公英、可可花、萬壽菊。
建立文件夾結構時:
爲每種花建立一個文件夾,該文件夾的名稱是類別的名稱(在咱們舉的例子中,是這種花的名稱);
將花的圖像添加到其各自的文件夾中。例如把玫瑰的全部圖像放進「玫瑰」文件夾。
將全部文件夾添加到另外一個父文件夾中,好比說「花」。
添加完以後,你將看到這樣的文件夾結構:
~/flowers ~/flowers/roses/img1.jpg ~/flowers/roses/img2.jpg ... ~/flowers/tulips/tulips_img1.jpg ~/flowers/tulips/tulips_img2.jpg ~/flowers/tulips/tulips_img3.jpg ...
全部文件夾都這樣設置,文件夾結構就準備好了。
用下面的命令來運行腳本:
python retrain.py --model_dir ./inception --image_dir ~/flowers --output_graph ./output --how_many_training_steps 500
命令行參數:
-model_dir:該參數給出了預訓練模型的位置。預先訓練的模型存儲在git存儲庫的inception文件夾下。
-image_dir:在上一步中建立的圖像文件夾的路徑。
-output_graph:存儲新訓練圖的位置。
-how_many_training_steps:training steps表示要執行的迭代次數,默認是4000。找到正確的次數須要通過不斷試錯,一旦找到最好設置,就能夠開始用了。
下列參數能夠用來提升模型的準確度:
random_crop:隨機裁剪可以讓你專一於圖像的主要部分。
Random_scale:和裁剪相似,但能夠隨機擴展圖像大小。
flip_left_right:翻轉。
以上,就是從新訓練深度學習模型所需的步驟,這樣就能夠識別自定義的物體了。