1. 程式人生 > >想3分鐘搭建影象識別系統?這裡有一份TensorFlow速成教程(轉)

想3分鐘搭建影象識別系統?這裡有一份TensorFlow速成教程(轉)

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

從我們見到的各種影象識別軟體來看,機器似乎能認出人臉、貓、狗、花草、各種汽車等等日常生活中出現的物體,但實際上,這有一個前提:你要用這些類別的影象,對它進行過訓練。

確切地說,該叫它“影象分類”。

建立一個影象分類器並不複雜,技術部落格Source Dexter上最近發表的一篇文章,介紹了該如何快速用TensorFlow實現影象分類。

以下是小編節選自這篇文章的內容:

在進入正題之前,我們先講一些基本概念。

影象分類是怎樣實現的?

向一個訓練過的系統輸入影象,我們會得到一組概率值:每個訓練過的類別都有一個,然後,系統會將影象歸到概率最高的類。

比如說你訓練了一個系統,來識別貓和狗。當你輸入一張影象時,系統會輸出這張影象屬於貓的概率和屬於狗的概率。

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

神經網路和深度神經網路

概括地說,神經網路是計算單元的連線,能夠從提供給它的一組資料中進行學習。

把多層神經網路堆疊在一起,我們就得到了深度神經網路。建立、訓練和執行深度神經網路的過程,稱為深度學習。

關於深度學習,之前網上釋出很火的文章詳細介紹了包括神經網路在內的《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:翻轉。

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