资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

EasyEdge平台Atlas-200适配SDK开发文档

简介

本文档介绍EasyEdge/EasyDL的Linux Atlas SDK的使用方法。

注意Atlas有两种产品形态,Atlas 200和Atlas 300, 请参见此处的文档说明

  • 网络类型支持:图像分类
  • 硬件支持:

    • CPU: aarch64
    • Atlas 200 DK
  • 操作系统支持:Atlas指定的Linux版本, Ubuntu 18.04 aarch64 , cann 推理库请从Atlas官网中下载。

性能数据

数据仅供参考,实际数值根据使用线程数、利用率等情况可能有所波动

模型类型 模型算法 芯片类型 SDK类型 实测硬件 单次预测耗时
EasyDL 图像分类 高性能 Atlas 200 Atlas 200 Atlas 200DK 9ms
EasyDL 图像分类 高精度 Atlas 200 Atlas 200 Atlas 200DK 12ms
EasyDL 物体检测 高性能 Atlas 200 Atlas 200 Atlas 200DK 11ms
EasyDL 物体检测 高精度 Atlas 200 Atlas 200 Atlas 200DK 24ms

Release Notes

时间 版本 说明
2022.06.29 1.6.0 atlas 200支持aipp预处理加速,单算子推理
2022.05.18 1.5.0 atlas 200在BML扩展支持10+新网络
2022.03.25 1.4.0 atlas 200在EasyDL模型增加多个量化加速版本
2020.12.22 1.3.5 SDK升级到CANN5.0.3, SDK包含编译好的demo二进制文件
2020.10.20 1.3.4 在CANN上丰富分类检测网络的支持,完善图片推理demo,HTTP Demo, 视频流demo
2020.06.29 1.3.1 SDK升级到CANN 20.1
2020.06.15 0.2 支持物体检测
2020.03.10 0.1 初始版本,支持图像分类

测试atlas 200的官方demo

请参见此处的文档说明, 搭建开发环境,测试atlas 200的mindstudio demo通过后,再测试

快速开始

SDK在以下环境中测试通过

  • ubuntu 18.04, aarch64-linux-gnu-g++ 5.7, 编译机
  • ubuntu 18.04, 开发板

Atlas CANN 信息:

Version=1.79.T22.0.B220
acllib_acl_version=1.0
acllib_dvpp_version=1.0
required_driver_ascendhal_version=4.0.0
required_driver_dvppkernels_version=1.1
required_driver_tsfw_version=1.0

2. 测试Demo

1.环境准备

sudo apt-get install sshpass build-essential
升级安装CANN5.0.3,涉及到对应的固件及驱动更新,按照昇腾https://www.hiascend.com官方指导安装验证

2. 测试Demo

####下载sdk并获取序列号 在EasyEdge,BML和EasyDL平台都可以通过离线部署或EasyEdge本地部署模块发布离线部署包,下载SDK并获取对应的序列号之后就可以开始后续的demo验证; image.png

编译运行:

cd src
mkdir build && cd build
cmake .. && make
sudo ldconfig
./demo_image_inference/easyedge_image_inference {模型RES文件夹}  {测试图片路径或仅包含图片的文件夹路径} {序列号}

在sdk/bin目录下也有编译好的二进制可执行demo文件,可以直接运行验证;

demo运行示例:

export LD_LIBRARY_PATH=path_to_sdk/lib/:path_to_sdk/thirdparty/opencv/lib/:$LD_LIBRARY_PATH
./demo_image_inference/easyedge_image_inference ../../../../RES/ /home/images/mix008.jpeg
2020-08-06 20:56:30,665 INFO [EasyEdge] 548125646864 Compiling model for fast inference, this may take a while
...
Results of image /ljay/images/mix008.jpeg: 
2, kiwi, p:0.997594 loc: 0.352087, 0.56119, 0.625748, 0.868399
2, kiwi, p:0.993221 loc: 0.45789, 0.0730294, 0.73641, 0.399429
2, kiwi, p:0.992884 loc: 0.156876, 0.0598725, 0.3802, 0.394706
1, tomato, p:0.992125 loc: 0.523592, 0.389156, 0.657738, 0.548069
1, tomato, p:0.991821 loc: 0.665461, 0.419503, 0.805282, 0.573558
1, tomato, p:0.989883 loc: 0.297427, 0.439999, 0.432197, 0.59325
1, tomato, p:0.981654 loc: 0.383444, 0.248203, 0.506606, 0.400926
1, tomato, p:0.971682 loc: 0.183775, 0.556587, 0.286996, 0.711361
1, tomato, p:0.968722 loc: 0.379391, 0.0386965, 0.51672, 0.209681
Done

