所有文档

          EasyDL定制AI训练平台

          经典版物体检测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的高精度模型与云服务的精度较低,服务性能更佳的效果类似

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

          上一篇
          LinuxSDK集成文档-C++
          下一篇
          WindowsSDK集成文档