使用tensorflow object_detection API完成目標檢測

硬件環境

操作系統:ubuntu16.04LTS
顯卡:GTX1080Ti 10G顯存 內存32G
代碼託管在碼雲,因爲github實在是太慢了,老是timeout,翻牆也不行,搞了半天搞不定,突然看到中國有碼雲這個神器,以後就用碼雲來放代碼了。

環境配置:

基於miniconda創建的python2.7環境
自己寫一些腳本是用python3.6,訓練環境是用python2.7,不過統一用python3.6的問題也不大
tensorflow 中object_detection環境配置
Tip
(1)在linux下按官方要求配置行雲流水,在windows下比較麻煩些,搞深度學習建議放棄windows,使用ubuntu會少走很多坑。
(2)有GPU就裝GPU版本tensorflow,沒有GPU裝CPU,不能同時裝兩個版本
(3)tensorflow models需要另外下載
(4)建議將如下代碼改成在系統環境變量中添加,否則每次終端運行都需要加環境變量。

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

數據準備

使用LabelImg對圖片進行標註,標註的格式需要選擇pascal voc
快捷鍵:
W:標註 A:上一張 D:下一張 軟件右上方選擇默認標註的標籤。
生成的xml文件分成兩個文件夾train_xml和test_xml,一個用來訓練,一個用來驗證,注意是驗證不是測試!驗證是拿來計算損失的

下面的所有需要更改的對着源碼使用

標籤
mscoco_label_map.pbtxt
該文件可以在tensorlfow models裏搜索的,這個名字和路徑以及序號之後會用到,我只需要檢測一個目標,所以內容如下圖所示,(一個item代表一個目標,使用的vscode編輯的,id必須從1開始,因爲沒有目標也算其中一種檢測結果)

item {
  id: 1
  name: "barcode"
}

ubuntu就用vim吧,windows的不建議用記事本,之前用記事本噴到一個坑,而且很多時候使用記事本打開文件後再保存會導致該文件不可用。
生成數據
xml_to_tfrecode.py
tensorflow需要使用的是tfrecode格式數據,但是官方的函數是先轉成csv,然後轉成tfrecode格式,實在是太麻煩,而且最煩的就是運行python還要加這麼多參數,所以改了下代碼一步到位,根據自己的路徑自己更改下代碼直接運行。
配置位置:

train_xml_path = './trainxmls'
test_xml_path = './testxmls'
#outputPath是那個目錄名
outputPath = './data'
image_path = './images'
train_csv_path=os.path.join(outputPath, 'train.csv')
test_csv_path=os.path.join(outputPath, 'test.csv')
#train_recode_path和test_recode默認爲放在同一個文件目錄下
train_recode_path=os.path.join(outputPath, 'train.record')
test_recode_path=os.path.join(outputPath, 'test.record')
# TO-DO replace this with label map
def class_text_to_int(row_label):
    if row_label == 'barcode':
        return 1
    else:
        None
序號按照之前標籤規定的來寫

配置

faster_rcnn_inception_v2_coco.config中,需要更改的地方主要有:

num_classes: 2
batch_size: 16
num_steps: 50000
fine_tune_checkpoint: "models/model.ckpt"
input_path: "data/train.record"
label_map_path: "data/mscoco_label_map.pbtxt"
下面這個是在驗證集的配置中
input_path: "data/test.record"
label_map_path: "data/mscoco_label_map.pbtxt"

訓練

在train.py中進行訓練,詳見

'''
modify these configs to run the train.py
python train.py --logtostderr
'''
FLAGS.pipeline_config_path='faster_rcnn_inception_v2_coco.config'
FLAGS.train_dir='models/train'

導出模型

使用export_inference_graph.py導出模型,需要配置的地方如下:

'''
trange the config for your project and run the script
python export_inference_graph.py --input_type image_tensor
'''
FLAGS = flags.FLAGS
FLAGS.pipeline_config_path='./faster_rcnn_inception_v2_coco.config' 
FLAGS.trained_checkpoint_prefix='./models/train/model.ckpt-30000'
FLAGS.output_directory='./fine_tuned_model' 

模型測試

運行testModel.py,需要配置的屬性:

PATH_TO_CKPT = './fine_tuned_model/frozen_inference_graph.pb'
PATH_TO_LABELS='data/mscoco_label_map.pbtxt'
PATH_TO_TEST_IMAGES_DIR = 'test'
PATH_TO_SAVE_IMAGES_DIR = 'result'
NUM_CLASSES = 2

測試結果
結果
tensorlow object detection 目標檢測系列一些資料
使用TensorFlow Object Detection API進行物體檢測
使用tensorflow object detection api訓練自己的數據
tensorflow訓練模型庫
國外論壇教你一步一步訓練自己的模型
利用TF_Object_detection_API 訓練自己的模型
目標檢測筆記二:Object Detection API 小白實踐指南
深度學習入門篇–手把手教你用 TensorFlow 訓練模型
Tensorflow訓練自己的Object Detection模型並進行目標檢測
TensorFlow使用object detection訓練並識別自己的模型
如何在Windows下使用Tensorflow Object Detection API
老外的教程

重量級推薦

目標檢測系列大雜燴!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章