6-进阶应用
-
1.1 EasyDL模型训练
1.2 EasyDL模型发布
1.3 EasyDL模型SDK部署
1.4 EasyDL模型SDK自动加载
- PaddlePaddle模型部署
- 第三方框架模型部署
EasyDL-EdgeBoard软硬一体方案部署
EasyDL面向企业开发者提供零门槛AI开发平台,一站式支持智能标注、模型训练、服务部署等全流程功能,内置丰富的预训练模型,支持公有云/私有化/设备端等灵活部署方式。EasyDL面向不同人群提供经典版、专业版、零售版三款产品,已在工业、零售、制造、医疗等领域落地。EasyDL和EdgeBoard合作推出软硬一体方案。将EdgeBoard与EasyDL图像分类/物体检测模型深度适配,可应用于工业分拣、视频监控等多种设备端离线计算场景,让离线AI落地更轻松。
EasyDL模型训练
EasyDL和EdgeBoard合作推出软硬一体方案,将EdgeBoard与EasyDL图像分类/物体检测模型深度适配,现支持:经典版图像分类、经典版物体检测和专业版视觉任务。
经典版图像分类
经典版物体检测
专业版视觉任务
- 专业版服务介绍
-
图像分类数据导入与标注
-
物体检测数据导入与标注
-
智能标注
-
视觉-脚本调参
-
视觉模型训练
EasyDL模型发布
获取SDK
如何获取软硬一体产品:经典版图像分类、经典版物体检测、专业版视觉任务
EasyDL SDK需要专用序列号激活才可使用,模型发布后,点击我的模型-服务详情,下载SDK,如果是购买的软硬一体套件,点击管理序列号,查看用于激活专用SDK的专用序列号,如果还没有专用序列号,需点击前往AI市场购买
获取专用序列号
经典版模型和专业版模型需要不同的序列号激活:
经典版专用序列号入口直达
专业版专用序列号入口直达
用户还可以通过AI市场订单详情查看对应版本的专项硬件适配服务,如下图所示:
如果连接中没有专用序列号,还请确认订单是否为EdgeBoard&EasyDL软硬一体方案,以及购买账户和模型训练账户是否是同一个。
在更换序列号、更换设备时,首次使用EasyDL SDK需要联网激活。激活成功之后,有效期内可离线使用。
EasyDL模型SDK部署
开发者从EasyDL训练模型之后,下载的SDK中,包含了简单易用的Demo和http服务接口。只需简单的几个步骤,即可快速部署运行EdgeBoard。
SDK文件结构如下:
EasyEdge-m1800-EdgeBoard/
├── cpp
| └── baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_v0.3.2_gcc6.2_20190518
| ├── demo
│ | ├── CMakeLists.txt
│ | ├── demo.cpp
│ | └── easyedge_serving
│ ├──include
│ | ├── easyedge
│ | └── easyedge.h
│ └── lib
| ├── libeasyedge.so -> libeasyedge.so.0.4.0
| ├── libeasyedge.so.0.4.0
| ├── libeasyedge_static.a
| ├── libpaddle_full_api_shared.so
| └── libverify.alib
├── RES
│ ├── conf.json
│ ├── label_list.txt
│ ├── model
│ ├── params
│ └── preprocess_args.json
|
└── tools
1、EdgeBoard环境搭建
- 连接设备
-
加载驱动,系统启动后加载一次即可(系统默认已自启动,此步骤可省略)
insmod /home/root/workspace/driver/fpgadrv.ko
若未加载驱动,可能报错:
Failed to to fpga device: -1
-
设置系统时间(系统时间必须正确)
date --set "2020-5-18 20:48:00"
- 设置EdgeBoard能够联网,参照EdgeBoard连接外网方式
2、使用序列号License 激活SDK
将SDK放到EdgeBoard系统/home/root/workspace/目录下,使用unzip
以及tar
命令解压zip包和tar.gz文件,然后编辑demo.cpp文件
//打开demo目录
cd EasyEdge-m1800-EdgeBoard/cpp/baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_v0.3.2_gcc6.2_20190518 /demo
//编辑demo.cpp文件
vim demo.cpp
将set_licence_key函数中的字符串参数"set your license here"替换为序列号License即可,如下图所示
3、编译运行demo
编译:
//进入cpp文件的demo文件夹
cd /home/root/workspace/EasyEdge-m1800-edgeboard/cpp/baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_v0.3.2_gcc6.2_20190518/demo
// 如果没有build目录,创建一个
mkdir build
cd build
//调用cmake 创建 Makefile
cmake ..
// 编译工程
make
运行
./easyedge_demo {RES资源文件夹路径} {测试图片路径}
便可看到识别结果。
例:在SDK中放入需要预测的图片,如将预测图片放入RES文件夹中,执行命令如下
//进入demo目录
cd /home/root/workspace/EasyEdge-m1800-edgeboard/cpp/baidu_easyedge_linux_cpp_aarch64_PADDLEMOBILE_FPGA_v0.3.2_gcc6.2_20190518/demo
//执行示例
./easyedge_demo ../../../../RES/ ../../../../RES/1.jpg
4、(可选)启动HTTP服务
部署包中附带了HTTP服务功能,开发者可以进入SDK根目录,运行easyedge_serving
程序启动HTTP服务。
# ./easyedge_serving {RES目录} {序列号} {绑定的host,默认0.0.0.0} {绑定的端口,默认24401}
cd ${SDK_ROOT}
export LD_LIBRARY_PATH=./lib
./demo/easyedge_serving ../../../RES "1111-1111-1111-1111"
日志显示
2019-07-18 13:27:05,941 INFO [EasyEdge] [http_server.cpp:136] 547974369280 Serving at 0.0.0.0:24401
则启动成功。此时可直接在浏览器中输入http://{EdgeBoard计算盒ip地址}:24401/
,在h5中测试模型效果。
同时,可以调用HTTP接口来访问盒子。具体参考下文接口说明。
5、接口使用说明
使用流程:
首次使用需要联网激活。激活成功之后,有效期内可离线使用。
- 设置序列号
global_controller()->set_licence_key
- 配置
PaddleFluidConfig
- 新建
Predictor
:global_controller()->CreateEdgePredictor(config);
- 初始化
predictor->init()
- 传入图片开始识别
predictor->infer(img, ...);
接口说明:
预测图片
/**
* @brief 同步预测接口
* inference synchronous
* Supported by most chip and engine
* @param image: must be BGR , HWC format (opencv default)
* @param result
* @param threshold
* @return
*/
virtual int infer(
cv::Mat &image, std::vector<EdgeResultData> &result, float threshold = 0.1
) = 0;
识别结果说明
EdgeResultData
中可以获取对应的分类信息、位置信息。
struct EdgeResultData {
int index; // 分类结果的index
std::string label; // 分类结果的label
float prob; // 置信度
// object detection field
float x1, y1, x2, y2; // (x1, y1): 左上角, (x2, y2): 右下角; 均为0~1的长宽比例值。
};
关于矩形坐标
x1 * 图片宽度 = 检测框的左上角的横坐标
y1 * 图片高度 = 检测框的左上角的纵坐标
x2 * 图片宽度 = 检测框的右下角的横坐标
y2 * 图片高度 = 检测框的右下角的纵坐标
可以参考demo文件中使用opencv绘制矩形的逻辑。
6、HTTP私有服务请求说明
http 请求参数
URL中的get参数:
参数 | 说明 | 默认值 |
---|---|---|
threshold | 阈值过滤, 0~1 | 0.1 |
HTTP POST Body即为图片的二进制内容(无需base64, 无需json)
Python请求示例
import requests
with open('./1.jpg', 'rb') as f:
img = f.read()
result = requests.post(
'http://127.0.0.1:24401/',
params={'threshold': 0.1},
data=img).json()
http 返回数据
字段 | 类型说明 | 其他 |
---|---|---|
error_code | Number | 0为成功,非0参考message获得具体错误信息 |
results | Array | 内容为具体的识别结果。其中字段的具体含义请参考预测图像-返回格式 一节 |
cost_ms | Number | 预测耗时ms,不含网络交互时间 |
返回示例
{
"cost_ms": 52,
"error_code": 0,
"results": [
{
"confidence": 0.94482421875,
"index": 1,
"label": "IronMan",
"x1": 0.059185408055782318,
"x2": 0.18795496225357056,
"y1": 0.14762254059314728,
"y2": 0.52510076761245728
},
{
"confidence": 0.94091796875,
"index": 1,
"label": "IronMan",
"x1": 0.79151463508605957,
"x2": 0.92310667037963867,
"y1": 0.045728668570518494,
"y2": 0.42920106649398804
}
]
}
错误说明
SDK所有主动报出的错误,均覆盖在EdgeStatus
枚举中。同时SDK会有详细的错误日志,开发者可以打开Debug日志查看额外说明:
EdgeLogConfig log_config;
log_config.enable_debug = true;
global_controller()->set_log_config(log_config);
EasyDL模型SDK自动加载
如需开机自启 EasyDL SDK,可参考如何设置文件自启动中的『EasyDL sdk自动加载』部分。
PaddlePaddle模型部署
目前EdgeBoard仅支持PaddlePaddle训练的模型,用户可以使用PaddlePaddle开源深度学习框架训练自己的模型,也可以通过AI studio平台训练模型
PaddlePaddle模型部署流程参考视频入口
部署步骤:
1、将模型上传至系统自带的sample的不同示例工程中;
EdgeBoard支持图像分类和物体检测两类模型
1)如果是图像分类模型,模型需上传到/home/root/workspace/sample/classification/models
目录,
2)如果是物体检测模型,模型需上传到/home/root/workspace/sample/detection/models
目录。
2、模型结构和参数的名称与sample中的模型名称须对应
EdgeBoards示例工程中modes目录的模型文件名称为model和params,如果训练出的模型不一致,需改下模型名称,可以对模型直接重命名,或者在保存模型的API fluid.io.save_inference_model中指定model_filename和params_filename为model和params参考链接
sample程序同样支持非融合模型的加载,更改/sample/src/image_classify.cpp
下面代码,增加
config.model_dir = model_dir;
同时将45、46行注释掉,见下图:
重新编译。
3、修改config文件
- 指定model路径
- 修改数据预处理后的尺寸大小
- 指定预测图片路径
-
修改mean和scale值,图像数据归一化方式有:
举例:R为一张图片中一个像素点的R通道的值
①(R / 255 – mean) / std
②(R – mean’) * scale(EdgeBoard处理方式)
mean’= mean * 255 scale = 1 / ( 255 * std )
4、上传预测图片
上传预测图片到config文件指定预测图片路径中,可使用ftp或者samba工具进行文件上传操作
5、运行模型
参考sample运行模型方式,同样运行自己的模型
第三方框架模型部署
如果当前模型使用不同框架模型,例如caffe/tensorflow/pytorch/ONNX模型,需要将模型转换成paddlepaddle框架才能在EdgeBoard中正确运行。
X2Paddle工具支持将其他深度学习框架训练得到的模型,转换至PaddlePaddle模型。
X2Paddle工具使用入口