物体检测LinuxSDK集成文档-Atlas
简介
本文档介绍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的
高精度
模型与云服务的精度较低,服务性能更佳
的效果类似
后续我们会消除这部分差异,如果开发者发现差异较大,可联系我们协助处理。