《威利在哪里?》(Where’s Wally)是由英國(guó)插畫家馬丁·漢德福特(Martin Handford)創(chuàng)作的一套兒童繪本。這個(gè)書的目標(biāo)就是在一張人山人海的圖片中找出一個(gè)特定的人物——威利(Wally)。“Where’s Wally”的商標(biāo)已在28個(gè)國(guó)家進(jìn)行了注冊(cè),為方便語(yǔ)言翻譯,每一個(gè)國(guó)家都會(huì)給威利起一個(gè)新名字,最成功的是北美版的“Where’s Waldo”,在這里,威利改名成了沃爾多(Waldo)。
現(xiàn)在,機(jī)器學(xué)習(xí)博主Tadej Magajna另辟蹊徑,利用深度學(xué)習(xí)解開“威利在哪里”的問(wèn)題。與傳統(tǒng)的計(jì)算機(jī)視覺(jué)圖像處理方法不同的是,它只使用了少數(shù)幾個(gè)標(biāo)記出威利位置的圖片樣本,就訓(xùn)練成了一套“尋找威利”的系統(tǒng)。
訓(xùn)練過(guò)的圖像評(píng)估模型和檢測(cè)腳本發(fā)布在作者的GitHub repo上。
本文介紹了用TensorFlow物體檢測(cè)API訓(xùn)練神經(jīng)網(wǎng)絡(luò)、并用相應(yīng)的Python腳本尋找威利的過(guò)程。大致分為以下幾步:
將圖片打標(biāo)簽后創(chuàng)建數(shù)據(jù)集,其中標(biāo)簽注明了威利在圖片中的位置,用x,y表示;
用TensorFlow物體檢測(cè)API獲取并配置神經(jīng)網(wǎng)絡(luò)模型;
在數(shù)據(jù)集上訓(xùn)練模型;
用導(dǎo)出的圖像測(cè)試模型;
開始前,請(qǐng)確保你已經(jīng)按照說(shuō)明安裝了TensorFlow物體檢測(cè)API。
創(chuàng)建數(shù)據(jù)集
雖說(shuō)深度學(xué)習(xí)中最重要的環(huán)節(jié)是處理神經(jīng)網(wǎng)絡(luò),但不幸的是,數(shù)據(jù)科學(xué)家們總要花費(fèi)大量時(shí)間準(zhǔn)備訓(xùn)練數(shù)據(jù)。
最簡(jiǎn)單的機(jī)器學(xué)習(xí)問(wèn)題最終得到的通常是一個(gè)標(biāo)量(如數(shù)字檢測(cè)器)或是一個(gè)分類字符串。TensorFlow物體檢測(cè)API在訓(xùn)練數(shù)據(jù)是則將上述兩個(gè)結(jié)果結(jié)合了起來(lái)。它由一系列圖像組成,并包含目標(biāo)對(duì)象的標(biāo)簽和他們?cè)趫D像中的位置。由于在二維圖像中,兩個(gè)點(diǎn)足以在對(duì)象周圍繪制邊界框,所以圖像的定位只有兩個(gè)點(diǎn)。
為了創(chuàng)建訓(xùn)練集,我們需要準(zhǔn)備一組Where’s Wally的插畫,并標(biāo)出威利的位置。在此之前已經(jīng)有人做出了一套解出威利在哪里的訓(xùn)練集。
最右邊的四列描述了威利所在的位置
創(chuàng)建數(shù)據(jù)集的最后一步就是將標(biāo)簽(.csv)和圖片(.jpeg)打包,存入單一二分類文件中(.tfrecord)。詳細(xì)過(guò)程可參考這里,訓(xùn)練和評(píng)估過(guò)程也可以在作者的GitHub上找到。
準(zhǔn)備模型
TensorFlow物體檢測(cè)API提供了一組性能不同的模型,它們要么精度高,但速度慢,要么速度快,但精度低。這些模型都在公開數(shù)據(jù)集上經(jīng)過(guò)了預(yù)訓(xùn)練。
雖然模型可以從頭開始訓(xùn)練,隨機(jī)初始化網(wǎng)絡(luò)權(quán)重,但這可能需要幾周的時(shí)間。相反,這里作者采用了一種稱為遷移學(xué)習(xí)(Transfer Learning)的方法。
這種方法是指,用一個(gè)經(jīng)常訓(xùn)練的模型解決一般性問(wèn)題,然后再將它重新訓(xùn)練,用于解決我們的問(wèn)題。也就是說(shuō),與其從頭開始訓(xùn)練新模型,不如從預(yù)先訓(xùn)練過(guò)的模型中獲取知識(shí),將其轉(zhuǎn)移到新模型的訓(xùn)練中,這是一種非常節(jié)省時(shí)間的方法。
作者使用了在COCO數(shù)據(jù)集上訓(xùn)練過(guò)的搭載Inception v2模型的RCNN。該模型包含一個(gè).ckpycheckpoint文件,可以利用它開始訓(xùn)練。
配置文件下載完成后,請(qǐng)確保將“PATHTOBE_CONFIGURED”字段替換成指向checkpoint文件、訓(xùn)練和評(píng)估的.tfrecord文件和標(biāo)簽映射文件的路徑。
最后需要配置的文件是labels.txt映射文件,其中包含我們所有不同對(duì)象的標(biāo)簽。由于我們尋找的都是同一個(gè)類型的對(duì)象(威利),所以標(biāo)簽文件如下:
item {
id: 1
name: 'waldo'
}
最終應(yīng)該得到:
一個(gè)有著checkpoint文件的預(yù)訓(xùn)練模型;
經(jīng)過(guò)訓(xùn)練并評(píng)估的.tfrecord數(shù)據(jù)集;
標(biāo)簽映射文件;
指向上述文件的配置文件。
然后就可以開始訓(xùn)練啦。
訓(xùn)練
TensorFlow物體檢測(cè)API提供了一個(gè)十分容易上手的Python腳本,可以在本地訓(xùn)練模型。它位于models/research/object_detection中,可以通過(guò)以下命令運(yùn)行:
python train.py --logtostderr --pipeline_config_path= PATH_TO_PIPELINE_CONFIG --train_dir=PATH_TO_TRAIN_DIR
PATH_TO_PIPELINE_CONFIG是通往配置文件的路徑,PATH_TO_TRAIN_DIR是新創(chuàng)建的directory,用來(lái)儲(chǔ)存checkpoint和模型。
train.py的輸出看起來(lái)是這樣:
用最重要的信息查看是否有損失,這是各個(gè)樣本在訓(xùn)練或驗(yàn)證時(shí)出現(xiàn)錯(cuò)誤的總和。當(dāng)然,你肯定希望它降得越低越好,因?yàn)槿绻诰徛叵陆担鸵馕吨愕哪P驼趯W(xué)習(xí)(要么就是過(guò)擬合了你的數(shù)據(jù)……)。
你還可以用Tensorboard顯示更詳細(xì)的訓(xùn)練數(shù)據(jù)。
腳本將在一定時(shí)間后自動(dòng)存儲(chǔ)checkpoint文件,萬(wàn)一計(jì)算機(jī)半路崩潰,你還可以恢復(fù)這些文件。也就是說(shuō),當(dāng)你想完成模型的訓(xùn)練時(shí),隨時(shí)都可以終止腳本。
但是什么時(shí)候停止學(xué)習(xí)呢?一般是當(dāng)我們的評(píng)估集損失停止減少或達(dá)到非常低的時(shí)候(在這個(gè)例子中低于0.01)。
測(cè)試
現(xiàn)在,我們可以將模型用于實(shí)際測(cè)試?yán)病?/p>
首先,我們需要從儲(chǔ)存的checkpoint中輸出一個(gè)推理圖(interference graph),利用的腳本如下:
python export_inference_graph.py — pipeline_config_path PATH_TO_PIPELINE_CONFIG --trained_checkpoint_prefix PATH_TO_CHECPOINT --output_directory OUTPUT_PATH
產(chǎn)生的推理圖就是用來(lái)Python腳本用來(lái)找到威利的工具。
作者寫了幾個(gè)簡(jiǎn)單目標(biāo)定位的腳本,其中find_wally.py和find_wally_pretty.py都可以在他的GitHub上找到,并且運(yùn)行起來(lái)也很簡(jiǎn)單:
python find_wally.py
或者
python find_wally_pretty.py
不過(guò)當(dāng)你在自己的模型或圖像上運(yùn)行腳本時(shí),記得改變model-path和image-path的變量。
結(jié)語(yǔ)
模型的表現(xiàn)出乎意料地好。它不僅從數(shù)據(jù)集中成功地找到了威利,還能在隨機(jī)從網(wǎng)上找的圖片中找到威利。
但是如果威利在圖中特別大,模型就找不到了。我們總覺(jué)得,不應(yīng)該是目標(biāo)物體越大越好找嗎?這樣的結(jié)果表明,作者用于訓(xùn)練的圖像并不多,模型可能對(duì)訓(xùn)練數(shù)據(jù)過(guò)度擬合了。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100772 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84690 -
tensorflow
+關(guān)注
關(guān)注
13文章
329瀏覽量
60536
原文標(biāo)題:如何用神經(jīng)網(wǎng)絡(luò)“尋找威利”
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論