[AI] 使用object detection训练自己的模型用于物体识别

软件环境

  • 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

guohj@guopc:/home/guohj/AI/lib/tensorflow/models-master/research$ ../../protobuf/v3.3/bin/protoc object_detection/protos/*.proto --python_out=.
guohj@guopc:/home/guohj/AI/lib/tensorflow/models-master/research$ 

标记图像 label Images

使用工具LabelImg:

 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]

其他工具比较

  1. LabelMe: 最着名的工具之一。但是,用户界面有点太慢,特别是放大图像时。
  2. RectLabel 简单易用。仅适用于Mac
  3. LabelBox:非常适合大型标签项目,并可选择不同类型的标签任务。
  4. VGG图像注释器(VIA):快速,轻便,设计精良。这是我最终使用的那个。
  5. 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

使用工具:

  1. 标记XML转CSV脚本 xml_to_csv.py
  2. 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

训练集、测试集 划分比例:

  1. 数据量很小时(几百张图片),可以让训练集和测试集相同
  2. 数据量不大的时候(万级别及以下)一般将训练集和测试集划为7:3。若有验证集,则划为6:2:2.
  3. 到了大数据时代,数据量陡增为百万级别,此时我们不需要那么多的验证集和训练集。假设有100W条数据,只需要拿出1W条来当验证集,1W条来当测试集,就能很好地work了。因此,在深度学习中若是数据很大,我们可以将训练集、验证集、测试集比例调整为98:1:1

training

  1. 下载并选择一个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
  1. Edit pipeline.config file.
  1. num_classes:修改为自己的classes num
  2. 将所有PATH_TO_BE_CONFIGURED的地方修改为自己之前设置的路径(共5处)
  1. 开始训练
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都不行

posted @ 2018-12-20 16:45  herryzz  阅读(459)  评论(0编辑  收藏  举报