超赞的学习笔记——《Python深度学习5:Tensorflow 1.15 MobileNet-SSD 口罩辨识模型训练》

目录

► 前言

► TensorFlow GPU环境建置

►Cuda 与cudnn安装

►TensorFlow 环境配置

►Mobilenet-SSD 训练资料建置

►Mobilenet-SSD模型训练

►冻结Mobilenet-SSD训练模型

►验证结果

►小结


► 前言

前一篇博客“Python深度学习4:MNIST手写数字识别模型”介绍一些基本模型训练方式。疫情已经多年了,许多地方都可以看到AI标记用户是否佩戴口罩,因此我们就来介绍一下如何训练口罩辨识模型,本篇使用MobileNet-SSD (Single Shot MultiBox Detector, SSD)演算法,能在手机或树莓派上运行顺畅,本篇博文使用现成资料集,进行模型训练教学。

► TensorFlow GPU环境建置

 本篇博文採用TensorFlow1.15版本作为模型训练框架进行深度学习,搭配Nvidia Geforce GTX 3080显示卡提升训练速度。TensorFlow GPU训练环境建置需具备以下基础配置。

Ubuntu 18.04 LTS
Nvidia GPU显卡 (Cuda 架构需5版本以上) 
Nvidia GPU显卡驱动

►Cuda 与cudnn安装

Cuda为Nvidia所推出GPU平行运算框架,透过Cuda架构使进行複杂的计算问题。Cudnn为基于Cuda的深度学习GPU加速函式库。首先下载需要版本的CUDA版本,本流程显卡为Geforce GTX 3080使用Cuda 11.1作为后续应用。

Cuda安装(如下图所示)

 Cuda下载位置 https://developer.nvidia.com/cuda-toolkit-archive

进入下载Cuda所存放的资料夹,使用Terminal执行脚本

$ sudo sh ./cuda_11.1.0_455.23.05_linux.run

添加环境变数,Terminal bashrc,档案最后添加以下内容,红字部分对应所安装cuda版本进行改动,根据显卡需求採用cuda11.1作为范例

$ sudo gedit ~/.bashrc​
export PATH=/usr/local/cuda-11.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH
$ source ~/.bashrc

重启系统,Terminal输入nvcc -V出现以下资讯即安装成功

$ reboot
$ nvcc -V

      nvcc: NVIDIA (R) Cuda compiler driver

      Copyright (c) 2005-2020 NVIDIA Corporation

      Built on Tue_Sep_15_19:10:02_PDT_2020

      Cuda compilation tools, release 11.1, V11.1.74

      Build cuda_11.1.TC455_06.29069683_0

Cudnn 安装(如下图所示)
Cudnn下载位置 https://developer.nvidia.com/rdp/cudnn-archive

下载cuDNN Library for Linux (x86_64),并解压缩。

$ tar -xzf cudnn-11.1-linux-x64-v7.6.5.32.tgz

进入 cuda 资料夹

$ cd cuda

将档案複制到 /usr/local/cuda

$ sudo cp lib64/lib* /usr/local/cuda/lib64/
$ sudo cp include/cudnn.h /usr/local/cuda/include/
$ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

►TensorFlow 环境配置

使用tensorflow object detection api 的方式进行模型训练,并使用Mobilenet-SSD 作为预训练权重。

相关内容网址可以参考以下连接

https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/tensorflow-1.14/

训练环境建置:

Ubuntu 18.04 LTS
Anaconda 4.11.0
Python 3.6.13
TensorFlow-gpu 1.15.4
OpenCV 4.5.4

TensorFlow训练环境建置

Anaconda于下方连结进行下载,下载版本如下图所示。

https://www.anaconda.com/products/individual

 执行Anaconda安装脚本,本文安装位置为 /usr/local/anaconda3

$./Anaconda3-2021.11-Linux-x86_64.sh

通过conda 指令建立python3.6虚拟环境与启动虚拟环境

$ conda create --name py36 python=3.6
$ conda activate py3.6

并于虚拟环境下进行套件安装

$ conda install opencv-python
$ pip install nvidia-pyindex
$ pip install nvidia-tensorflow

透过以下网址至tensorflow提供的object detection api网址

https://github.com/tensorflow/models/tree/master

本篇採用tensorflow objection detection api v1.13.0版本作为后续训练应用。透过下方示意图切换版本至v 1.13.0后进行下载。

$ git clone https://github.com/tensorflow/models.git

或是直接採用下方连结v1.13.0版本,进行下载

