1. 程式人生 > >配置TensorFlow的objetc_detection api,訓練自己的資料

配置TensorFlow的objetc_detection api,訓練自己的資料

objetc_detection api:

https://opensource.googleblog.com/2017/06/supercharge-your-computer-vision-models.html

github:

https://github.com/tensorflow/models/tree/master/research/object_detection

配置:

sudo apt-get install protobuf-compiler python-pil python-lxml sudo pip install jupyter sudo pip install matplotlib sudo pip install pillow
sudo pip install lxml sudo pip install jupyter sudo pip install matplotlib # From tensorflow/models/research/ protoc object_detection/protos/*.proto --python_out=. vim ~/.bashrc 在.bashrc中新增: export PYTHONPATH=$PYTHONPATH:/path/to/research:/path/to/research/slim 儲存 source ~/.bashrc 測試一下: python object_detection/builders/model_builder_test.py

在這個過程可能會遇到一個問題: " protoc object_detection/protos/*.proto --python_out=.", 儲存: object_detection/protos/anchor_generator.proto:11:3: Expected "required", "optio nal", or "repeated". object_detection/protos/anchor_generator.proto:11:32: Missing field number. 解決方法: tensorflow$ mkdir protoc_3.3 tensorflow$ cd protoc_3.3
tensorflow/protoc_3.3$ chmod 775 protoc-3.3.0-linux-x86_64.zip tensorflow/protoc_3.3$ unzip protoc-3.3.0-linux-x86_64.zip tensorflow/protoc_3.3$ cd ../models/ tensorflow/protoc_3.3$ /home/tensorflow/protoc_3.3/bin/protoc object_detection/protos/*.proto --python_out=.
訓練自己的資料 需要準備的東西: image資料夾,裡面是你要訓練的圖片 xml檔案,裡面是這些圖片的xml image_list,裡面是圖片的檔名(不帶字尾) 1、轉為tfrecode 官方給的create_pascal_tf_record.py是按照pascal資料寫的,咱們用的時候需要做一定更改 大家可以直接用我改好的 https://github.com/withyou1771/object_detection_api/blob/master/create_tf_record.py
python create_tf_record.py --output_path=/path/to/train.record
只需要修改main()函式下的data_dir,annotations_dir,examples_path,label_map_dict
label_map_dict可以參考data/pascal_label_map.pbtxt,根據自己的label寫一個,但是注意,id必須是1,2,3,4...如果用別的id,比如說01,02,03...就會報錯
報錯: label_map.ParseFromString(label_map_string) google.protobuf.message.DecodeError: Error parsing message 有的xml檔案會沒有標註框,這時候就會報錯, 報錯: KeyError: 'object' 把沒有標註框的圖片去掉就好啦

2、下載預訓練的模型
  1. wget http://download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz  
  2. tar -zxvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz  

3、修改.config object_detection/samples/configs下有各式各樣的網路,選一個你喜歡的
修改: num_classes: 類別數目,有10類就是10
fine_tune_checkpoint:faster_rcnn_resnet101_coco_11_06_2017解壓出的模型
from_detection_checkpoint: 為true
num_steps: 訓練步數
PATH_TO_BE_CONFIGURED修改為相應的路徑
4、訓練 python object_detection/train.py \  
     --pipeline_config_path='/path/to/train.config' \  
     --train_dir='/path/to/model/train'  
train_dir是儲存訓練模型的地方
如果遇到這個錯: 報錯: RuntimeError: generator didn't yield ERROR:tensorflow:================================== Object was never used (type <class 'tensorflow.python.framework.ops.Tensor'>): <tf.Tensor 'init_ops/report_uninitialized_variables/boolean_mask/Gather:0' shape=(?,) dtype=string> If you want to mark it as used call its "mark_used()" method. It was originally created here: 那麼可能是你的預訓練模型和你的輸出模型在一個資料夾,或者是你的預訓練模型缺少檔案,建議重新解壓一次 接著就是等待訓練完成啦