1. 程式人生 > >實踐三:使用谷歌物體檢測API訓練自己的資料集

實踐三:使用谷歌物體檢測API訓練自己的資料集

一.環境安裝:

ubuntu
1:TensorFlow環境二選一:
親測用使用公開資料CPU需要在i5下跑一晚上,GPU只要30分鐘,建議安裝TensorFlow 1.00

pip install tensorflow  # For CPU
pip install tensorflow-gpu  # For GPU

2:依賴環境

sudo apt-get install protobuf-compiler python-pil python-lxml
sudo pip install jupyter,matplotlib,pillow,lxml

3:務必需要的操作
必須編譯Protobuf庫,在object_detection同級目錄開啟終端執行:

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

將object_detection加入到環境變數
開啟.bashrc 修改下面PYTHONPATH為你的object_detection的路徑

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

4:環境監測
在object_detection同級目錄開啟終端執行:

python object_detection/builders/model_builder_test.py

結果沒有報錯,並且返回若干秒資料,則說明環境搭建成功。

二.資料預處理

解壓縮VOCtrainval然後執行create_pascal_tf_record.py來處理成TFRecord。

# From tensorflow/models/object_detection
tar -xvf VOCtrainval_11-May-2007.tar
python create_pascal_tf_record.py --data_dir=VOCdevkit \
   --year=VOC2007 --set=train --output_path=pascal_train.record
python create_pascal_tf_record.py --data_dir=VOCdevkit \
   --year=VOC2007 --set=val --output_path=pascal_val.record

這個create_pascal_tf_record.py做的事情分為三個部分
1,將每張圖片註釋引數(圖片的寬度與高度,物件邊界框,類名稱,…等)跟標籤對映(類ID跟類名稱的對應關係)讀出來並塞進tf.train.Example協議緩衝區
2,將tf.train.Example協議緩衝區序列化為字串
3,最後tf.python_io.TFRecordWriter把字元 串寫入TFRecords

三.修改配置

直接從專案中複製一個樣本出來改(object_detection/samples/configs/)我是使用的是 faster_rcnn_resnet101_voc07.config
配置檔案分成五個部分,
1,model模型的框架 meta-architecture, feature extractor…
2,train_config,定義 optimizer (Momentum, Adam, Adagrad…), fine-tune model
3,eval_config,定義valuation估值指標
4,train_input_config,定義作為訓練資料集與標籤對映路徑
5,eval_input_config,定義作為估值資料集的路徑與標籤對映路徑
主要修改這三部分
1:自定義路徑指定模型位置
fine_tune_checkpoint: “PATH_TO_BE_CONFIGURED/model.ckpt”
通常在進行訓練時不會從頭開始訓練,大部份會利用別人已經訓練好的引數來微調以減少訓練的時間fine_tune_checkpoint的數值為:你定義的faster_rcnn_resnet101_coco_11_06_2017位置(例如:”object_detection/faster_rcnn_resnet101_coco_11_06_2017/model.ckpt”)
2:指定訓練資料的label和record資料檔案
label檔案 官方已經有提供放在 object_detection/pascal_val.record

train_input_reader: {
    tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pascal_train.record" }
    label_map_path: "PATH_TO_BE_CONFIGURED/pascal_label_map.pbtxt"}

3:指定測試資料的label和record資料檔案

eval_input_reader: {
    tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED/pascal_val.record" }
    label_map_path: "PATH_TO_BE_CONFIGURED/pascal_label_map.pbtxt"
}

四.啟動訓練

構建標準專案結構,建立demo目錄為主資料夾
1,demo目錄下包含(train和eval,config檔案)
3,train目錄下包含(faster_rcnn_resnet101_coco_11_06_2017的解壓後文件)
3,eval是為空的,用於存放之後跑測試的檔案
另外我比較喜歡在新建一個dete資料夾,存放上面處理後的record資料檔案,和pascal_label_map .pbtxt類別對映表文件
然後開始執行吧!

python object_detection/train.py \
   --logtostderr \
   --pipeline_config_path=${定義的Config} \
   --train_dir=${訓練結果要存放的目錄}

如果你是按照上訴的標準結構的話則:

python train.py \
   --logtostderr \
   --pipeline_config_path="./demo/***.config" \
   --train_dir="./demo/train/"}

執行需要較大記憶體5-8G,訓練時日誌如下
當你的loss到0.5以下,基本就算訓練的比較準了,可以在執行eval來看看你的測試結果。

五.測試模型:

python object_detection/eval.py \
   --logtostderr \
   --pipeline_config_path=${定義的Config} \
   --checkpoint_dir=${訓練模型存放的目錄} \
   --eval_dir=${測試結果要存放的目錄}
# 之後再針對這個demo啟動tensorboard
tensorboard --logdir demo

之後瀏覽器檢視127.0.1.1:6006,在image下即可看到具體的識別結果了。

訓練自己的資料集

資料集準備:
在objcet_detect同級目錄

