91精品国产综合久久四虎久久_国产成人午夜高潮毛片_99er视频精品免费观看_2020亚洲熟女在线观看_日本女优人体写真_国内黄色毛片_年轻的老师中文版在线_丰满女邻居做爰_久久久久久精品成人免费图片

Linux上TensorFlow的深入研究
構(gòu)建一個低成本、快速、精準的圖像分類器
編者注:想要學(xué)習(xí)如何從頭開始構(gòu)建和訓(xùn)練你的第一個TensorFlow計算圖,請閱讀Aaron Schumacher在O’Reilly在線教程里的《你好,TensorFlow!》

更多內(nèi)容可以參考Strata北京2017的相關(guān)議題

在過去的八個月里,我花了大量時間學(xué)習(xí)了盡可能多的機器學(xué)習(xí)知識。我經(jīng)常對在這個小但快速成長的社區(qū)中的在線慕課(MOOCs)上遇到的各種各樣的人感到驚訝。他們中既有費米實驗室(Fermilab)的量子研究員,也有硅谷的CEO們。最近我一直關(guān)注開源軟件TensorFlow,這篇教程就是我的研究成果。

我覺得很多機器學(xué)習(xí)教程都是面向Mac系統(tǒng)的。使用Linux系統(tǒng)的一個主要優(yōu)勢是它是免費的,并支持基于GPU的TensorFlow。GPU的并行加速計算能力是機器學(xué)習(xí)重大進步的原因之一。因此你不需要為了構(gòu)建一個快速分類器而使用最前沿的計算設(shè)備,像我用的計算機和顯卡總共花費了不到400美元。

在本教程中我會告訴你如何在Ubuntu上使用GPU來訓(xùn)練自己的圖像分類器。本教程跟Pete Warden的《“詩人”也能用TensorFlow》非常類似,但是稍有不同。我會假定你已經(jīng)安裝了TensorFlow和Bazel,并在你的主目錄下git克隆了最新版本的TensorFlow。如果你還沒有完成上述工作,你可以按照我博客上的教程進行操作。如果你的計算機沒有與TensorFlow兼容GPU,你仍然可以使用這個教程,只不過它需要更長的時間。

整個訓(xùn)練過程非常簡單,可以分為四個主要步驟:

1.收集訓(xùn)練用的圖像。

2.使用TensorFlow和Inception模型來訓(xùn)練一個計算圖/模型。

3.編寫腳本來用你的計算圖來進行圖像分類。

4.通過對新圖像進行分類來測試腳本。

我決定使用五種不同的鷙鳥來訓(xùn)練我的圖像分類器。使用鷙鳥并不是一個偶然的決定,我曾在不列顛哥倫比亞省鄧肯市的“猛龍”機構(gòu)工作了兩年,這是一個教育中心及野生動物管理機構(gòu)。長期以來我對這些兇猛的神話生物有著深厚的熱情。作為終極挑戰(zhàn),我把我的分類器跟康奈爾大學(xué)鳥類實驗室的Merlin ID工具系統(tǒng)進行對比。在本文的撰寫過程中該實驗室升級了它的網(wǎng)站并發(fā)布公告:“Merlin Photo ID 暫停使用以進行維護和升級?!的螤桒B類實驗室和Visipedia團隊正在合作研發(fā)可以識別照片中鳥類的計算機視覺技術(shù)”。毫無疑問,他們正在將他們的Merlin系統(tǒng)(現(xiàn)在不可用)升級為一個現(xiàn)代機器學(xué)習(xí)分類器。

收集訓(xùn)練用的圖像

我從“猛龍”的臉書頁面并結(jié)合網(wǎng)絡(luò)搜索為每類鷙鳥收集了約100張圖片。我找到了鷙鳥在許多不同的環(huán)境及地點的圖片以建立圖像集。為了使圖像分類器有很好的泛化能力,至少用100張在不同的場景和背景中的圖像用來訓(xùn)練它是比較理想的。還有一些方法可以扭曲現(xiàn)有的圖像以得到更多的訓(xùn)練樣本,但這可能會降低你的訓(xùn)練過程的速度。注意我們不需要用成千上萬的樣本來訓(xùn)練模型,這是因為TensorFlow會用Inception模型之前訓(xùn)練特征檢測器來重新訓(xùn)練一個新模型。

我多做了一個實驗,即讓每種鷙鳥類圖像樣本的大約10%是幼鳥圖像。我很好奇分類器是否可以找到一個幼鳥和成年鳥之間的相似之處。

一旦有了合適的圖像數(shù)量和類型,我在我的TensorFlow目錄下創(chuàng)一個文件夾:

$ cd ~/tensorflow

$ mkdir tf_files && cd tf_files && mkdir bird_photos && cd bird_photos

$ mkdir baldeagle goldeneagle peregrine saker vulture

我的目錄結(jié)構(gòu)如下圖所示:

1-e2676fa4d128a71f3511bf7824c88642

圖1. 截圖由Justin Francis友情提供

然后我將鳥類的圖像集移動到相應(yīng)的文件夾中。該腳本接受PNG、JPG、GIF和TIF類型圖像,但我發(fā)現(xiàn)為了避免一個錯誤,我不得不重命名一個有很多符號的文件名。

訓(xùn)練模型

