想3分鐘搭建圖像識別系統?這裏有一份TensorFlow速成教程(轉)

http://www.voidcn.com/article/p-wyaahqji-dr.htmlhtml

從咱們見到的各類圖像識別軟件來看,機器彷佛能認出人臉、貓、狗、花草、各類汽車等等平常生活中出現的物體,但實際上,這有一個前提:你要用這些類別的圖像,對它進行過訓練。python

確切地說,該叫它「圖像分類」。git

創建一個圖像分類器並不複雜,技術博客Source Dexter上最近發表的一篇文章,介紹了該如何快速用TensorFlow實現圖像分類。github

如下是小編節選自這篇文章的內容:網絡

在進入正題以前,咱們先講一些基本概念。框架

圖像分類是怎樣實現的?

向一個訓練過的系統輸入圖像,咱們會獲得一組機率值:每一個訓練過的類別都有一個,而後,系統會將圖像歸到機率最高的類。dom

好比說你訓練了一個系統,來識別貓和狗。當你輸入一張圖像時,系統會輸出這張圖像屬於貓的機率和屬於狗的機率。學習

不過,這種分類器也有一個缺陷:若是你輸入一張蛇的圖片,它也只能判斷這張圖片包含貓的機率高,仍是包含狗的機率高一點。ui

神經網絡和深度神經網絡

歸納地說,神經網絡是計算單元的鏈接,可以從提供給它的一組數據中進行學習。命令行

把多層神經網絡堆疊在一塊兒,咱們就獲得了深度神經網絡。創建、訓練和運行深度神經網絡的過程,稱爲深度學習。

關於深度學習,以前網上發佈很火的文章詳細介紹了包括神經網絡在內的《25個深度學習基礎概念》,

TensorFlow

TensorFlow是一個數學庫,也是深度學習領域使用最廣的開源框架,由Google開發。

在這篇文章中,咱們將用TensorFlow預訓練模型來設置咱們的分類器。

想要設置這個分類器,還有幾個先決條件:

  • 你的機器上安裝並設置好了TensorFlow;

  • 你會用Python。

從零開始訓練一個深度學習的分類器須要幾周、甚至幾個月的時間,這取決於你用什麼硬件。爲了不這種麻煩,咱們將使用預先訓練的模型。 Tensorflow預訓練的模型一般可以識別大約1000類不一樣的物體。

接下來,咱們開始設置本身的圖像分類器:

第1步:下載預訓練模型、計算圖和腳本

clone這個存儲區,並用如下命令進入:

git clone https://github.com/akshaypai/tfClassifier

cd 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/fruit.jpg

pomegranate (score = 0.98216)

分類器說,這個圖像是石榴,可能性是98%。

第3步:運行腳原本獲取前n個識別出的類

如今讓咱們嘗試給出一個具備更多屬性的圖像,以下面的房子的形象:

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預訓練的模型對圖像進行分類,就是這麼簡單。不過,預訓練模型能識別的類是有限的,若是你但願分類器來區分你須要的類別,須要從新訓練這個模型。

下面,咱們再介紹一下如何對模型進行從新訓練。

第1步:設置圖像文件夾

這一步涉及設置文件夾結構,好讓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

...

全部文件夾都這樣設置,文件夾結構就準備好了。

第2步:運行從新訓練腳本

用下面的命令來運行腳本:

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:翻轉。

以上,就是從新訓練深度學習模型所需的步驟,這樣就能夠識別自定義的物體了。

相關文章
相關標籤/搜索