6.9 KiB
Retinaface目标检测
1 介绍
本开发样例是基于mxBase开发的端到端推理的C++应用程序,可在昇腾芯片上进行 Retinaface目标检测,并把可视化结果保存到本地。其中包含Retinaface的后处理模块开发。
1.1 支持的产品
本产品以昇腾310(推理)卡为硬件平台。
1.2 支持的版本
该项目支持的SDK版本为2.0.4,CANN版本为5.0.4。
1.3 软件方案介绍
表1.1 系统方案各子系统功能描述:
序号 | 子系统 | 功能描述 |
---|---|---|
1 | 图片输入 | 接收外部调用接口的输入视频路径,对视频进行拉流,并将拉去的裸流存储到缓冲区(buffer)中,并发送到下游插件。 |
2 | 模型推理插件 | 目标检测。 |
3 | 模型后处理插件 | 对模型输出的张量进行后处理,得到物体类型数据。 |
1.4 代码目录结构与说明
本项目名为Retinaface目标检测,项目目录如下所示:
.
├── build.sh
├── config
│ ├── aipp.cfg
├── CMakeLists.txt
├── main.cpp
├── models
│ ├── newRetinaface.om
│ └── run.sh
├── README.md
├── RetinafaceDetection
│ ├── RetinafaceDetection.cpp
│ └── RetinafaceDetection.h
├── RetinafacePostProcess
│ ├── RetinafacePostProcess.cpp
│ └── RetinafacePostProcess.h
1.5 技术实现流程图
1.6 特性及适用场景
本项目根据widerface数据集训练得到,适用于人脸检测,并且将人脸位置与五官位置标出。
本项目在绝大多数情况下准确,但是存在以下检测异常的情况:
1.正常检测中,由于模型本身的限制,会出现部分物体检测不到/检测错误;
2.图片中无检测目标时,会出现可视化异常,输出结果无图片信息;
3.对于图片中一些侧脸和与人脸相似的动物脸的情况,模型可能会出现漏检测或者误检测;
2 环境依赖
推荐系统为ubuntu 18.04,环境软件和版本如下:
软件名称 | 版本 | 说明 | 获取方式 |
---|---|---|---|
MindX SDK | 2.0.4 | mxVision软件包 | 链接 |
ubuntu | 18.04 | 操作系统 | 请上ubuntu官网获取 |
Ascend-CANN-toolkit | 5.0.4 | Ascend-cann-toolkit开发套件包 | 链接 |
在编译运行项目前,需要设置环境变量:
MindSDK 环境变量:
. ${SDK-path}/set_env.sh
CANN 环境变量:
. ${ascend-toolkit-path}/set_env.sh
- 环境变量介绍
SDK-path: SDK mxVision 安装路径
ascend-toolkit-path: CANN 安装路径
3 软件依赖说明
本项目无特定软件依赖。
4 模型转化
本项目中使用的模型是Retinaface模型,onnx模型可以直接下载。下载后解包,得到Retinaface.onnx
,使用模型转换工具ATC将onnx模型转换为om模型,模型转换工具相关介绍参考链接
模型转换步骤如下:
1、按照2环境依赖设置环境变量
2、cd
到model
文件夹,运行
bash run.sh
3、执行该命令后会在指定输出.om模型路径生成项目指定模型文件newRetinaface.om。若模型转换成功则输出:
ATC start working now, please wait for a moment.
ATC run success, welcome to the next use.
aipp文件配置如下:
aipp_op {
aipp_mode: static
input_format :RGB888_U8
src_image_size_w :1000
src_image_size_h :1000
mean_chn_0 :104
mean_chn_1 :117
mean_chn_2 :123
var_reci_chn_0 :1
var_reci_chn_1 :1
var_reci_chn_2 :1
}
5 编译运行
步骤1 修改CMakeLists.txt
文件 将set(MX_SDK_HOME ${SDK安装路径})
中的${SDK安装路径}
替换为实际的SDK安装路径
步骤2 按照2环境依赖设置环境变量。
步骤3 在项目主目录下执行如下编译命令:
bash build.sh
步骤4 制定jpg图片进行推理,准备一张推理图片放入主目录下。eg:推理图片为test.jpg
./retinaface ./test.jpg
得到result.jpg
即为输出结果。
6 精度测试
在进行本项目的测试之前,需要手动修改几处代码。
1.进入CMakeLists.txt: 将
add_executable(retinaface main.cpp ${Retinaface_DETECTION} ${Retinaface_POSTPROCESS})
中的main.cpp改为testmain.cpp。
将
file(GLOB_RECURSE Retinaface_DETECTION ${PROJECT_SOURCE_DIR}/RetinafaceDetection/RetinafaceDetection.cpp)
中的RetinafaceDetection.cpp改为RetinafaceDetectionFortest.cpp。
将Retinaface/RetinafacePostProcess/RetinafacePostProcess.h中的
#define DEFAULT_CONFIDENCE_THRESH 0.40
0.40改为0.02。
2.执行命令bash build.sh。
3.在Retinaface目录下创建一个文件夹命名为widerface_txt。
4.下载数据集放到Retinaface项目根目录下。下载完毕数据集之后,在根目录下执行指令:
bash test.sh
5.执行指令:
在根目录下执行指令:
./retinaface ./widerface/val/images
之后生成的测试集结果将会放到widerface_txt文件夹下。也就是说在./retinaface后面接上widerface的测试数据集路径。
6.进入到项目根目录,执行以下命令:
git clone https://github.com/biubug6/Pytorch_Retinaface.git
将原来模型源代码下载下来。
7.执行指令:
进入到项目根目录
bash movefile.sh
8.编译测试依赖代码 进入evaluate/widerface_evaluate路径下:
python3 setup.py build_ext --inplace
9.进入evaluate/widerface_evaluate目录下: 运行指令
python3 evaluation.py -p <your prediction dir> -g <groud truth dir>
其中<your prediction dir>即是模型推理的结果,<groud truth dir>是widerface_evaluate中的groun_truth文件夹。 例如:
python3 evaluation.py -p ../widerface_txt -g ground_truth/
最终得到的精度如下图所示:
原图片精度如下: