[AI] 使用object detection訓練自己的模型用於物體識別
阿新 • • 發佈:2018-12-20
軟體環境
- tensorflow (1.8.0)
- libprotoc 3.0.0/3.3.0
- tensorflow models
models/research/object_detection
(2018/dec版本)- models
git clone https://github.com/tensorflow/models.git
- pretrained models:
ssd_mobilenet_v1_coco_2018_01_28.tar.gz
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz
tar xfvz ./ssd_mobilenet_v1_coco_2018_01_28.tar.gz
- Python pip libraries
pip install absl-py --user
pip install Cython --user
pip install pycocotools --user
pip install pillow --user //PIL
參考網站
把 tensorflow路徑加到環境變數
nano ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/home/guohj/AI/lib/tensorflow/models-master/research:/home/guohj/AI/lib/tensorflow/models-master/research/slim
編譯 proto files
[email protected]:/home/guohj/AI/lib/tensorflow/models-master/research$ ../../protobuf/v3.3/bin/protoc object_detection/protos/*.proto --python_out=.
[email protected] :/home/guohj/AI/lib/tensorflow/models-master/research$
標記影象 label Images
使用工具LabelImg:
- Github: label Img
- 教程: 圖片標註工具使用介紹
git clone https://github.com/tzutalin/labelImg.git
Python 2 + Qt4
sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make qt4py2
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
Python 3 + Qt5
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
其他工具比較
- LabelMe: 最著名的工具之一。但是,使用者介面有點太慢,特別是放大影象時。
- RectLabel 簡單易用。僅適用於Mac
- LabelBox:非常適合大型標籤專案,並可選擇不同型別的標籤任務。
- VGG影象註釋器(VIA):快速,輕便,設計精良。這是我最終使用的那個。
- COCO UI:用於註釋COCO資料集的工具。
建立label map 檔案 (*.pbtxt)
id需要從1開始,class-N便是自己需要識別的物體類別名,檔案字尾為.pbtxt
item{
id:1,
name: 'class-1',
},
item{
id:2,
name: 'class-2',
}
生成 Record File
使用工具:
- 標記XML轉CSV指令碼 xml_to_csv.py
CSV+ JPG轉 tensorflow record檔案 generate_tfrecord.py
在函式class_text_to_int() 中增加所有標籤以及對映值(*.pbtxt中的id)。
python utils/generate_tfrecord.py --csv_input=s7_train_labels.csv --output_path=train.record
python utils/generate_tfrecord.py --csv_input=s7_test_labels.csv --output_path=test.record
訓練集、測試集 劃分比例:
- 資料量很小時(幾百張圖片),可以讓訓練集和測試集相同。
- 資料量不大的時候(萬級別及以下)一般將訓練集和測試集劃為7:3。若有驗證集,則劃為6:2:2.
- 到了大資料時代,資料量陡增為百萬級別,此時我們不需要那麼多的驗證集和訓練集。假設有100W條資料,只需要拿出1W條來當驗證集,1W條來當測試集,就能很好地work了。因此,在深度學習中若是資料很大,我們可以將訓練集、驗證集、測試集比例調整為98:1:1
training
下載並選擇一個coco資料集預訓練的模型:Tensorflow detection model zoo
根據自己的需要,選擇一款用coco資料集預訓練的模型,把字首model.ckpt放置在待訓練的目錄,這裡meta檔案儲存了graph和metadata,ckpt儲存了網路的weights,這幾個檔案表示預訓練模型的初始狀態。
比如選擇:ssd_mobilenet_v1_coco
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz
tar xfvz ./ssd_mobilenet_v1_coco_2018_01_28.tar.gz
Edit
pipeline.config
file.- num_classes:修改為自己的classes num
- 將所有PATH_TO_BE_CONFIGURED的地方修改為自己之前設定的路徑(共5處)
- 開始訓練
python object_detection/model_main.py --pipeline_config_path=/home/guohj/AI/training/S7_tf_ssd_mobilenet/pretrained/ssd_mobilenet_v1_coco_2018_01_28/pipeline.config --model_dir=/home/guohj/AI/training/S7_tf_ssd_mobilenet/trainres/ --num_train_steps=30000 --num_eval_steps=2000 --alsologtostderr
Tensorboard 進行監控
通過tensorboard工具,可以監控訓練過程。
tensorboard --logdir=/home/guohj/AI/training/S7_tf_ssd_mobilenet/trainres/
GPU 運算
Tensorflow 只能使用 CUDA 9.0,即使CUDA9.1都不行