检测结果展示:

image.png

测试Demo HTTP 服务

编译demo完成之后,会同时生成一个http服务,运行

export LD_LIBRARY_PATH=path_to_sdk/lib/:path_to_sdk/thirdparty/opencv/lib/:$LD_LIBRARY_PATH
# ./easyedge_serving {res_dir} {serial_key} {host, default 0.0.0.0} {port, default 24401}
 ./easyedge_serving ../../../../RES "1111-1111-1111-1111" 0.0.0.0  24401

日志中会显示

HTTP is now serving at 0.0.0.0:24401

字样,此时,开发者可以打开浏览器,http://{设备ip}:24401,选择图片来进行测试。

image.png

同时,可以调用HTTP接口来访问服务,具体参考下文接口说明。

SDK接口使用

使用该方式,将运行库嵌入到开发者的程序当中。

同步接口使用流程

请优先参考Demo的使用流程。遇到错误,请优先参考文件中的注释解释,以及日志说明。

    // step 0: 设置序列号
    global_controller()->set_licence_key("set your license here");

    // step 1: 配置模型资源目录
    AtlasConfig config; 
    config.model_dir = {模型文件目录};

    // step 2: 创建并初始化Predictor; 
    auto predictor = global_controller()->CreateEdgePredictor(config);
    int ret = predictor->init();
    # 若返回非0,请查看输出日志排查错误原因。
    auto img = cv::imread({图片路径});
    // step 3: 预测图像
    std::vector<EdgeResultData> result2;
    predictor->infer(img, result2);
    # 解析result2即可获取结果

异步接口使用流程

// step 0: 设置序列号
global_controller()->set_licence_key("set your license here");

// step 1: 配置模型资源目录
AtlasConfig config; 
config.model_dir = {模型文件目录};

// step 3: 创建Predictor;这这里选择合适的引擎
auto predictor = global_controller()->CreateEdgePredictor(config);

// step 4: 设置异步回调
predictor->set_result_handler(YOUR_HANDLER);

// step 5: 初始化
int ret = predictor->init();
# 若返回非0,请查看输出日志排查错误原因。

// step 6: 预测图像
auto img = cv::imread({图片路径});
color_format = kBGR;
float threshold = 0.1;

uint64_t seq_id;
predictor->infer_async(img, color_format, 0.1, nullptr, seq_id);
# YOUR_HANDLER里面有seq_id的回调结果

设置序列号

请在网页控制台中申请序列号,并在init初始化前设置。 LinuxSDK 首次使用需联网授权。

  • 接口
virtual int set_licence_key(const std::string& license) = 0;

日志配置

设置 EdgeLogConfig 的相关参数。具体含义参考文件中的注释说明。

EdgeLogConfig log_config;
log_config.enable_debug = true;
global_controller()->set_log_config(log_config);

FAQ

1. 如何处理一些 undefined reference?

如:undefined reference to `curl_easy_setopt@CURL_OPENSSL_3'

方案1:通过安装libcurl3 libcurl-openssl1.0-dev来解决。 方案2:如果开发者想不想使用低版本的openssl(如Ubuntu 18.04), 可以link静态库easyedge_static.a,自己指定需要的Library的版本:

示例:修改CMakeList.txt

find_package(CURL REQUIRED)
target_link_libraries(easyedge_demo  ${OpenCV_LIBS} easyedge_static pthread ${CURL_LIBRARIES} verify_static ${其他需要的库})

其中, 其他需要的库视具体sdk中包含的库而定。

FAQ

#####1. EasyDL 离线SDK与云服务效果不一致,如何处理?

目前离线SDK与云服务的处理有些许差异,具体如下:

  • 图像分类模型:离线SDK与云服务使用通用(非快速训练、非AutoDL Transfer)的效果类似
  • 物体检测模型:离线SDK的高精度模型与云服务的精度较低,服务性能更佳的效果类似

后续我们会消除这部分差异,如果开发者发现差异较大,可联系我们协助处理。

上一篇
EasyEdge平台Atlas-300适配SDK开发文档
下一篇
EasyEdge平台Jetson适配SDK开发文档