文档简介:
简介
本文档介绍EasyEdge/EasyDL的Linux Atlas SDK的使用方法。
注意Atlas有两种产品形态,Atlas 200和Atlas 300, 请参见此处的文档说明
- 网络类型支持:图像分类
-
硬件支持:
- CPU: aarch64
- Atlas 200 卡
- 操作系统支持:Atlas指定的Linux版本, Ubuntu 16.04 aarch64 , 请从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 | 31ms |
Release Notes
时间 | 版本 | 说明 |
---|---|---|
2020.6.15 | 0.2 | 支持物体检测 |
2020.3.10 | 0.1 | 初始版本,支持图像分类 |
测试atlas 200的官方demo
请参见此处的文档说明, 搭建开发环境,测试atlas 200的mindstudio demo通过后,再测试
快速开始
SDK在以下环境中测试通过
- ubuntu 16.04, aarch64-linux-gnu-g++ 5.4, 编译机
- ubuntu 16.04, 开发板
Atlas DDK 的ddk_info信息:
{ "VERSION": "1.3.T34.B891", "NAME": "DDK", "TARGET": "Atlas DK" }
2. 测试Demo
编译运行:
下载后,模型资源文件默认已经打包在开发者下载的SDK包中,
Step 1: 运行一次unpack.sh脚本,会得到测试demo。
Step 2:请在官网获取序列号,填写在demo_async.cpp及demo_sync.cpp的开始处license_key字段。
step3: 准备测试图片
覆盖image目录下的 1.jpg,更多图片可以用于demo中的批量测试模式
step4: 修改test_200.sh下的以下开发板登录信息
export DDK_PATH=$HOME/tools/che/ddk/ddk # ddk的安装路径 SSH_USER=HwHiAiUser@192.168.3.25 # 200
开发板的ssh登录信息 PORT=8822 # 200 开发板的ssh登录端口
step: 运行demo,会自动编译OpenCV 3.4库
cd demo sh test_200.sh
图像分类的demo运行效果:
[stat] [100001]image/1.jpg(4 images) time used: 41ms (at 1583765958531) total:705ms
[result][100001][image/1.jpg][281470472005664] is: n07747607 orange 0.973633 950; n07747607
orange 分类名 0.973633 分类概率 950 分类名的序号
物体检测的demo运行效果:
[stat] time used : 101ms; all time used:478 images[3] result: label:no2_ynen;prob:0.985352 loc:[(0.459961,0.839844), (0.5625,0.988281)] no2_ynen 分类名 ,
也可以获取分类名的序号 0.985352 分类概率 loc:[(0.459961,0.839844), (0.5625,0.988281)], 检测框的位置。 (0.459961,0.839844)表示左上角的点,(0.5625,0.988281)右下角的点; 如原始图片608, 左上角(0.459961*608,0.839844*608), 右下角(0.5625*608,0.988281*608)
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中包含的库而定。
2. EasyDL 离线SDK与云服务效果不一致,如何处理?
目前离线SDK与云服务的处理有些许差异,具体如下:
- 图像分类模型:离线SDK与云服务使用通用(非快速训练、非AutoDL Transfer)的效果类似
- 物体检测模型:离线SDK的高精度模型与云服务的精度较低,服务性能更佳的效果类似
后续我们会消除这部分差异,如果开发者发现差异较大,可联系我们协助处理。