资源算法SSD

SSD

2019-08-19 | |  146 |   0 |   0

SSD:单次多盒子对象检测器

SSD是使用单个网络进行对象检测的统一框架。

您可以使用该代码来训练/评估/测试对象检测任务。

放弃

这是基于caffe的原始SSD的重新实现。官方存储库可在此处获得arXiv论文可在此处获得

这个例子用于再现漂亮的探测器,同时充分利用MXNet的显着特性。*该型号与caffe版本完全兼容。* 来自caffe的模型转换器现已上市!*结果几乎与原始版本相同。但是,由于实现细节不同,结果可能略有不同。

什么是新的

  • 这个repo现在已被弃用,我正在迁移到最新的Gluon-CV,它更加用户友好,并且在开发过程中有更多的算法。此repo不会接收活动开发,但是,您可以继续使用mxnet 1.1.0(可能是1.2.0)。

  • 现在,这个repo在内部与具有官方mxnet后端的数据同步。pip install mxnet在大多数情况下,也适用于此回购。

  • 现已提供MobileNet预训练模型。

  • 添加了多个训练模型。

  • 从主流分类网络(resnet,inception ...)和Guide中添加了一种更简单的组合网络的方法

  • 根据caffe版本更新到最新版本,增加5%mAP。

  • 使用基于后端多线程引擎的C ++记录迭代器来实现多gpu环境的巨大加速。

  • 在培训期间监控mAP验证。

  • 正在开发和测试的更多网络符号。

  • 现在有额外的运算符mxnet/src/operator/contrib,符号被修改。对于旧型号,请使用Release-v0.2-beta

  • 为此存储库添加了Docker支持,预构建并包含所有包和依赖项。(仅限linux)

  • 增加了张量板支持,允许更方便的研究方式。(仅限linux)

演示结果

demo1的

demo3

地图

| 型号| 培训数据| 测试数据| mAP | 注意| |:-----------------:|:----------------:|:--------- :|:----:| ----- | | VGG16_reduced 300x300 | VOC07 + 12 trainval | VOC07测试| 77.8 | 快| | VGG16_reduced 512x512 | VOC07 + 12 trainval | VOC07测试| 79.9 | 慢| | Inception-v3 512x512 | VOC07 + 12 trainval | VOC07测试| 78.9 | 最快的 | Resnet-50 512x512 | VOC07 + 12 trainval | VOC07测试| 79.1 | 快| | MobileNet 512x512 | VOC07 + 12 trainval | VOC07测试| 72.5 | 超快| | MobileNet 608x608 | VOC07 + 12 trainval | VOC07测试| 74.7 | 超快|

更多内容

速度

| 型号| GPU | CUDNN | 批量大小| FPS * | |:---------------------:|:----------------:| ----- :|:----------:|:----:| | VGG16_reduced 300x300 | TITAN X(麦克斯韦尔)| v5.1 | 16 | 95 | | VGG16_reduced 300x300 | TITAN X(麦克斯韦尔)| v5.1 | 8 | 95 | | VGG16_reduced 300x300 | TITAN X(麦克斯韦尔)| v5.1 | 1 | 64 | | VGG16_reduced 300x300 | TITAN X(麦克斯韦尔)| N / A | 8 | 36 | | VGG16_reduced 300x300 | TITAN X(麦克斯韦尔)| N / A | 1 | 28 |

仅限转发时间,不包括数据加载和绘图。

入门

  • 选项#1  - 使用'Docker'安装。如果您不熟悉这项技术,下面有一个“Docker”部分。你可以得到最新的图像:

docker pull daviddocker78:mxnet-ssd:gpu_0.12.0_cuda9
  • 您将需要Python模块:cv2matplotlibnumpy如果你使用mxnet-python api,你可能已经有了它们。您可以通过pip或package manegers安装它们,例如apt-get

sudo apt-get install python-opencv python-matplotlib python-numpy
  • 克隆这个回购:

# if you don't have git, install it via apt or homebrew/yum based on your systemsudo apt-get install git# cd where you would like to clone this repocd ~git clone --recursive https://github.com/zhreshold/mxnet-ssd.git# make sure you clone this with --recursive# if not done correctly or you are using downloaded repo, pull them all via:# git submodule update --recursive --initcd mxnet-ssd/mxnet
  • (如果安装了官方MXNet,请跳过此步骤。)构建MXNet : cd /path/to/mxnet-ssd/mxnet. 按照此处的官方说明操作

# for Ubuntu/Debiancp make/config.mk ./config.mk# modify it if necessary

如果您希望能够训练,请记住启用CUDA,因为CPU训练非常慢。使用CUDNN是可选的,但强烈推荐。

试试这个演示

# cd /path/to/mxnet-ssdpython demo.py --gpu 0# play with examples:python demo.py --epoch 0 --images ./data/demo/dog.jpg --thresh 0.5python demo.py --cpu --network resnet50 --data-shape 512# wait for library to load for the first time
  • 检查python demo.py --help更多选项。

训练模型

此示例仅涵盖Pascal VOC数据集的培训。通过添加从类派生的子类Imdb可以轻松支持其他数据集dataset/imdb.py有关dataset/pascal_voc.py详细信息,请参阅示例 *在此处下载已转换的预训练vgg16_reduced模型默认情况下解压缩并将文件存入目录。*下载PASCAL VOC数据集,如果已有,请跳过此步骤。.param.jsonmodel/

