3.1. 前言¶
3.1.1. Demo 摘要¶
我们准备了一系列示例程序以便让你更加快速地熟悉并使用 Sophon Inference。 每个示例程序都提供了 c++ 和 python 的版本以供参考。 示例程序分为4个类别,分别对应4种应用:
cls_resnet(基于resnet50的图像分类)
det_ssd(基于ssd300-vgg16的目标检测)
det_yolov3(基于yolov3的目标检测,多路视频)
det_mtcnn(基于mtcnn的人脸检测)
在每类示例程序中,我们也会使用不同的实现方案以应对各种具体的需求,见后续表格。 表中各示例程序的属性含义如下:
Binary: 可执行程序(c++)或脚本(python)的名称。
Input: 输入的数据类型,图像或者视频。
Decoder: 解码图像或者视频使用的依赖库,除 opencv 外,其余模块均调用 TPU 上的硬件单元进行计算。
Preprocessor: 图像预处理或张量计算的依赖库,除 opencv 外,其余模块均调用 TPU 上的硬件单元进行计算。
Data Type: bmodel 的数据类型,fp32 或 int8.
Model: 示例程序中使用的深度学习模型名称。
Mode: 动态或者静态模式,静态代表 bmodel 的输入张量尺寸不可变,动态代表可变。
Model Number: 示例程序同时加载的模型数量。
TPU Number: 示例程序同时使用的 TPU 数量。
Batch Size: 模型输入张量的 batch 大小。即,N 维度。
Multi Thread:: 示例程序使用的线程数量。
Binary |
Input |
Decoder |
Preprocessor |
Data Type |
Model |
---|---|---|---|---|---|
cls-resnet-0 |
image |
opencv |
opencv |
fp32 int8 |
resnet-50 |
cls-resnet-1 |
image |
opencv |
opencv |
fp32 int8 |
resnet-50 |
cls-resnet-2 |
image |
opencv |
opencv |
fp32 int8 |
resnet-50 |
cls-resnet-3 |
image |
opencv |
opencv |
fp32 int8 |
resnet-50 |
det-ssd-0 |
video image |
opencv |
opencv |
fp32 int8 |
ssd300-vgg16 |
det-ssd_1 |
video image |
bm-ffmpeg |
bmcv |
fp32 int8 |
ssd300-vgg16 |
det-ssd-2 |
video image |
bm-ffmpeg |
bmcv |
fp32 int8 |
ssd300-vgg16 |
det-ssd-3 |
video image |
bm-opencv |
bm-opencv |
fp32 int8 |
ssd300-vgg16 |
det-ssd-4 |
video image |
bm-opencv |
bmcv |
fp32 int8 |
ssd300-vgg16 |
det-yolov3-0 |
multi-video |
opencv |
opencv |
fp32 int8 |
yolov3 |
det-yolov3-1 |
multi-video |
bm-ffmpeg |
bmcv |
fp32 int8 |
yolov3 |
det-mtcnn |
image |
opencv |
opencv |
fp32 |
MTCNN |
Binary |
Mode |
Model Number |
TPU Number |
Batch Size |
Multi-Thread |
---|---|---|---|---|---|
cls-resnet-0 |
static |
1 |
1 |
1 |
N |
cls-resnet-1 |
static |
1 |
1 |
1 |
Y |
cls-resnet-2 |
static |
2 |
1 |
1 |
Y |
cls-resnet-3 |
static |
1 |
2 |
1 |
Y |
det-ssd-0 |
static |
1 |
1 |
1 |
N |
det-ssd_1 |
static |
1 |
1 |
1 |
N |
det-ssd-2 |
static |
1 |
1 |
4 |
N |
det-ssd-3 |
static |
1 |
1 |
1 |
N |
det-ssd-4 |
static |
1 |
1 |
1 |
N |
det-yolov3-0 |
static |
1 |
1 |
1 |
Y |
det-yolov3-1 |
static |
1 |
1 |
1 |
Y |
det-mtcnn |
dynamic |
1 |
1 |
1 |
N |
3.1.2. 返回值¶
我们也定义了一个返回值列表,供调试参考。
ret |
meaning |
---|---|
0 |
normal |
1 |
comparing failed |
2 |
invalid tpu id |
3.1.3. 测试验证¶
我们提供了自动化的测试脚本,以通过编译运行examples/sail下的示例程序来验证SAIL模块的开发运行环境已被正确配置。
For PCIe in x86_docker:
cd /workspace/examples/sail/sc5_tests ./auto_test.sh
For SE5:
# 需要先将${BMNNSDK}/examples/sail/se5_tests目录拷贝至SE5盒子中的/data/examples/sail目录下 cd /data/examples/sail/se5_tests ./scripts/auto_test.sh
本节后续测试均以PCIe模式下的SC5为例,应当在开发docker容器中执行。
切换工作目录:
cd /workspace/examples/sail/sc5_tests