然后我使用克隆的TensorFlow源碼中的內(nèi)置python腳本訓(xùn)練了一個新模型和相關(guān)標簽。我們用來重新訓(xùn)練的原始計算圖是谷歌研究人員花費了兩個星期在一臺包含八個NVidia Tesla K40 GPU的計算機上訓(xùn)練得到的。
$ cd ~/tensorflow

$ python tensorflow/examples/image_retraining/retrain.py \
–bottleneck_dir=tf_files/bottlenecks \
–model_dir=tf_files/inception \
–output_graph=tf_files/retrained_graph.pb \
–output_labels=tf_files/retrained_labels.txt \
–image_dir tf_files/bird_photos

因為我安裝的TensorFlow有GPU支持,所以訓(xùn)練模型用了不到10分鐘。如果在我的舊Xeon CPU機器上進行這個訓(xùn)練,它可能需要花費一整天的時間。以下是訓(xùn)練結(jié)果:

2-3deb60ef9683a39c068891be34215f8d

圖2 截圖由Justin Francis友情提供

我的TensorFlow模型的最終測試精度為91.2%??紤]到我用了各種各樣不同的圖像,我覺得這個結(jié)果是非常令人驚喜的。

構(gòu)建分類器

到目前為止我采用了原始計算圖并用我自己的圖片集重新訓(xùn)練。接下來我用Bazel構(gòu)建了我自己的圖像分類器,它是從TensorFlow git上克隆下來的。(不要關(guān)閉終端,否則你將需要重新構(gòu)建)

$ bazel build tensorflow/examples/label_image:label_image

測試分類器

有趣的部分來了——對新的一組圖像進行分類器測試。為了簡便起見,我把我的測試圖像放在我的tf_files文件夾中。

$ bazel-bin/tensorflow/examples/label_image/label_image \
–graph=tf_files/retrained_graph.pb \
–labels=tf_files/retrained_labels.txt \
–output_layer=final_result \
–image=tf_files/bird.jpg #This is the test image

首先我嘗試分類一張我立即就能識別出為獵隼的圖片:

Saker_Falcon_RWD3_CROP-26899fd6c01c73f117e1061b1ff7b86e

圖3 成熟的獵隼,來自維基百科的DickDaniels作品

TensorFlow也識別出來是獵隼!

3-bb30fcf1430f8cc6796bad96b91aaad8

圖4 截圖由Justin Francis友情提供

接下來我嘗試了一張更復(fù)雜的且沒有在我的訓(xùn)練數(shù)據(jù)集中出現(xiàn)的幼年游隼圖片(下面左圖)。幼年游隼的前面羽毛跟獵隼類似,但當它成年后會變成條紋狀的腹部、黃色的喙和灰白色的下頸部。

Spinus-peregrine-falcon-2014-11-n017575-w_CROP-5078dac1b4d3c0b92c261b2cce5a08a4?Peregrine_falcon_Australia_CROP-e74b8243e3ca9799a36d20bfdb25d342

圖5 左圖:幼年游隼,來自維基百科的Spinus自然攝影圖像。右圖:成年游隼,來自維基百科的Norbert Fischer作品

令我驚訝的是分類器能夠以相當高的精確度識別出幼年游隼:

4-b308e5acf60bde659c5136d7edc04489

圖6 截圖由Justin Francis友情提供

我的最后一個例子使用了一張人類經(jīng)常會錯誤分類的鳥類圖片:幼年禿頭鷹。人類經(jīng)常會錯誤地認為它是一只金鷹,因為它的頭部和尾部沒有堅實的白色羽毛。我的訓(xùn)練分類器使用的訓(xùn)練圖片約包含10%的幼鷹圖片。

Fledging_Bald_Eagle_CROP-77b2f7a41bc3a3dc8a1efabc1078e05a

圖7 剛剛會飛的幼年禿鷹,來自維基百科的KetaDesign作品

似乎我的分類器還不能超過鳥類學(xué)家的智力:

5-24cd1dba5ac7413fd401664ebc5343ec

圖8 截圖由Justin Francis友情提供

我特別驚訝分類器的第二個猜測是“禿鷲”而不是“禿鷹”。這可能是因為我的很多禿鷲圖片的拍攝角度跟禿鷹類似。

那Merlin系統(tǒng)怎么樣?它的第一選擇是正確的而第二選擇也是非常合理的。

image07-a0114e5d931b331a65356ec586c5aefa

圖9 截圖由Justin Francis友情提供

Merlin系統(tǒng)只有在這張圖片的分類上打敗了我的分類器。但是如果有足夠的訓(xùn)練數(shù)據(jù),我完全相信我的分類器可以學(xué)會區(qū)別成年禿鷹、幼年禿鷹和金鷹。當然我需要一個單獨的包含更多圖片的幼年禿鷹文件夾。

我用這個分類器做了很多有趣的訓(xùn)練和實驗。我希望這篇博文也能夠幫你構(gòu)建你自己的分類器。研究人員和愛好者的創(chuàng)造能力是無限的,請在Twitter上通過@wagonhelm或#TensorFlow標記我。

Justin Francis

Justin居住在加拿大西海岸的一個小農(nóng)場。這個農(nóng)場專注于樸門道德和設(shè)計的農(nóng)藝。在此之前,他是一個非營利性社區(qū)合作社自行車商店的創(chuàng)始人和教育者。在過去的兩年中,他住在一艘帆船上,全職探索和體驗加拿大的喬治亞海峽。但現(xiàn)在他的主要精力都放在了學(xué)習(xí)機器學(xué)習(xí)上。

Photo mosaic. (source: Pixabay).