zoukankan      html  css  js  c++  java
  • [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都不行

  • 相关阅读:
    java (java.exe) 解释器 -D 选项
    Ubuntu 12.04.3 X64 使用 NFS 作为文件共享存储方式 安装 Oracle11g RAC
    Ubuntu下 Oracle sqldeveloper中文目录、文件,select查询结果中:中文乱码
    行测题型
    Left join on where 区别
    常见公文——决定和请示
    宜家沙发测评
    "放管服"改革 清单
    shell && and ||
    ORA-01722: invalid number
  • 原文地址:https://www.cnblogs.com/herryzz/p/10150306.html
Copyright © 2011-2022 走看看