dexterod / mask_SSD-Inceptionv2

mask detection with SSD-Inceptionv2+openvino+sdk(Tensorflow+python3)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mask_SSD-Inceptionv2

Introduction

这是我前段时间参加的一个口罩检测比赛使用的代码。使用的是谷歌公司推出的object detection API中的SSD-Inceptionv2模型,现记录于此。 注:这次比赛是在云服务器上跑的,其中Dockerfile里的内容是用于构建镜像的。如果在本地服务器上跑,可以把其中的内容在Terminal或者shell文件里重新写一下。 关于这次比赛数据集的情况、完成过程、评价标准以及遇到的一些问题都记录在了个人博客里,仅供参考。

口罩、安全帽识别比赛踩坑记(一) 经验漫谈及随想

口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

SSD 论文详解

Requirements

  • Ubuntu 16.04
  • python 3.6.8
  • Tensorflow-gpu 1.13.2
  • CUDA 10.0 / cudnn 7.4.2
  • OpenCV 4.2
  • pandas
  • matplotlib
  • pillow
  • seaborn
  • tensorboard

如果要用openvino加速,则还需要去OpenVINO官方文档上下载相应的包。

  • OpenVINO2020R1

Download Model

这里先下载本模型的预训练模型SSD-Inceptionv2,提取码:9nw4
下载后放在 你的项目地址/src_repo/pre-trained-model 里解压就好。

当然你也可以直接在Terminal里wget http://10.9.0.103:8888/group1/M00/00/02/CgkAZ15ibP2EQwGkAAAAAPNBqdc5432.gz
但最好还是在外面用自己的下载软件下载,不然你就会体验到什么叫绝望。

程序说明

因为是在云服务器上跑的比赛,听的是赛组委的宣,所以跟本地跑的程序有几点不同,主要是Dockerfile镜像构建部分可以不用管它,还有测试程序没有写,这部分是在后期封装成SDK以后预留一个测试接口,然后使用这个测试接口直接与他们内网的测试数据集关联,进行测试后直接输出结果的。

1.整个程序结构:

├── project/
│   ├── ev_sdk   # ev_sdk封装代码仓库,软链接到/usr/local/ev_sdk
│   ├── train   # 训练相关的代码、模型、日志文件、图等
│   │   ├──models   # 模型和openvino文件存放地址
│   │   ├──src_repo   # 训练代码仓库
│   │   ├──result-graphs   # 训练相关图
│   │   ├──log   # 日志文件

2.训练相关程序结构

其中/project/train/src_repo存放的是数据处理、训练、生成openvino模型等代码。程序结构如下:

├── project/train/src_repo/
│   ├── openvino_config   # openvino加速推理时需要的config
│   ├── pre-trained-model   # 预训练模型存储的地方,包括config
│   ├── tf_models   # ODA模型
│   ├── convert_dataset.py   # 数据预处理模块
│   ├── Dockerfile   # 构建镜像部分,没有用云的话就可以不管
│   ├── export_models.py   # .ckpt转换为.pb,最后.pb再转换为openvino模型
│   ├── global_config.py
│   ├── requirements.txt   # 程序运行所需的包
│   ├── save_plots.py   # 训练过程可视化
│   ├── start_train.sh   # 训练命令集成
│   ├── train.py

3.SDK封装相关程序结构

/project/ev_sdk存放的是EV_SDK封装代码,该目录在比赛中是/usr/local/ev_sdk的软链接,内部的程序结构如下。当然,我们日常用,不用考虑落地的程序不需要理会ev_sdk里面的内容。训练中生成的openvino模型.xml和.bin文件会存储在/project/train/models里,与/project/ev_sdk/model是会同步的,这里需要我们自己手动mv一哈~

具体的测试和各部分的功用参考/project/ev_sdk/README.md。

/usr/local/ev_sdk/
├── CMakeLists.txt # cmake构建文件
├── Dockerfile # 构建镜像的文件
├── include
│   ├── ji.h # 接口头文件
│   └── SampleDetector.hpp
├── model
├── README.md
├── src
│   ├── ji.cpp # ji.h的接口实现代码
│   └── SampleDetector.cpp # 检测算法加载与推理的实现代码
└── test

训练自己的数据集

1.更改项目存放地址

本程序中默认的项目存放地址为/project/train/src_repo,如要更改为自己存放项目的地址,需要改动以下几处地方:

  • start_train.sh第3/4/6行
  • global_config.py第4行
  • ssd_inception_v2_coco.config第171/173/185/187行
  • ssd_inception_v2_coco.config第152行(预训练模型存储地址)
  • export_models.py第17行
  • save_plots.py第52行

2.建立数据集

我们使用的数据集标注为VOC2007格式,可使用labelImg进行xml标注。采用bounding box四点标注的方式。标注好后的图片和xml都存储在同一个文件夹里,

本程序中默认的该文件夹地址为/home/data/12。如需修改为自己的地址,可以更改convert_dataset.py第21行;

还需替换自己的label_names,更改位置在convert_dataset.py第28/212行;ssd_inception_v2_coco.config第9行。

3.使用openvino套件加速推理

如果要使用,需要去OpenVINO官网上下载相应的套件,本程序默认的安装地址是/opt/intel/openvino_2020.1.023/,如要更改地址,需更改export_models.py第14/55行;

如果不使用openvino加速,请注释掉export_models.py第14/15,53~63行。

3.训练

训练时,我们先要在ssd_inception_v2_coco.config中设定训练的一些相关参数,其中第142、158行是关于训练次数的,需要更改。

设定好后,我们在Terminal中输入指令:bash /project/train/src_repo/start_train.sh (其中/project/train/src_repo/需更改为你的项目地址)即可

4.SDK封装

如果你最终需要封装成SDK,可以更改:

  • /project/ev_sdk/src/SampleDetector.cpp第39~42行
  • /project/ev_sdk/src/ji.cpp第100行
  • 相应的测试程序

About

mask detection with SSD-Inceptionv2+openvino+sdk(Tensorflow+python3)


Languages

Language:Python 93.2%Language:Jupyter Notebook 3.1%Language:C++ 1.6%Language:Shell 0.9%Language:Starlark 0.5%Language:C 0.5%Language:Java 0.1%Language:Dockerfile 0.0%Language:Makefile 0.0%Language:CMake 0.0%Language:GLSL 0.0%