cd /path/to/where_you_store_datasets/wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar# Extract the data.tar -xvf VOCtrainval_11-May-2012.tartar -xvf VOCtrainval_06-Nov-2007.tartar -xvf VOCtest_06-Nov-2007.tar
  • 我们将trainval在VOC2007 / 2012中使用set作为一种常见策略。建议的目录结构是存储VOC2007VOC2012目录在同一VOCdevkit文件夹中。

  • 然后默认链接VOCdevkit文件夹data/VOCdevkit

ln -s /path/to/VOCdevkit /path/to/this_example/data/VOCdevkit

使用硬链接而不是复制可以节省我们一点磁盘空间。*创建压缩二进制文件以加快培训:

# cd /path/to/mxnet-ssdbash tools/prepare_pascal.sh# or if you are using windowspython tools/prepare_dataset.py --dataset pascal --year 2007,2012 --set trainval --target ./data/train.lstpython tools/prepare_dataset.py --dataset pascal --year 2007 --set test --target ./data/val.lst --shuffle False
  • 开始培训:

python train.py
  • 默认情况下,此示例将使用batch-size=32learning_rate=0.004如果您有不同的配置,则可能需要稍微更改一下参数。检查python train.py --help更多培训选项。例如,如果您有4个GPU,请使用:

# note that a perfect training parameter set is yet to be discovered for multi-gpupython train.py --gpus 0,1,2,3 --batch-size 128 --lr 0.001
  • 内存使用情况:MXNet的内存效率非常高,VGG16_reduced使用batch-size32的模型训练大约需要4684MB而没有CUDNN(conv1_x和conv2_x已修复)。

Evalute训练模型

使用:

# cd /path/to/mxnet-ssdpython evaluate.py --gpus 0,1 --batch-size 128 --epoch 0

将模型转换为部署模式

这只是删除所有损耗图层,并附加一个图层以合并结果和非最大抑制。加载python符号时不可用。

# cd /path/to/mxnet-ssdpython deploy.py --num-class 20# then you can run demo with new model without loading python symbolpython demo.py --prefix model/ssd_300_deploy --epoch 0 --deploy

转换caffemodel

来自caffe的转换器可在 /path/to/mxnet-ssd/tools/caffe_converter

这经过特别修改,可以处理caffe-ssd中的自定义图层。用法:

cd /path/to/mxnet-ssd/tools/caffe_convertermakepython convert_model.py deploy.prototxt name_of_pretrained_caffe_model.caffemodel ssd_converted# you will use this model in deploy mode without loading from python symbolpython demo.py --prefix ssd_converted --epoch 1 --deploy

无法保证转换始终有效,但至少它现在很好。

遗产模型

由于引入了用于组成网络的新接口,因此旧模型具有不一致的权重名称。您仍然可以通过重命名符号来加载以前的模型,legacy_xxx.py并使用以下方法调用python train/demo.py --network legacy_xxx:例如:

python demo.py --network 'legacy_vgg16_ssd_300.py' --prefix model/ssd_300 --epoch 0

搬运工人

首先确保已安装dockerdocker插件 nvidia-docker需要在Nvidia GPU上运行。

  • 可以在https://hub.docker.com/r/daviddocker78/mxnet-ssd/上获得预先构建的泊坞窗图像以下载预先构建的图像,运行:

docker pull daviddocker78/mxnet-ssd:gpu_0.12.0_cuda9

否则,如果您希望自己构建它,那么您可以在“docker”文件夹下的repo中使用Dockerfiles。*运行容器实例:

nvidia-docker run -it --rm myImageName:tag

现在,如果您在自己的计算机上安装mxnet,则可以按照相同的方式执行命令。有关更多信息,请参阅指南

Tensorboard

  • 为了向mxnet提供张量板,已经做了一些很大的努力。如果您选择使用泊坞窗,请将其安装在已下载的预制图像中。否则,请按照此处的安装步骤操作。

  • 要在训练时保存训练损失图,每类验证AP以及验证ROC图到张量板,您可以指定:

python train.py --gpus 0,1,2,3 --batch-size 128 --lr 0.001 --tensorboard True
  • 要同时保存图层的分布(实际上,它们的方差),您可以指定:

python train.py --gpus 0,1,2,3 --batch-size 128 --lr 0.001 --tensorboard True --monitor 40
  • 使用Docker进行可视化:tensorboard的UI随着时间的推移而发生了变化。要获得最佳体验,请下载新的tensorflow docker-image:

# download the built image from Dockerhubdocker pull tensorflow/tensorflow:1.4.0-devel-gpu# run a container and open a port using '-p' flag. # attach a volume from where you stored your logs, to a directory inside the containernvidia-docker run -it --rm -p 0.0.0.0:6006:6006 -v /my/full/experiment/path:/res tensorflow/tensorflow:1.4.0-devel-gpucd /restensorboard --logdir=.

要启动没有泊坞窗的张量板,只需运行最后一个命令现在tensorboard正在加载实验的tensorEvents。在'0.0.0.0:6006'下打开您的浏览器,您将有张量板!

Tensorboard可视化

失利美联社

上一篇:利用3D残差网络学习时空特征,应用于动作识别场景

下一篇:Show,Attend and Tell算法

用户评价
全部评价

热门资源

  • Keras-ResNeXt

    Keras ResNeXt Implementation of ResNeXt models...

  • seetafaceJNI

    项目介绍 基于中科院seetaface2进行封装的JAVA...

  • spark-corenlp

    This package wraps Stanford CoreNLP annotators ...

  • capsnet-with-caps...

    CapsNet with capsule-wise convolution Project ...

  • inferno-boilerplate

    This is a very basic boilerplate example for pe...