李林 編譯整理從我們見(jiàn)到的各種圖像識(shí)別軟件來(lái)看,機(jī)器似乎能認(rèn)出人臉、貓、狗、花草、各種汽車(chē)等等日常生活中出現(xiàn)的物體,但實(shí)際上,這有一個(gè)前提:你要用這些類(lèi)別的圖像,對(duì)它進(jìn)行過(guò)訓(xùn)練。 確切地說(shuō),該叫它“圖像分類(lèi)”。 建立一個(gè)圖像分類(lèi)器并不復(fù)雜,技術(shù)博客Source Dexter上最近發(fā)表的一篇文章,介紹了該如何快速用TensorFlow實(shí)現(xiàn)圖像分類(lèi)。 以下是量子位節(jié)選自這篇文章的內(nèi)容: 在進(jìn)入正題之前,我們先講一些基本概念。 圖像分類(lèi)是怎樣實(shí)現(xiàn)的?向一個(gè)訓(xùn)練過(guò)的系統(tǒng)輸入圖像,我們會(huì)得到一組概率值:每個(gè)訓(xùn)練過(guò)的類(lèi)別都有一個(gè),然后,系統(tǒng)會(huì)將圖像歸到概率最高的類(lèi)。 比如說(shuō)你訓(xùn)練了一個(gè)系統(tǒng),來(lái)識(shí)別貓和狗。當(dāng)你輸入一張圖像時(shí),系統(tǒng)會(huì)輸出這張圖像屬于貓的概率和屬于狗的概率。 不過(guò),這種分類(lèi)器也有一個(gè)缺陷:如果你輸入一張蛇的圖片,它也只能判斷這張圖片包含貓的概率高,還是包含狗的概率高一點(diǎn)。 神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)概括地說(shuō),神經(jīng)網(wǎng)絡(luò)是計(jì)算單元的連接,能夠從提供給它的一組數(shù)據(jù)中進(jìn)行學(xué)習(xí)。 把多層神經(jīng)網(wǎng)絡(luò)堆疊在一起,我們就得到了深度神經(jīng)網(wǎng)絡(luò)。建立、訓(xùn)練和運(yùn)行深度神經(jīng)網(wǎng)絡(luò)的過(guò)程,稱(chēng)為深度學(xué)習(xí)。 量子位之前發(fā)布的文章詳細(xì)介紹了包括神經(jīng)網(wǎng)絡(luò)在內(nèi)的《25個(gè)深度學(xué)習(xí)基礎(chǔ)概念》,可以點(diǎn)擊查看。 TensorFlowTensorFlow是一個(gè)數(shù)學(xué)庫(kù),也是深度學(xué)習(xí)領(lǐng)域使用最廣的開(kāi)源框架,由Google開(kāi)發(fā)。 在這篇文章中,我們將用TensorFlow預(yù)訓(xùn)練模型來(lái)設(shè)置我們的分類(lèi)器。 想要設(shè)置這個(gè)分類(lèi)器,還有幾個(gè)先決條件:
從零開(kāi)始訓(xùn)練一個(gè)深度學(xué)習(xí)的分類(lèi)器需要幾周、甚至幾個(gè)月的時(shí)間,這取決于你用什么硬件。為了避免這種麻煩,我們將使用預(yù)先訓(xùn)練的模型。 Tensorflow預(yù)訓(xùn)練的模型通常能夠識(shí)別大約1000類(lèi)不同的物體。 接下來(lái),我們開(kāi)始設(shè)置自己的圖像分類(lèi)器: 第1步:下載預(yù)訓(xùn)練模型、計(jì)算圖和腳本clone這個(gè)存儲(chǔ)區(qū),并用以下命令進(jìn)入: git clone https://github.com/akshaypai/tfClassifier cd tfClassifier 第2步:運(yùn)行腳本找到最佳預(yù)測(cè)你可以提供要分類(lèi)的圖像,來(lái)運(yùn)行這個(gè)腳本。默認(rèn)情況下,將顯示概率最高的結(jié)果。 Python classifier.py --image_file file_path_to_image 如果想獲得前幾個(gè)分類(lèi)結(jié)果,可以使用以下參數(shù)。 Python classifier.py --image_file file_path_to_image --num_top_predictions number_of_top_results 示例:以下是我們輸入石榴圖像,獲得的結(jié)果。
分類(lèi)器說(shuō),這個(gè)圖像是石榴,可能性是98%。 第3步:運(yùn)行腳本來(lái)獲取前n個(gè)識(shí)別出的類(lèi)現(xiàn)在讓我們嘗試給出一個(gè)具有更多屬性的圖像,如下面的房子的形象:
從上面的結(jié)果可以看出,分類(lèi)器認(rèn)為這張圖片中包含柵欄的可能性是95%,還有可能包含另一個(gè)柵欄、庭院/露臺(tái)等。 用TensorFlow預(yù)訓(xùn)練的模型對(duì)圖像進(jìn)行分類(lèi),就是這么簡(jiǎn)單。不過(guò),預(yù)訓(xùn)練模型能識(shí)別的類(lèi)是有限的,如果你希望分類(lèi)器來(lái)區(qū)分你需要的類(lèi)別,需要重新訓(xùn)練這個(gè)模型。 下面,我們?cè)俳榻B一下如何對(duì)模型進(jìn)行重新訓(xùn)練。 第1步:設(shè)置圖像文件夾這一步涉及設(shè)置文件夾結(jié)構(gòu),好讓TensorFlow能輕松獲取這些類(lèi)別。比如說(shuō)你想訓(xùn)練神經(jīng)網(wǎng)絡(luò),識(shí)別5種花:玫瑰、郁金香、蒲公英、可可花、萬(wàn)壽菊。 創(chuàng)建文件夾結(jié)構(gòu)時(shí): 為每種花創(chuàng)建一個(gè)文件夾,該文件夾的名稱(chēng)是類(lèi)別的名稱(chēng)(在我們舉的例子中,是這種花的名稱(chēng)); 將花的圖像添加到其各自的文件夾中。例如把玫瑰的所有圖像放進(jìn)“玫瑰”文件夾。 將所有文件夾添加到另一個(gè)父文件夾中,比如說(shuō)“花”。 添加完之后,你將看到這樣的文件夾結(jié)構(gòu): ~/flowers ~/flowers/roses/img1.jpg ~/flowers/roses/img2.jpg ... ~/flowers/tulips/tulips_img1.jpg ~/flowers/tulips/tulips_img2.jpg ~/flowers/tulips/tulips_img3.jpg ... 所有文件夾都這樣設(shè)置,文件夾結(jié)構(gòu)就準(zhǔn)備好了。 第2步:運(yùn)行重新訓(xùn)練腳本用下面的命令來(lái)運(yùn)行腳本: python retrain.py --model_dir ./inception --image_dir ~/flowers --output_graph ./output --how_many_training_steps 500 命令行參數(shù): -model_dir:該參數(shù)給出了預(yù)訓(xùn)練模型的位置。預(yù)先訓(xùn)練的模型存儲(chǔ)在git存儲(chǔ)庫(kù)的inception文件夾下。 -image_dir:在上一步中創(chuàng)建的圖像文件夾的路徑。 -output_graph:存儲(chǔ)新訓(xùn)練圖的位置。 -how_many_training_steps:training steps表示要執(zhí)行的迭代次數(shù),默認(rèn)是4000。找到正確的次數(shù)需要經(jīng)過(guò)不斷試錯(cuò),一旦找到最好設(shè)置,就可以開(kāi)始用了。 下列參數(shù)可以用來(lái)提高模型的準(zhǔn)確度: random_crop:隨機(jī)裁剪能夠讓你專(zhuān)注于圖像的主要部分。 Random_scale:和裁剪類(lèi)似,但可以隨機(jī)擴(kuò)展圖像大小。 flip_left_right:翻轉(zhuǎn)。 以上,就是重新訓(xùn)練深度學(xué)習(xí)模型所需的步驟,這樣就可以識(shí)別自定義的物體了。 【完】 招聘我們正在招募編輯記者、運(yùn)營(yíng)等崗位,工作地點(diǎn)在北京中關(guān)村,期待你的到來(lái),一起體驗(yàn)人工智能的風(fēng)起云涌。 相關(guān)細(xì)節(jié),請(qǐng)?jiān)诠娞?hào)對(duì)話界面,回復(fù):“招聘”兩個(gè)字。 One More Thing…今天AI界還有哪些事值得關(guān)注?在量子位(QbitAI)公眾號(hào)會(huì)話界面回復(fù)“今天”,看我們?nèi)W(wǎng)搜羅的AI行業(yè)和研究動(dòng)態(tài)。筆芯~ 另外,,如果你研究或者從事AI領(lǐng)域,小助手會(huì)把你帶入量子位的交流群里。 △ 掃碼強(qiáng)行關(guān)注『量子位』 |
|
來(lái)自: timtxu > 《時(shí)尚科技》