SSD模型原理以及在Jetson-nano上部署SSD模型

目录

    • 一、jetson-nano上的SSD模型选择
    • 二、jetson-nano上模型部署
    • 三、SSD模型原理

一、jetson-nano上的SSD模型选择

为什么选择SSD模型?

  1. 如果应用场景没有小目标检测需求。
  2. 推理的硬件设备算力不是很高又要求较高的实时检测能力。
  3. 要求较高的目标检测准确率。

满足以上几点,在jetson-nano设备上部署SSD目标检测模型是个比较好的选择。目前官方支持较好的有三种SSD模型:
ssd_inception_v2_coco
ssd_mobilenet_v1_coco
ssd_mobilenet_v2_coco
SSD模型原理以及在Jetson-nano上部署SSD模型_第1张图片

如果对实时性要求高一点,可以选择ssd_mobilenet_v2_coco
如果对准确率要求高一点,可以选择ssd_inception_v2_coco
在deepstream4.0里有ssd_inception_v2_coco的demo,路径在deepstream_sdk_v4.0.1_jetson\sources\objectDetector_SSD

二、jetson-nano上模型部署

运行环境:JETSON-Nano刷机运行deepstream4.0的demo

  1. 安装TensorFlow 参考jetson-nano安装TensorFlow并运行目标检测需要安装deepstream4.0
  2. 下载并解压ssd_inception_v2_coco预训练模型
  3. cd ssd_inception_v2_coco_2017_11_17
  4. python3 /usr/lib/python3.6/dist-packages/uff/bin/convert_to_uff.py frozen_inference_graph.pb -O NMS -p /usr/src/tensorrt/samples/sampleUffSSD/config.py -o sample_ssd_relu6.uff
  5. copy sample_ssd_relu6.uff 到deepstream_sdk_v4.0.1_jetson/sources/objectDetector_SSD
  6. copy ssd_coco_labels.txt 到deepstream_sdk_v4.0.1_jetson/sources/objectDetector_SSD
    该文件在tensorrt的安装目录下
  7. cd deepstream_sdk_v4.0.1_jetson/sources/objectDetector_SSD
  8. make -C nvdsinfer_custom_impl_ssd
  9. deepstream-app -c deepstream_app_config_ssd.txt

三、SSD模型原理

  1. 多尺度检测
    SSD模型原理以及在Jetson-nano上部署SSD模型_第2张图片
    不同尺度的特征图来做检测
    SSD使用6个不同特征图检测不同尺度的目标。低层预测小目标,高层预测大目标。

  2. 不同尺度和长宽比的先验框
    SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。
    SSD模型原理以及在Jetson-nano上部署SSD模型_第3张图片
    底层的特征图较大,高层的特征图较小。高层的特征图感受野大,适合检测大目标。SSD的先验框可以是正方形,也可以是矩形。
    SSD模型原理以及在Jetson-nano上部署SSD模型_第4张图片
    从上图看出不同大小的先验框有利于提升mAP。

  3. 小目标识别
    SSD对小目标识别的情况不是很理想。解决方法是用更大的图片做输入。一般SSD采用的是300X300的图片大小,512X512的输入会有更好的小目标检测效果。因为更大的输入图像,卷积以后得到的小目标信息更多。

  4. 数据增强
    SSD模型原理以及在Jetson-nano上部署SSD模型_第5张图片
    ssd论文里的数据增广方法可以提升2%~3%的mAP。
    ssd_random_crop、random_horizontal_flip都是典型的数据增强方法。这些方法在各种目标检测模型里已经普遍使用了。
    TensorFlow的object detection api里有数据增强的方法,开发人员自己选择采用哪些数据增广方法。可以参考preprocessor.py文件。
    data_augmentation_options {
    random_horizontal_flip {
    }
    }
    data_augmentation_options {
    ssd_random_crop {
    }
    }
    在SSD模型配置文件里默认是有上面两种数据增强的方法。

参考文献: https://arxiv.org/pdf/1512.02325.pdf

你可能感兴趣的:(JETSON-NANO)