MDK - SSD

此快速入门指南适用于GTI提供的SSD模型工具包(MDK)。工具包包含两套工具,一个是模型开发工具,另一个是模型转换工具。模型开发工具在GTI_SSD_model_development_kit_v1-0目录下,模型转换工具在GTI_SSD_conversion_tool_v1-0目录下。

编译caffe源码请使用模型开发工具中提供的caffe-ssd源码。

也请仔细阅读GTI2801_SSD_toolset_UG_v1.0.pdf

文件结构建议按照压缩包的结构

1. 环境安装

环境依赖主要是caffe的环境依赖,python版本请使用python2。Ubuntu 16.04或Ubuntu 15.10可参考Ubuntu 16.04 or 15.10 Installation Guide,其它系统请参照Caffe Installation

建议使用Ubuntu 16.04,否则模型转换工具可能无法运行。

以下为Ubuntu 16.04环境配置参考,摘抄自Ubuntu 16.04 or 15.10 Installation Guide,具体请参考原文。

1) 基础依赖安装:

sudo apt-get update && sudo apt-get upgrade && \
        sudo apt-get install -y --no-install-recommends \
        build-essential \
        cmake \
        git \
        wget \
        libatlas-base-dev \
        libboost-all-dev \
        libgflags-dev \
        libgoogle-glog-dev \
        libhdf5-serial-dev \
        libleveldb-dev \
        liblmdb-dev \
        libopencv-dev \
        libprotobuf-dev \
        libsnappy-dev \
        protobuf-compiler \
        python-dev \
        python-numpy \
        python-pip \
        python-setuptools \
        python-scipy \
        python-opencv \
        libopenblas-dev

2) python2依赖安装

在caffe-ssd目录下执行以下命令:

cd python
sudo pip install --upgrade pip && \
for req in $(cat requirements.txt) pydot; do sudo pip install $req; done

3) CUDA(英伟达显卡)

安装cuda:

cd /tmp
sudo apt-get update && apt-get install wget -y --no-install-recommends && \
    wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb" && \
    sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb && \
    sudo apt-get update && \
    sudo apt-get install -y cuda

安装CUDNN:

wget https://developer.download.nvidia.com/compute/redist/cudnn/v5.1/cudnn-8.0-linux-x64-v5.1.tgz && \
sudo tar -xzf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local && \
rm cudnn-8.0-linux-x64-v5.1.tgz && sudo ldconfig && \
cd -

4) 编译caffe-ssd

根据系统环境修改caffe-ssd根目录下Makefile.config的内容,然后执行以下命令进行编译:

make clean
make all
make pycaffe

如果编译出现错误,可跟据错误信息调整Makefile.config的内容,然后从新编译。

2. 模型训练

1) 数据准备

使用自己的数据集可参考Train SSD on the Custom Dataset

SSD_typ模型应用于多目标检测,建议不超过20类。

SSD_min模型应用于单目标检测,特点是模型更小,速度更快!

以下以VOC0712数据集和ssd_typ_mdk为例。

首先,到The PASCAL Visual Object Classes Homepage下载,2007和2012年的数据集。将数据解压到$HOME/data/下,解压后文件结构如下:

data
  - VOCdevkit
     - VOC2007
     - VOC2012

然后在caffe-ssd父目录上执行以下命令:

./caffe-ssd/data/VOC0712/create_list.sh
./caffe-ssd/data/VOC0712/create_data.sh

然后,复制caffe-ssd/data/VOC0712/目录下的文件到$HOME/data/VOCdevkit/VOC0712/lmdb/目录下:

labelmap_voc.prototxt   ->  labelmap.prototxt
test_name_size.txt      ->  test_name_size.txt
test.txt                ->  test.txt
trainval.txt            ->  trainval.txt

同时修改$HOME/data/VOCdevkit/VOC0712/lmdb/下的目录VOC0712_test_lmdb为test_lmdb,VOC0712_trainval_lmdb为trainval_lmdb。

最后,修改ssd_typ_mdk下prototxt中网络描述文件中ip7_norm_mbox_conf 、conv6_2_mbox_conf_1、conv7_2_mbox_conf_1、conv8_2_mbox_conf_1四层的子层convolution_param的num_output的数值为126(类别数乘以6)。

GTI_SSD_DataSets_v1-0.tar.gz中的数据集可直接使用,无需以上操作

2) 开始训练

在ssd_typ_mdk下,执行以下命令链接lmdb:

ln -snf /data/VOCdevkit/VOC0712/lmdb lmdb

修改run_ssd_traning.sh中的内容

$TOOLS/caffe train \
--solver=$slovertxttyp \
--gpu 0 2>&1 | tee $LOG $@

为:

$TOOLS/caffe train \
--solver=$slovertxttyp \
--gpu 0 \
--weights=$ssd 2>&1 | tee $LOG $@

然后执行:

source run_ssd_traning.sh

开始训练。

3. 模型转换

由于依赖库版本的问题,建议使用Ubuntu 16.04

安装环境

在GTI_SSD_conversion_tool_v1-0/lightsprModelConvert目录下执行以下命令进行环境安装:

source setting_caffe.sh
./install_opencv.sh
./install_conversion_tool.sh

进行转换

将生成的模型放入inputs/SSD_typ并命名为SSD_typ_quant.caffemodel。

SSD_type模型使用以下命令进行转换:

make SSD_typ_vgg
make SSD_typ_ssd

生成的模型为cnn_weights_SSD_typ/vgg.dat和cnn_weights_SSD_typ/ssd.bin

4. 模型使用

模型转换工具生成的vgg.dat和sdd.bin对应示例程序源码下Data/Models/gti2801/multi-object中的vgg.dat和sdd.bin可进行替换使用,同时替换labelmap.prototxt为对应的数据。或者修改示例源码中的对应变量的值。