Mac下使用TensorFlow實(shí)現(xiàn)物體檢測

參考鏈接:github.com/tensorflow/models/tree/master/object_detection

?準(zhǔn)備:已安裝tensorFlow力细,HomeBrew,pip埋凯,tensorflow下的models握础。

models鏈接:github.com/tensorflow/models

首先進(jìn)入激活虛擬機(jī):

source python2.7/bin/activate

我是使用的虛擬機(jī)安裝的辐董,所以實(shí)際我運(yùn)行的是linux的環(huán)境。首先我需要安裝wget弓候,用于獲取網(wǎng)絡(luò)東西郎哭。

brew install wget

步驟1:安裝Libraries和依賴

pip install pillow

pip install lxml

?pip install jupyter

pip install matplotlib

如果發(fā)現(xiàn)安裝完jupyter之后,jupyter命令還是找不到菇存,則執(zhí)行

export PATH="$HOME/Library/Python/2.7/bin:$PATH"

步驟2:Protobuf Compilation & Add Libraries to PYTHONPATH

因?yàn)閐etection api使用的是Protobuf(谷歌的)來配置模型和參數(shù),所以在每次重新打開終端運(yùn)行前邦蜜,都需要重新執(zhí)行以下命令依鸥,編譯protobuf庫。

#From tensorflow/models/