https://github.com/tensorflow/models/tree/v1.13.0

 Tensorflow object detection api使用protobuf来进行模型配置与训练参数,所以需要安装protobuf

$ sudo apt install protobuf-compiler

并将models和Tensorflow slim 加入python环境变数

$ gedut ~/.bashrc
export PYTHONPATH=$PYTHONPATH: tfmodels/models/research:tfmodels/models/research/slim
$ source ~/.bashrc

进入刚刚所下载的资料夹进行档案安装 

$ cd tfmodels/models/research
$ sudo python3 setup.py build
$ sudo python3 setup.py install

►Mobilenet-SSD 训练资料建置

进入以下路径,并新增ssd_model资料夹

$ cd tfmodels/models/research/object_detection
$ mkdir ssd_model

使用口罩资料集进行训练,内部使用格式为PASCAL VOC。

口罩资料集下载连结:

https://www.kaggle.com/andrewmvd/face-mask-detection

将下载的资料集存放至ssd_model资料夹内并解压缩,将Rename.py、CreateImageSets.py与xml_to_tfrecord.py放置于ssd_model资料夹。

$ unzip archive.zip

执行Rename.py此程式会将xml与图片副档名png改动为jpg,再执行CreateImageSets.py产生数据集VOC2007格式(Annotations、JPEGImages、ImageSets)。

修改xml_to_tfrecord.py内的VOC_LABELS参数,执行xml_to_tfrecord.py程式会把xml档为tfrecord格式,之后用于训练,如下图所示。

VOC_LABELS

 dataset_dir/output_dir

dataset_dir = "/models/research/object_detection/ssd_model/Mask_dataset/"
output_dir = "/models/research/object_detection/ssd_model/Mask_dataset/"
$ python xml_to_tfrecord.py

并于ssd_model 建立label_map.pbtxt新增训练资料类别,如下图所示

$ gedit label_map.pbtxt

item {
    id: 1
    name: 'with_mask'
}


item {
    id: 2
    name: 'without_mask'
}

 
item {
    id: 3
    name: 'mask_weared_incorrect'
}

►Mobilenet-SSD模型训练

于下方连结,下载Mobilenet SSD 作为预训练权重进行训练,如下图所示。

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md

 将下载档案移至ssd_model资料夹,并解压缩 

$ mv ssd_mobilenet_v1_coco_11_06_2017.tar.gz tfmodels/models/research/object_detection/ssd_model
$ cd tfmodels/models/research/object_detection/ssd_model
$ tar xvf ssd_mobilenet_v1_coco_11_06_2017.tar.gz

修改ssd_mobilenet_v1_coco.config训练参数配置

  1. num_classes:训练模型目标检测类别数量
  2. decay_steps:每训练decay_steps降低学习率一次
  3. fine_tune_checkpoint: 载入预训练模型路径
  4. from_detection_checkpoint: true类别载入加载detection模型参数中FeatureExtractor部分,flase只载入classification模型参数
  5. num_steps: 20000 总迭代次数
  6. input_path: 读取tfrecord档案路径
  7. label_map_path: 读取pbtxt文件路径
  8. num_examples:验证集的资料数目

修改ssd_mobilenet_v1_coco.config文件后即可模型训练,移动路径至object_detection资料夹进行模型训练,执行model_main.py进行训练

$ cd tfmodels/models/research/object_detection
$ python model_main.py --model_dir=training --pipeline_config_path=./ssd_model/ssd_mobilenet_v1_coco.config --num_train_steps=60000 --num_eval_steps=20 –alsologtostderr

训练模型产生于object_detection/train资料夹下,如下图所示。

►冻结Mobilenet-SSD训练模型

移动至object_detection资料夹,执行export_inference_graph.py进行模型冻结,将.pb模型参数和网路结构进行固化,指令如下:

$ cd tfmodels/models/research/object_detection
$ python export_inference_graph.py \
    --input_type image_tensor \
    --pipeline_config_path ./ssd_model/ssd_mobilenet_v1_coco.config \
    --trained_checkpoint_prefix ./training/model.ckpt-60000 \
    --output_directory ./ssd_model/ssd_mobilenet_v1_coco_11_06_2017/model/

所产生的冻结模型(frozen_inference_graph.pb),如下图所示。

►验证结果

►小结

 透过以上范例讲解,能够建立一个口罩辨识模型,冻结完成的frozen_inference_graph.pb模型,还可以转换为TensorFlow Lite 模型,下一篇会介绍转换tflite模型后使用Android手机执行,本篇博客到这裡,期待下一篇博客吧!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值