原文地址:搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型

0x00 环境

OS: Ubuntu 1810 x64

Anaconda: 4.6.12

Python: 3.6.8

TensorFlow: 1.13.1

OpenCV: 3.4.1

0x01 基础环境配置

Anaconda 下载地址: Anaconda-4.6.12-Linux

本文中安装位置为 /usr/local/anaconda3

修改默认的 python 版本为 3.6

conda install python=3.6

安装 OpenCV 3.4.1

conda install opencv=3.4.1

安装 TensorFlow 1.13.1

conda install tensorflow=1.13.1

0x02 TensorFlow Models

下载地址: Github - TensorFlow Models

下载后得到一个 models-master.zip 文件,解压后移动到 /usr/local/anaconda3/lib/python3.6/site-packages/tensorflow 文件夹下,并重命名为 models

unzip models-master.zip
mv models /usr/local/anaconda3/lib/python3.6/site-packages/tensorflow

进入 models/research/ 目录,并编译 protobuf

cd /usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research
protoc object_detection/protos/*.proto --python_out=.

安装 object_detection 库

python setup.py build
python setup.py install

设置 PYTHONPATH

export PYTHONPATH=$PYTHONPATH:/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research
export PYTHONPATH=$PYTHONPATH:/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research/slim

直接执行以上命令只会在当前终端生效,将以上命令写入 ~/.bashrc 并执行如下命令可以永久保存

source ~/.bashrc

测试 object_detection 库是否安装成功

python object_detection/builders/model_builder_test.py

进入 object_detection/ 目录并启动 jupyter-notebook,测试目标检测

cd object_detection/
jupyter-notebook

在浏览器中打开 http://localhost:8888/,进入 jupyter-notebook 控制台,打开 object_detection_tutorial.ipynb 文件并执行,待模型下载完成并检测完成后会在页面底部出现两张标注后的图片

0x03 训练

下载 VOC 2012 数据集: VOCtrainval_11-May-2012.tar

object_detection/ 目录下创建目录 ssd_model,并解压数据集至 object_detection/ssd_model

mkdir ssd_model/
cd ssd_model
tar xvf VOCtrainval_11-May-2012.tar

返回 research/ 目录,执行 train 和 val 脚本

cd ../..
python ./object_detection/dataset_tools/create_pascal_tf_record.py --label_map_path=./object_detection/data/pascal_label_map.pbtxt --data_dir=object_detection/ssd_model/VOCdevkit/ --year=VOC2012 --set=train --output_path=./object_detection/ssd_model/pascal_train.record
python ./object_detection/dataset_tools/create_pascal_tf_record.py --label_map_path=./object_detection/data/pascal_label_map.pbtxt --data_dir=./object_detection/ssd_model/VOCdevkit/ --year=VOC2012 --set=val --output_path=./object_detection/ssd_model/pascal_val.record

这两个脚本会在 ssd_model/ 目录下生成 pascal_train.record 和 pascal_val.record 两个文件,各 600M 左右

复制配置文件,在此基础上修改,并训练数据

cp object_detection/data/pascal_label_map.pbtxt object_detection/ssd_model/
cp object_detection/samples/configs/ssd_mobilenet_v1_pets.config object_detection/ssd_model/

pascal_label_map.pbtxt 文件中保存了数据集中有哪些 label

将 ssd_mobilenet_v1_pets.config 中的 num_classes 改为 pascal_label_map.pbtxt 中列出的文件数量,这里是 20,并修改迭代次数 num_steps,并将配置文件末尾的路径按照如下格式修改

train_input_reader: {
tf_record_input_reader {
input_path: "/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research/object_detection/ssd_model/pascal_train.record"
}
label_map_path: "/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research/object_detection/ssd_model/pascal_label_map.pbtxt"
} eval_input_reader: {
tf_record_input_reader {
input_path: "/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research/object_detection/ssd_model/pascal_val.record"
}
label_map_path: "/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research/object_detection/ssd_model/pascal_label_map.pbtxt"
shuffle: false
num_readers: 1
}

下载 ssd_mobilenet 至 ssd_model/ 目录下,解压并重命名为 ssd_mobilenet

ssd_mobilenet: ssd_mobilenet_v1_coco_11_06_2017.tar.gz

tar zxvf ssd_mobilenet_v1_coco_11_06_2017.tar.gz
mv ssd_mobilenet_v1_coco_11_06_2017 ssd_mobilenet

将 ssd_mobilenet_v1_pets.config 中 fine_tune_checkpoint 修改为如下格式的路径

fine_tune_checkpoint: "/usr/local/anaconda3/lib/python3.6/site-packages/tensorflow/models/research/object_detection/ssd_model/ssd_mobilenet/model.ckpt"

使用 train.py 脚本训练模型

注意:脚本可能位于 object_detection/object_detection/legacy/ 目录下

这里位于 object_detection/legacy/ 目录

python ./object_detection/legacy/train.py --train_dir ./object_detection/legacy/train/ --pipeline_config_path ./object_detection/ssd_model/ssd_mobilenet_v1_pets.config

运行 export_inference_graph.py 脚本将训练出的模型固化成 TensorFlow 的 .pb 模型,其中 trained_checkpoint_prefix 要设置成 model.ckpt-[step],其中 step 要与训练迭代次数相同

python ./object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path ./object_detection/ssd_model/ssd_mobilenet_v1_pets.config --trained_checkpoint_prefix ./object_detection/legacy/train/model.ckpt-9000 --output_directory ./object_detection/ssd_model/model/

转换后生成的 .pb 模型位于 object_detection/ssd_model/model/ 目录下

将 pascal_label_map.pbtxt 作为 label 文件

搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型的更多相关文章

  1. 用grunt搭建web前端开发环境

    1.前言 本文章旨在讲解grunt入门,以及讲解grunt最常用的几个插件的使用. 2.安装node.js Grunt和所有grunt插件都是基于nodejs来运行的,如果你的电脑上没有nodejs, ...

  2. Windows下搭建Spark+Hadoop开发环境

    Windows下搭建Spark+Hadoop开发环境需要一些工具支持. 只需要确保您的电脑已装好Java环境,那么就可以开始了. 一. 准备工作 1. 下载Hadoop2.7.1版本(写Spark和H ...

  3. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  4. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  6. 搭建Android底层开发环境

    为了开发linux驱动方便些,我们一般将linux作为Android的开发环境,那么就需要搭建Android的开发环境,下面是一些搭建Android底层时的心得: (1)安装JDK:除了普遍使用的下载 ...

  7. Xamarin Andro教程搭建Xamarin Androidid开发环境(一)

    Xamarin Andro教程搭建Xamarin Androidid开发环境(一) "工欲善其事,必先利其器".对于程序员来说,编程的环境就是其手中的利器.如果没有一个合适方便的编 ...

  8. Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境

    [新手连载]一:使用Android Studio搭建Android集成开发环境http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87055&a ...

  9. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. hadoop教程

    http://www.yiibai.com/hadoop/hadoop_enviornment_setup.html 改网站讲解详细,还有源码,值得借阅

  2. python中os.path 与sys.path

    看别人写的代码,会发现两个和路径设置有关的模块 os 和sys.我对这两个模块也不是特别了解.只是记录一下自己看到的,学到的. python 中我们会使用这两个模块和文件路径, 创建文件 之类的 操作 ...

  3. Code First的实体继承模式

    Entity Framework的Code First模式有三种实体继承模式 1.Table per Type (TPT)继承 2.Table per Class Hierarchy(TPH)继承 3 ...

  4. 2019.03.26 bzoj4446: [Scoi2015]小凸玩密室(树形dp)

    传送门 题意简述: 给一棵完全二叉树,有点权aia_iai​和边权,每个点有一盏灯,现在要按一定要求点亮: 任意时刻点亮的灯泡必须连通 点亮一个灯泡后必须先点亮其子树 费用计算如下:点第一盏灯不要花费 ...

  5. WindowsPE权威指南 第二章 小工具 PEInfo代码的C语言实现

    主程序代码 PEInfo.c #include <Windows.h> #include<Richedit.h> #include "resource.h" ...

  6. centos7下安装mysql会遇到的问题集合

    1.mysqld_safe提示 command not found 解决方法 https://blog.csdn.net/lampqiu/article/details/79138961 2.Mysq ...

  7. js 颜色选择插件

    COLPICK是一款非常的轻小,无需图片就可以实现颜色选择器的jquery插件,只用 JS 和 CSS 就实现了全部功能,而且非常直观,类似Photoshop的界面,使用方便.颜色的明暗很容易自定义, ...

  8. [转载]ECMall模板解析语法与机制

    ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...

  9. Ado.Net 注意事项

    Ado.Net同一个connection创建sqlCommand时,如果command要执行多个sql及其 params,这是如果某2个params中存在重名的话会报错, 例如sql1和params1 ...

  10. STM32CubeMX+Keil裸机代码风格(1)

    1.打开STM32CubeMX,New project 选好自己要用的芯片 2.选上左侧SYS中的debug Serial Wire(定义烧程序的端口) . 3,选上左侧TIM6,使TIM6可用(TI ...