export PYTHONPATH=$PYTHONPATH:`pwd`

如果版本沒有slim路徑則加上

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

在create_pascal_tf_record.py中去掉’aeroplane_’。
這裡寫圖片描述
訓練驗證

#生成訓練集record  
python object_detection/dataset_tools/create_pascal_tf_record.py --data_dir=`自己的訓練資料集路徑` --year=VOC2007 --set=train --output_path=`你想儲存的訓練集的record路徑`  
#生成驗證集record  
python object_detection/dataset_tools/create_pascal_tf_record.py --data_dir=`自己的驗證資料集路徑` --year=VOC2007 --set=val --output_path=`你想儲存的驗證集的record路徑` 

針對kitti資料集

python object_detection/dataset_tools/create_kitti_tf_record.py --data_dir='/KITTI/'  --output_path='/object_detection/data/kitti/'

下載預訓練模型
將下載好的模型進行解壓,並將.ckpt的三個檔案拷貝到models目錄下。將./object_detection/samples/configs/ssd_inception_v2_coco.config複製到models目錄下並做如下修改:
1)num_classes:修改為之前修的的.pbtxt檔案中的類別數目
2)將所有’PATH_TO_BE_CONFIGURED’修改為自己之前設定的路徑將下載好的模型進行解壓,並將.ckpt的三個檔案拷貝到models目錄下。
開始訓練

python object_detection/train.py --train_dir='object_detection/log/kitti/train/' --pipeline_config_path='object_detection/models/ssd_inception_v2_coco.config'

模型視覺化

tensorboard --logdir='object_detection/log/kitti/train/'

訓練完成後會生成三個.cpkt的檔案,利用這三個檔案生成一個.pb檔案,生成程式碼如下:

python object_detection/export_inference_graph.py \  
    --pipeline_config_path 'object_detection/models/ssd_inception_v2_coco.config' \  
    --trained_checkpoint_prefix 'object_detection/log/kitti/train/model.ckpt-10000' \  
    --output_directory object_detection/log/kitti/train/model/

利用.pb檔案進行目標檢測

# /home/whsyxt/Desktop/zhuzhao/github_code/object_detection/log/kitti/train/train/model.ckpt-10000.meta
python object_detection/train.py --train_dir='./log/kitti/train' --pipeline_config_path='./data/kitticonfig/ssd_inception_v2_coco.config'

相關推薦

實踐使用物體檢測API訓練自己資料

一.環境安裝: ubuntu 1:TensorFlow環境二選一: 親測用使用公開資料CPU需要在i5下跑一晚上,GPU只要30分鐘,建議安裝TensorFlow 1.00 pip install tensorflow # For CPU pip in

目標檢測(Google object_detection) API訓練自己資料

知乎連結:https://zhuanlan.zhihu.com/p/28218410應公司要求,利用谷歌最近開源的Google object_detection API對公司收集的資料集進行訓練,並檢測訓練效果。通過一兩天的研究以及維持四天的訓練(GTX 1060  6GB)

Object Detection API(實物檢測模型庫)安裝過程踩過的坑

    在一個狀態極佳的夜晚,終於將惦記了好幾個月的object detection API裝好了,主要安裝步驟參考了這個部落格 ,手動比心❤ 但是在安裝過程中還是遇到了不少該部落格中沒有提到的問題,希望記錄下來,給自己日後參考,也希望能為有需要的人提供綿薄之力。1. 開發環

c#兩種方式呼叫google地球,呼叫COM API以及呼叫GEPLUGIN 與js互動,載入kml檔案,dae檔案。將二維高德地圖覆蓋到到地球表面。

網路上資源很多不全面,自己在開發的時候走了不少彎路,在這裡整理了最全面的google全套開發,COM互動,web端互動。封裝好了各種模組功能。 直接就可以呼叫。 第一種方式:呼叫COMAPI實現呼叫google地球 1、安裝googleearth客戶端。傳送門:https://pan.baidu.com/

免費訪問搜索,Gmail郵箱,Chrome商店

blog 使用 extension image not chrom tro note google 分享個免費的google的服務的方法 1,插件下載: http://note.youdao.com/noteshare?id=6a3e52f8d4ccf63c751eedd

中國黑客教父將用QUIC傳輸層技術加速互聯網

image 安全系統 通信 會話狀態 AR 人員 預測 逆轉 數據   黑客教父郭盛華表示:“安全這個話題,要感謝斯諾登,過去的安全就是攻和防之間的關系,即我們用一種什麽樣的體系、架構和模式去構建一個密不可破的安全系統。”   黑客郭盛華對IETF工作組忽視外部觀察者看起來

多巴胺開源新型增強學習框架

lis line 靈活 orm 額外 行為 mac otto msu https://mp.weixin.qq.com/s/KRyr0y84k6vkezuuM408lw Google 近日宣布開源一個新的基於 Tensorflow 的框架 —— Dopamine,旨在為

10月17日科技聯播公開承認中國“特供版”搜尋引擎存在;YouTube出現全球大範圍宕機

