
Environment
Ubuntu 16.04
Tensorflow
# For CPU pip install tensorflow # For GPU pip install tensorflow-gpu
Libraries
sudo apt-get update sudo apt-get -y install protobuf-compiler python-pil python-lxml python-tk pip install --user Cython contextlib2 pillow lxml jupyter matplotlib pandas opencv-python
下載 tensorflow models
mkdir ~/Desktop/tensorflow cd ~/Desktop/tensorflow git clone https://github.com/tensorflow/models.git
設定 PYTHONPATH
vi ~/.bashrc
# 最後加上這行 export PYTHONPATH=$PYTHONPATH:~/Desktop/tensorflow/models/research:~/Desktop/tensorflow/models/research/slim
COCO API installation
git clone https://github.com/cocodataset/cocoapi.git cd cocoapi/PythonAPI make cp -r pycocotools ~/Desktop/tensorflow/models/research
Windows 版的安裝方式如下
- 先下載並安裝 Visual Studio 2017
https://visualstudio.microsoft.com/zh-hant/downloads/?rr=https%3A%2F%2Fwww.google.com.tw%2F - 因為 Visual Studio 不支援一些參數,所以要修改一下 setup.sh
# 原 extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'], # 改為 extra_compile_args=['-std=c99'],
- 到 cocoapi\PythoinAPI 下面執行
python setup.py install
Protobuf Compilation
# From tensorflow/models/research/ wget -O protobuf.zip https://github.com/google/protobuf/releases/download/v3.0.0/protoc-3.0.0-linux-x86_64.zip unzip protobuf.zip ./bin/protoc object_detection/protos/*.proto --python_out=.
Window 版
直接到 https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1 下載即可
然後在 models\research 下執行
bin\protoc --python_out=. .\object_detection\protos\anchor_generator.proto .\object_detection\protos\argmax_matcher.proto .\object_detection\protos\bipartite_matcher.proto .\object_detection\protos\box_coder.proto .\object_detection\protos\box_predictor.proto .\object_detection\protos\eval.proto .\object_detection\protos\faster_rcnn.proto .\object_detection\protos\faster_rcnn_box_coder.proto .\object_detection\protos\grid_anchor_generator.proto .\object_detection\protos\hyperparams.proto .\object_detection\protos\image_resizer.proto .\object_detection\protos\input_reader.proto .\object_detection\protos\losses.proto .\object_detection\protos\matcher.proto .\object_detection\protos\mean_stddev_box_coder.proto .\object_detection\protos\model.proto .\object_detection\protos\optimizer.proto .\object_detection\protos\pipeline.proto .\object_detection\protos\post_processing.proto .\object_detection\protos\preprocessor.proto .\object_detection\protos\region_similarity_calculator.proto .\object_detection\protos\square_box_coder.proto .\object_detection\protos\ssd.proto .\object_detection\protos\ssd_anchor_generator.proto .\object_detection\protos\string_int_label_map.proto .\object_detection\protos\train.proto .\object_detection\protos\keypoint_box_coder.proto .\object_detection\protos\multiscale_anchor_generator.proto .\object_detection\protos\graph_rewriter.proto
完成後記得 build & install
python setup.py build python setup.py install
Testing the Installation
# From tensorflow/models/research/ python object_detection/builders/model_builder_test.py
Quick Start: Distributed Training on the Oxford-IIIT Pets Dataset
Getting the Oxford-IIIT Pets Dataset
# From tensorflow/models/research/ wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz wget http://www.robots.ox.ac.uk/~vgg/data/pets/data/annotations.tar.gz tar -xvf images.tar.gz tar -xvf annotations.tar.gz
Create Tensorflow Record
產生 pet_label_map.pbtxt
# From tensorflow/models/research/
python object_detection/dataset_tools/create_pet_tf_record.py \
--label_map_path=object_detection/data/pet_label_map.pbtxt \
--data_dir=`pwd` \
--output_dir=`pwd`
將 TFRecord 複製到 data 目錄下
# From tensorflow/models/research/ mkdir data cp pet_faces_train.record-* data/ cp pet_faces_val.record-* data/ cp object_detection/data/pet_label_map.pbtxt data/pet_label_map.pbtxt
Downloading a COCO-pretrained Model
# From tensorflow/models/research/ wget http://storage.googleapis.com/download.tensorflow.org/models/object_detection/faster_rcnn_resnet101_coco_11_06_2017.tar.gz tar -xvf faster_rcnn_resnet101_coco_11_06_2017.tar.gz cp faster_rcnn_resnet101_coco_11_06_2017/model.ckpt.* data/
Configuring the Object Detection Pipeline
# From tensorflow/models/research/
# 編輯以下檔案,並將 PATH_TO_BE_CONFIGURED 修改為所在的目錄
# object_detection/samples/configs/faster_rcnn_resnet101_pets.config
# Copy edited template to cloud.
cp object_detection/samples/configs/faster_rcnn_resnet101_pets.config \
data/faster_rcnn_resnet101_pets.config
Starting Training and Evaluation Jobs
# From tensorflow/models/research/ bash object_detection/dataset_tools/create_pycocotools_package.sh /tmp/pycocotools python setup.py sdist (cd slim && python setup.py sdist)
Running the Training Job
# From the tensorflow/models/research/ directory
PIPELINE_CONFIG_PATH={path to pipeline config file}
MODEL_DIR={path to model directory}
NUM_TRAIN_STEPS=50000
SAMPLE_1_OF_N_EVAL_EXAMPLES=1
python object_detection/model_main.py \
--pipeline_config_path=${PIPELINE_CONFIG_PATH} \
--model_dir=${MODEL_DIR} \
--num_train_steps=${NUM_TRAIN_STEPS} \
--sample_1_of_n_eval_examples=$SAMPLE_1_OF_N_EVAL_EXAMPLES \
--alsologtostderr
Running Tensorboard
tensorboard --logdir=${MODEL_DIR}
Sample files
annotation
<annotation>
<folder>OXIIIT</folder>
<filename>Abyssinian_100.jpg</filename>
<source>
<database>OXFORD-IIIT Pet Dataset</database>
<annotation>OXIIIT</annotation>
<image>flickr</image>
</source>
<size>
<width>394</width>
<height>500</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>cat</name>
<pose>Frontal</pose>
<truncated>0</truncated>
<occluded>0</occluded>
<bndbox>
<xmin>151</xmin>
<ymin>71</ymin>
<xmax>335</xmax>
<ymax>267</ymax>
</bndbox>
<difficult>0</difficult>
</object>
</annotation>



