作者:Nick Bourdakos
摘要:本文以星球大戰(zhàn)中的千年隼號(hào)為例,介紹了如何使用強(qiáng)大的PowerAI來(lái)進(jìn)行對(duì)象檢測(cè)。
活動(dòng)中的自定義對(duì)象檢測(cè)(完整視頻地址)
當(dāng)前,大多數(shù)的大型科技公司(如IBM、Google、Microsoft和Amazon)都有自己的視覺(jué)識(shí)別產(chǎn)品。一些小公司也提供了類(lèi)似的產(chǎn)品,如Clarifai。但是他們都沒(méi)有提供對(duì)象檢測(cè)API。
下面兩張圖片都使用了相同的Watson Visual Recognition默認(rèn)分類(lèi)器進(jìn)行標(biāo)記。不過(guò),第一張圖片首先通過(guò)了一個(gè)對(duì)象檢測(cè)模型。
對(duì)象檢測(cè)比視覺(jué)識(shí)別先進(jìn)得多。但是如果想要進(jìn)行對(duì)象檢測(cè),你就不得不自己動(dòng)手了。
根據(jù)不同的使用情況,可能并不需要自定義對(duì)象檢測(cè)模型。?TensorFlow的對(duì)象檢測(cè)API提供了一些基于COCO數(shù)據(jù)集的不同速度和準(zhǔn)確度的模型。
這是COCO模型可檢測(cè)對(duì)象的完整列表:
如果想要檢測(cè)不在此列表中的東西,則必須構(gòu)建自己的自定義對(duì)象檢測(cè)器。
標(biāo)注圖片
訓(xùn)練自己的模型需要做很多工作。需要收集大量的圖像,并標(biāo)注它們。標(biāo)注包括指定對(duì)象坐標(biāo)和相應(yīng)的標(biāo)簽。對(duì)于包含兩個(gè)鈦戰(zhàn)機(jī)的圖像,標(biāo)注的結(jié)果是這樣的:
<annotation> <folder>images</folder> <filename>image1.jpg</filename> <size> <width>1000</width> <height>563</height> </size> <segmented>0</segmented> <object> <name>Tie Fighter</name> <bndbox> <xmin>112</xmin> <ymin>281</ymin> <xmax>122</xmax> <ymax>291</ymax> </bndbox> </object> <object> <name>Tie Fighter</name> <bndbox> <xmin>87</xmin> <ymin>260</ymin> <xmax>95</xmax> <ymax>268</ymax> </bndbox> </object></annotation>
針對(duì)星球大戰(zhàn)模型,我收集了308個(gè)圖片,每張圖片包含了兩到三個(gè)對(duì)象。我建議針對(duì)每個(gè)對(duì)象找出的200-300個(gè)樣本圖片。
我們是否需要為這幾百?gòu)垐D片寫(xiě)一大推的xml呢?
當(dāng)然不用!有很多標(biāo)注工具,比如labelImg和RectLabel。我使用的是RectLabel,但它只能在macOS上使用。不過(guò),還是有很多工作要做的。我花了大約三四個(gè)小時(shí)的時(shí)間來(lái)標(biāo)注整個(gè)數(shù)據(jù)集。創(chuàng)建標(biāo)注時(shí),請(qǐng)將其導(dǎo)出為PASCAL VOC格式。
在運(yùn)行腳本準(zhǔn)備數(shù)據(jù)之前,還需要做一些設(shè)置工作。
克隆代碼庫(kù)
從這里克隆代碼庫(kù)。目錄結(jié)構(gòu)如下所示:
models|-- annotations| |-- label_map.pbtxt| |-- trainval.txt| `-- xmls| |-- 1.xml| |-- 2.xml| |-- 3.xml| `-- ...|-- images| |-- 1.jpg| |-- 2.jpg| |-- 3.jpg| `-- ...|-- object_detection| `-- ...`-- ...
這里已經(jīng)包含了所有的訓(xùn)練數(shù)據(jù),開(kāi)箱即用。但是如果要用自己的數(shù)據(jù)創(chuàng)建模型,那么需要將你自己的訓(xùn)練圖像添加到images目錄中,將XML標(biāo)注添加到annotations/xmls目錄中,然后更新trainval.txt和label_map.pbtxt。
trainval.txt是一個(gè)文件名列表,用于查找和關(guān)聯(lián)JPG和XML文件。下面的trainval.txt列表讓我們可以找到abc.jpg、abc.xml、123.jpg、123.xml、xyz.jpg和xyz.xml:
abc123xyz
注意:請(qǐng)確保JPG和XML文件的文件名除了擴(kuò)展名之外是一樣的。
label_map.pbtxt是我們要檢測(cè)的對(duì)象列表。內(nèi)容是這樣的:
item { id: 1 name: 'Millennium Falcon'}item { id: 2 name: 'Tie Fighter'}
運(yùn)行腳本
首先,安裝Python和pip,并安裝腳本需要的組件:
pip install -r requirements.txt
在PYTHONPATH中加入models和models/slim:
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
重要提示:每次打開(kāi)終端后都要運(yùn)行一遍,或者添加到~/.bashrc文件中。
運(yùn)行腳本:
python object_detection/create_tf_record.py
腳本運(yùn)行結(jié)束之后,將會(huì)得到train.record和val.record文件。我們將用這兩個(gè)文件來(lái)訓(xùn)練模型。
下載模型
即使使用多個(gè)GPU,從頭開(kāi)始訓(xùn)練對(duì)象檢測(cè)器也可能需要數(shù)天的時(shí)間。為了加速訓(xùn)練,我們將采用一個(gè)在不同數(shù)據(jù)集上訓(xùn)練過(guò)的對(duì)象檢測(cè)器,并重新設(shè)置它的一些參數(shù)來(lái)初始化我們的新模型。
你可以從這個(gè)模型集市上下載模型。每個(gè)模型的準(zhǔn)確性和速度都不一樣。我使用的是faster_rcnn_resnet101_coco。
把所有的model.ckpt文件提取出來(lái)并復(fù)制到代碼庫(kù)的根目錄。
faster_rcnn_resnet101.config是faster_rcnn_resnet101_coco模型的配置文件。如果使用另一個(gè)模型,則可以在這里找到相對(duì)應(yīng)的配置文件。
準(zhǔn)備訓(xùn)練
運(yùn)行下面的腳本,訓(xùn)練開(kāi)始了!
python object_detection/train.py \ --logtostderr \ --train_dir=train \ --pipeline_config_path=faster_rcnn_resnet101.config
注意:將pipeline_config_path替換為配置文件實(shí)際的路徑。
global step 1:global step 2:global step 3:global step 4:...
好極了!開(kāi)始運(yùn)行了!
10分鐘后。
global step 41:global step 42:global step 43:global step 44:...
電腦開(kāi)始冒煙了
global step 71:global step 72:global step 73:global step 74:...
這東西要運(yùn)行多久呢? 視頻中使用的模型要運(yùn)行22000步。如果使用的是MacBook Pro,假設(shè)每15秒左右完成一步,以這樣的速度,大約需要三到四天的時(shí)間才能獲得一個(gè)差不多的模型。太費(fèi)時(shí)間了?。?!
救世主PowerAI強(qiáng)勢(shì)出擊!
PowerAI
PowerAI讓用戶可以在配置了P100 GPU的IBM Power Systems上快速訓(xùn)練模型!
大概只用了一個(gè)小時(shí)的時(shí)間就訓(xùn)練了一萬(wàn)步。不過(guò),這只用了一個(gè)GPU。 PowerAI的真正威力是能夠以高達(dá)95%的效率在數(shù)百個(gè)GPU上進(jìn)行分布式的深度學(xué)習(xí)。
在PowerAI的幫助下,IBM創(chuàng)造了在7個(gè)小時(shí)內(nèi)識(shí)別一張新圖像達(dá)到33.8%準(zhǔn)確率的記錄。它超過(guò)了微軟以前的行業(yè)紀(jì)錄,在10天內(nèi)達(dá)到29.9%的準(zhǔn)確率。
太快了!
創(chuàng)建一個(gè)Nimbix賬號(hào)
Nimbix為開(kāi)發(fā)者提供了在PowerAI平臺(tái)上免費(fèi)處理十個(gè)小時(shí)的試用帳戶。你可以在這里進(jìn)行注冊(cè)。
注意:這個(gè)過(guò)程不是自動(dòng)的,所以可能需要24小時(shí)才能審批通過(guò)。
申請(qǐng)通過(guò)后,你將收到一封電子郵件,其中包含有關(guān)確認(rèn)和創(chuàng)建帳戶的說(shuō)明。
現(xiàn)在,你可以在這里登錄了。
部署PowerAI Notebooks應(yīng)用
首先搜索PowerAI Notebooks。
點(diǎn)擊,然后選擇?TensorFlow。
選擇機(jī)器類(lèi)型:32 thread POWER8, 128GB RAM, 1x P100 GPU w/NVLink (np8g1)。
服務(wù)器開(kāi)啟,將顯示以下儀表板面板。當(dāng)服務(wù)器的Status變?yōu)镻rocessing時(shí),就可以訪問(wèn)服務(wù)器了。
點(diǎn)擊(click to show)獲取密碼。
然后點(diǎn)擊Click here to connect啟動(dòng)Notebook。
使用用戶名nimbix和先前提供的密碼進(jìn)行登錄。
開(kāi)始訓(xùn)練
點(diǎn)擊New下拉菜單并選擇Terminal,打開(kāi)一個(gè)新的終端窗口。
跳出一個(gè)熟悉的界面:
注意:該終端可能不能在Safari中運(yùn)行。
訓(xùn)練的步驟與我們?cè)诒镜剡M(jìn)行訓(xùn)練的步驟相同。如果你使用我的訓(xùn)練數(shù)據(jù),那么可以克隆我的代碼庫(kù):
git clone [https://github.com/bourdakos1/Custom-Object-Detection.git](https://github.com/bourdakos1/Custom-Object-Detection.git)
然后cd進(jìn)入根目錄:
cd Custom-Object-Detection
運(yùn)行下面這個(gè)命令,下載我們之前提到的預(yù)先訓(xùn)練好的faster_rcnn_resnet101_coco模型。
wget [http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz](http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz)tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gzmv faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* .
然后,再次設(shè)置PYTHONPATH,因?yàn)檫@是一個(gè)新的終端:
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
最后運(yùn)行訓(xùn)練命令:
python object_detection/train.py \ --logtostderr \ --train_dir=train \ --pipeline_config_path=faster_rcnn_resnet101.config
下載模型
數(shù)據(jù)越多,則需要的步驟也越多。我的模型在接近4500步的時(shí)候非常穩(wěn)定。然后,在大約20000步時(shí)達(dá)到峰值。我甚至做了20萬(wàn)步的訓(xùn)練,但是效果并不理想。
我建議每5000步左右下載一次模型,對(duì)其進(jìn)行評(píng)估,以確保你的方向是正確的。
點(diǎn)擊左上角的Jupyter徽標(biāo),打開(kāi)Custom-Object-Detection/train。
下載編號(hào)最大的model.ckpt文件。
model.ckpt-STEP_NUMBER.data-00000-of-00001model.ckpt-STEP_NUMBER.indexmodel.ckpt-STEP_NUMBER.meta注意:一次只能下載一個(gè)文件。
注意:完成后,請(qǐng)務(wù)必點(diǎn)擊機(jī)器上的紅色電源按鈕。否則,記時(shí)不會(huì)停止,時(shí)間會(huì)繼續(xù)走下去。
導(dǎo)出推理圖
要在代碼中使用模型,需要將檢查點(diǎn)文件(model.ckpt-STEP_NUMBER.*)轉(zhuǎn)換為推理圖。
將剛剛下載的檢查點(diǎn)文件復(fù)制到代碼庫(kù)的根目錄中。
然后運(yùn)行這個(gè)命令:
python object_detection/export_inference_graph.py \ --input_type image_tensor \ --pipeline_config_path faster_rcnn_resnet101.config \ --trained_checkpoint_prefix model.ckpt-STEP_NUMBER \ --output_directory output_inference_graph
記住執(zhí)行:
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
這時(shí),應(yīng)該可以看到一個(gè)新的output_inference_graph目錄和frozen_inference_graph.pb文件。這就是我們需要的文件。
測(cè)試模型
現(xiàn)在運(yùn)行以下命令:
python object_detection/object_detection_runner.py
它會(huì)在test_images目錄中的所有圖像上運(yùn)行output_inference_graph/frozen_inference_graph.pb中的對(duì)象檢測(cè)模型,并將結(jié)果輸出到output/test_images目錄中。
結(jié)果
點(diǎn)擊此處查看在“星球大戰(zhàn):原力覺(jué)醒”某個(gè)片段上運(yùn)行模型后得到的結(jié)果。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- IDC:三季度全球以太網(wǎng)交換機(jī)收入同比下降7.9%、環(huán)比增長(zhǎng)6.6%
- Fortinet李宏凱:2025年在中國(guó)大陸啟動(dòng)SASE PoP節(jié)點(diǎn)部署 助力企業(yè)出海
- Fortinet李宏凱:2024年Fortinet全球客戶已超80萬(wàn)
- 央國(guó)企采購(gòu)管理升級(jí),合合信息旗下啟信慧眼以科技破局難點(diǎn)
- Apache Struts重大漏洞被黑客利用,遠(yuǎn)程代碼執(zhí)行風(fēng)險(xiǎn)加劇
- Crunchbase:2024年AI網(wǎng)絡(luò)安全行業(yè)風(fēng)險(xiǎn)投資超過(guò)26億美元
- 調(diào)查報(bào)告:AI與云重塑IT格局,77%的IT領(lǐng)導(dǎo)者視網(wǎng)絡(luò)安全為首要挑戰(zhàn)
- 長(zhǎng)江存儲(chǔ)發(fā)布聲明:從無(wú)“借殼上市”意愿
- 泛微·數(shù)智大腦Xiaoe.AI正式發(fā)布,千人現(xiàn)場(chǎng)體驗(yàn)數(shù)智化運(yùn)營(yíng)場(chǎng)景
- IDC:2024年第三季度北美IT分銷(xiāo)商收入增長(zhǎng)至202億美元
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。