谷歌首次公開表示將重新進入中國市場,中國定製的“特供版 Google”真的存在!YouTube出現全球大宕機,網頁一片空白,遭遇網友瘋狂吐槽;騰訊再度出擊,上線音樂短視訊應用“音兔”,短視訊領域的又一佈局,一起來看今天的科技快訊: 谷歌公開承認針對中國專門研發搜尋引擎 谷歌執行長Sundar Pich

Java 破解翻譯 免費 api 呼叫

在公司大佬的指點下, 寫了個破解谷歌翻譯的工具類,能破解谷歌翻譯, 思路如下: 1 獲取 tkk 2 根據 tkk,和 輸入內容 獲取 tk 3 根據 word,tk ,組裝 url 訪問 谷歌翻譯 api -----------------------------

矽谷工人有力量員工引領科技勞工運動新高潮

“90後”女大學生放棄北大保送復旦!她到底有多厲害?  東北網12月6日訊(記者 姜姍姍) 在東北農業大學有這樣一個自強不息的女大學生,她放棄北大直博被保送到復旦大學藥學院。她本科期間獲得國家獎學金、國家勵志獎學金、新東方自強獎學金、第一屆全國大學生生命聯賽國家二等獎……被評為黑龍江省“三好學生”。她就是生命

華為開源能力中心杜玉傑——開源縱橫談與開源那些事兒

Google掌門人Eric Schmidt在《How Google Works》一書中有個章節專門談及戰略,並且把開放提升到戰略的高度來看待,當然這裡的開放包括企業文化,組織氛圍以及開放創新等多個維度,現如今企業如何開放創新已經有很多專著專門論述過了,但討論開源與企業戰略的並不多見,本文希望通過聊

JS程式碼優化一瀏覽器的timeline工具的使用

谷歌瀏覽器Timeline用法詳解: 大家都知道,谷歌瀏覽器自帶的相關工具是前端開發人員的利器。 點選F12會彈出一個介面,頂部帶有功能的選項卡,其中有幾個功能強大,但是相對較為複雜,比如Timeline,console和network。 (1).關於console的使用可以參閱谷歌控制檯console相關命

今日科技聯播公開承認中國“特供版”搜尋引擎存在;YouTube出現全球大範圍宕機...

點選關注雲棲社群,置頂公眾號專業的行業熱點新聞及技術乾貨,不容錯過---------------

全球廣告收入排行第一 百度第四

據Zenith釋出的《全球30大媒體主》報告顯示,2016年,谷歌與Facebook賺取了全球所有媒體廣告支出的20%。這一數字在五年內上升了9個百分點。谷歌母公司Alphabet是全球最大媒體主,去年廣告收入高達794億美元,是第二名Facebook(去年廣告

我不是機器人最新版驗證碼系統ReCaptcha破解已開源

選自 Github 作者:George Hughey 機器之心編譯 每個人都討厭驗證碼,這些惱人的圖片中包含你必須輸入的字元,我們只有正確地填寫才能繼續訪問網站。驗證碼旨在確認訪問者是人還是程式,並防止惡意程式的入侵。然而,隨著深度學習和計算機視覺技術的發展,現在這些認證方法可以被我們輕鬆破解了。 在

黃聰驗證 (Google Authenticator) 的實現原理是什麼?

開啟Google的登陸二步驗證(即Google Authenticator服務)後用戶登陸時需要輸入額外由手機客戶端生成的一次性密碼。實現Google Authenticator功能需要伺服器端和客戶端的支援。伺服器端負責金鑰的生成、驗證一次性密碼是否正確。客戶端記錄金鑰後生成一次性密碼。目前客戶端有:and

react中英文切換地圖中英文切換

<script> const url=localStorage.getItem('lang_type')==="zh_CN"?"//maps.google.cn/maps/api/js?key=YOUKEY&language=zh-CN&

iOS VIPER架構實踐()面向介面的路由設計

路由是實現模組間解耦的一個有效工具。如果要進行元件化開發,路由是必不可少的一部分。目前iOS上絕大部分的路由工具都是基於URL匹配的,優缺點都很明顯。這篇文章裡將會給出一個更加原生和安全的設計,這個設計的特點是: 路由時用protocol尋找模組可以對模

人工智慧翻譯之間的對決為什麼敗給了有道?

由於人工智慧的飛速發展,機器翻譯水平正在大幅提升,並逐漸趕超人類,這已經是不爭的事實。然而,同在

解決方案報-ERR_SSL_PROTOCOL_ERROR,火狐報-SSL 接收到一個超出最大准許長度的記錄【ssl_error_rx_record_too_long】

錯誤資訊:谷歌報-ERR_SSL_PROTOCOL_ERROR,火狐報-SSL 接收到一個超出最大准許長度的記錄【ssl_error_rx_record_too_long】,環境資訊:LNMP一鍵安裝包解決方案:修改配置檔案 /usr/local/nginx/config/*