protoc object_detection/protos/*.proto --python_out=.

protoc 命令可能找不到悼沈,需要安裝.我是下載了protobuf的源碼贱迟,然后編譯安裝的姐扮。

#From tensorflow/models/

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

步驟3:測試安裝

python object_detection/builders/model_builder_test.py

步驟4:準(zhǔn)備數(shù)據(jù)


訓(xùn)練要用到的數(shù)據(jù)為TF Record格式的數(shù)據(jù),所以我們需要將jpg圖片數(shù)據(jù)轉(zhuǎn)換成TFRecord數(shù)據(jù)衣吠。首先茶敏,我們從網(wǎng)上下載標(biāo)記好的圖片數(shù)據(jù)。下載地址為:www.robots.ox.ac.uk/~vgg/data/pets/

執(zhí)行如下命令缚俏,在tensorflow/models/object_detection下

然后解壓數(shù)據(jù):

tar -xvf annotations.tar.gz

tar -xvf images.tar.gz

會發(fā)現(xiàn)惊搏,image下全是標(biāo)記好的圖片(jpeg,jpg)。調(diào)用腳本忧换,將圖片數(shù)據(jù)轉(zhuǎn)換成TFRecord數(shù)據(jù)恬惯。

python create_pet_tf_record.py --data_dir=`pwd`--output_dir=`pwd`

執(zhí)行完成后,將會在該目錄下生產(chǎn)pet_train.record 和pet_val.record兩個文件


這兩個文件就是image轉(zhuǎn)換成record格式之后的數(shù)據(jù)亚茬,也是訓(xùn)練要求的數(shù)據(jù)格式酪耳。

訓(xùn)練還需要一個標(biāo)簽文件,用于標(biāo)記某個標(biāo)記代表某種東西(這里是寵物)刹缝,而這個標(biāo)簽文件已存在于object_detection/data目錄下:


我們這里下的是pet的數(shù)據(jù)碗暗,所以我們要使用的就是pet_label_map.pbtxt

步驟5:配置通道

在object_detection/samples下有各種模型的通道配置,拷貝一種出來梢夯。我拷貝了ssd_inception_v2_pets.config放在object_detection/models新建的model下讹堤。然后我把生成的兩個配置文件放到了object_detection/data下

目錄結(jié)構(gòu)參考如下:

建議目錄結(jié)構(gòu)參考

配置所需要更改的是如下3部分:




配置之后為:


這里是設(shè)置檢查點(diǎn),我這里未設(shè)置檢查點(diǎn)厨疙,所以from_detection_checkpoint 設(shè)置為false洲守。如果需要設(shè)置檢查點(diǎn),則from_detection_checkpoint設(shè)置為true沾凄,fine_tune_checkpoint需要設(shè)置檢查點(diǎn)的路徑梗醇。checkpoint可以減少訓(xùn)練時(shí)間,它是別人訓(xùn)練出來的撒蟀。這個可以從網(wǎng)上下載叙谨。

檢查點(diǎn)的下載地址為:github.com/tensorflow/models/blob/master/object_detection/g3doc/detection_model_zoo.md


注意這里下載的模型數(shù)據(jù)要和你使用的config文件是要對應(yīng)的,比如我的config文件為ssd_inception_v2_pets.config保屯,那我這里應(yīng)該要下載的檢查點(diǎn)數(shù)據(jù)就是第2個
input_path 設(shè)置我們之前準(zhǔn)備的train record數(shù)據(jù)的路徑手负,label_map_path為標(biāo)簽路徑



input_path 設(shè)置我們之前準(zhǔn)備的eval record數(shù)據(jù)的路徑,label_map_path為標(biāo)簽路徑

步驟5:訓(xùn)練

數(shù)據(jù)都準(zhǔn)備好了姑尺,就可以開始訓(xùn)練了竟终。在object_detection的目錄下有個train.py的訓(xùn)練腳本。

調(diào)用該腳本切蟋,開始訓(xùn)練统捶。

python object_detection/train.py \

--logtostderr \

--pipeline_config_path=object_detection/models/model/ssd_inception_v2_pets.config \

--train_dir=object_detection/models/model/train ?

--pipeline_config_path 指定訓(xùn)練通道路徑,--train_dir 指定訓(xùn)練的結(jié)果輸出路徑

然后等待,開始的損失很高喘鸟,會逐漸降低匆绣。loss值越低,表示模型準(zhǔn)確率越高什黑。

步驟5:評估

再開一個終端崎淳,對產(chǎn)生的model進(jìn)行評估。執(zhí)行如下腳本命令

python object_detection/eval.py \

--logtostderr \

--pipeline_config_path=object_detection/models/model/ssd_inception_v2_pets.config \

--checkpoint_dir=object_detection/models/model/train \

--eval_dir=object_detection/models/model/eval


再在另一個終端輸入命令:tensorboard --logdir=object_detection/models/model,即可得到一個鏈接地址愕把,在瀏覽器中輸入即可圖形式的查看拣凹。logdir指向帶有train和eva的目錄地址。

在SCALARS那欄下面可以查看各種線性圖:


在Images那欄可以看到對模型的評估:


PS:訓(xùn)練的時(shí)間有點(diǎn)長礼华,可能需要花費(fèi)幾天時(shí)間咐鹤,當(dāng)loss降到10左右時(shí),在tensorflow上看到的images 是沒標(biāo)記的了圣絮,而且此時(shí)loss下降很祈惶。所以你會懷疑你訓(xùn)練的模型是不是錯了,其實(shí)是沒錯的扮匠,當(dāng)它繼續(xù)往下走的捧请,它就慢慢地正常標(biāo)記了。建議開始使用checkpoint棒搜,時(shí)間會快很多疹蛉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市力麸,隨后出現(xiàn)的幾起案子可款,更是在濱河造成了極大的恐慌,老刑警劉巖克蚂,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闺鲸,死亡現(xiàn)場離奇詭異,居然都是意外死亡埃叭,警方通過查閱死者的電腦和手機(jī)摸恍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赤屋,“玉大人立镶,你說我怎么就攤上這事±嘣纾” “怎么了媚媒?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長莺奔。 經(jīng)常有香客問我欣范,道長变泄,這世上最難降的妖魔是什么令哟? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任恼琼,我火速辦了婚禮,結(jié)果婚禮上屏富,老公的妹妹穿的比我還像新娘晴竞。我一直安慰自己,他們只是感情好狠半,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布噩死。 她就那樣靜靜地躺著,像睡著了一般神年。 火紅的嫁衣襯著肌膚如雪已维。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天已日,我揣著相機(jī)與錄音垛耳,去河邊找鬼。 笑死飘千,一個胖子當(dāng)著我的面吹牛堂鲜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播护奈,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缔莲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霉旗?” 一聲冷哼從身側(cè)響起痴奏,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厌秒,沒想到半個月后读拆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简僧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年建椰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岛马。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡棉姐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啦逆,到底是詐尸還是另有隱情伞矩,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布夏志,位于F島的核電站乃坤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜湿诊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一狱杰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厅须,春花似錦仿畸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眶拉,卻和暖如春千埃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忆植。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工放可, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唱逢。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓吴侦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坞古。 傳聞我的和親對象是個殘疾皇子备韧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容