视觉任务Jetson专用SDK集成文档

全功能AI开发平台 BML

  • 版本发布记录
  • 快速开始
    • 用BML实现表格预测
    • 用BML实现序列标注
    • 用BML实现文本实体抽取
    • 用BML实现图片分类
    • 用BML实现实例分割
    • 用BML评价短文本相似度
    • 用BML实现开源大模型的预训练(Post-pretrain)
    • 用BML实现文本分类
    • 用BML实现物体检测
  • 模型仓库
    • 从训练任务导入模型
    • 查看模型
    • 创建模型
    • 模型仓库简介
    • 从本地导入模型
    • 校验模型
    • 服务代码文件示例
      • Sklearn服务代码文件示例
      • XGBoost服务代码文件示例
  • 平台管理
    • 权限管理
    • 在BML平台使用并行文件系统PFS和对象存储BOS
    • 在BML平台使用容器镜像服务CCR
    • 在BML使用外部镜像
    • 项目空间管理
    • 镜像管理
      • 镜像使用
      • 镜像管理简介
      • 常见问题
      • 自定义镜像
    • 资源管理
      • 资源池管理简介
      • 资源池使用简介
  • 预测部署
    • 批量预测(用户资源池)API
    • 文字识别模型部署
      • 文字识别任务API参考文档
      • 文字识别任务公有云部署
    • 通用模型部署
      • 标准接口规范参考
      • Paddle框架API调用文档
      • sklearn框架API调用文档
      • 公有云部署
      • XGBoost框架API调用文档
      • tensorflow框架API调用文档
      • Pytorch框架API调用文档
      • 通用类模型API参考
      • 错误码
    • 语音技术模型部署
      • 声音分类API调用文档
    • 视觉模型部署
      • 智能边缘控制台-多节点版
      • 端云协同服务部署
      • 智能边缘控制台-单节点版
      • 视觉任务模型部署整体说明
      • 软硬一体方案部署
        • 视觉任务Jetson专用SDK集成文档
        • 如何获取视觉任务软硬一体产品
        • 视觉任务EdgeBoard(VMX)专用SDK集成文档
        • 视觉任务EdgeBoard(FZ)专用SDK集成文档
        • 视觉任务专用辨影SDK集成开发文档
      • 私有服务器部署
        • 视觉模型如何部署在私有服务器
        • 私有API
          • 如何发布私有API
          • 图像分类-单图单标签私有API集成文档
          • 图像分类-单图多标签私有API集成文档
          • 物体检测私有API集成文档
        • 服务器端SDK
          • 视觉任务服务器端LinuxSDK集成文档-Python
          • 视觉任务服务器端LinuxSDK集成文档-C++
          • 如何发布服务器端SDK
          • 视觉任务服务器端WindowsSDK集成文档
          • 视觉任务服务器端SDK简介
      • 设备端SDK部署
        • 视觉任务WindowsSDK集成文档
        • 视觉任务iOSSDK集成文档
        • 视觉任务LinuxSDK集成文档-Python
        • 视觉任务LinuxSDK集成文档-C++
        • 视觉任务设备端SDK使用说明
        • 如何发布视觉任务设备端SDK
        • 视觉任务AndroidSDK集成文档
      • 公有云部署
        • 文字识别API参考文档
        • 视觉任务公有云部署
        • 物体检测API参考文档
        • 图像分类-单图单标签API参考文档
        • 实例分割API参考文档
        • 图像分类-单图多标签API参考文档
    • 表格预测模型部署
      • 整体说明
      • 公有云部署
    • 公有云部署管理
      • 配置AB测试版本
      • 批量预测服务
      • 公有云部署
      • 公有云部署简介
      • 配置休眠策略
    • NLP模型部署
      • 自然语言处理任务模型部署整体说明
      • 私有服务器部署
        • 如何部署在私有服务器
        • 私有服务API说明
          • 私有部署说明-短文本相似度
          • 私有化部署接口说明-文本分类
          • 私有部署文档-序列标注
          • 文本实体抽取API调用文档
      • 公有云部署
        • 短文本匹配API调用文档
        • 文本实体抽取私有API调用说明
        • 如何发布自然语言处理任务API
        • 文本分类-多标签API调用文档
        • 文本分类API调用文档
        • 序列标注API调用文档
  • 数据服务
    • 数据服务简介
    • 智能数据API
    • 公有云服务调用数据反馈
    • 智能标注
      • 文本智能标注介绍及原理说明
      • 图像智能标注介绍说明
    • 管理视觉数据
      • 实例分割数据导入与标注
        • 数据标注说明
        • 导入未标注数据
        • 导入已标注数据
      • 物体检测数据导入与标注
        • 物体检测数据标注说明
        • 物体检测导入未标注数据
        • 物体检测导入已标注数据
      • 图像分类数据导入与标注
        • 图像分类导入未标注数据
        • 图像分类导入已标注数据
        • 图像分类数据标注说明
    • 管理文本数据
      • 文本分类数据导入与标注
        • 文本分类数据标注说明
        • 文本分类数据导入与标注
        • 数据去重策略
      • 序列标注数据导入与标注
        • 序列标注标注说明
        • 序列标注数据导入
        • 数据去重策略
      • 文本实体抽取数据标注
        • 文本实体抽取数据标注
        • 文本实体抽取数据导入
        • 数据去重策略
      • 短文本匹配数据导入与标注
        • 短文本匹配数据导入与标注
        • 数据去重策略说明
        • 短文本匹配数据标注
  • 产品简介
    • BML平台升级公告
    • 平台重点升级介绍
    • 产品优势
    • 产品功能
    • 什么是BML
    • 文心大模型
  • 产品定价
    • 服务器部署价格说明
    • 专项适配硬件部署价格说明
    • 公有云部署计费说明
    • 批量预测计费说明
    • 模型训练计费说明
    • 通用小型设备部署价格说明
  • 模型训练
    • Notebook建模
      • 创建并启动Notebook
      • Notebook导入数据集
      • 保存Notebook中的模型
      • Notebook使用参考
      • 常见问题
      • 数据模型可视化功能说明
      • Notebook简介
      • 发布模型
      • 配置模型
      • 使用Notebook开发模型
      • 如何使用Notebook SSH 功能
      • Notebook从训练到部署快速入门
        • Codelab Notebook自定义环境部署最佳实践
        • 基于Notebook的图像分类模板使用指南
        • 基于 Notebook 的 NLP 通用模板使用指南
        • Notebook 模板使用指南概述
        • 基于 Notebook 的通用模板使用指南
        • 基于 Notebook 的物体检测模板使用指南
    • 自定义作业建模
      • 自定义作业简介
      • 训练作业API
      • 训练作业
        • 使用训练作业训练模型
        • 创建训练作业
        • 发布模型
        • 训练作业代码示例
          • TensorFlow 1.13.2
          • AIAK- Training Pytorch版
          • TensorFlow 2.3.0
          • Blackhole 1.0.0
          • Pytorch 1.7.1
          • Sklearn 0.23.2
          • XGBoost 1.3.1
          • PaddlePaddle 2.0.0rc
      • 自动搜索作业
        • 创建自动搜索作业
        • yaml文件编写规范
        • 自动搜索作业简介
        • 自动搜索作业代码编写规范
        • 自动搜索作业代码示例
          • XGBoost 1.3.1代码规范
          • TensorFlow 1.13.2代码规范
          • Sklearn 0.23.2代码规范
          • Pytorch 1.7.1代码规范
          • Tensorflow2.3.0代码规范
          • PaddlePaddle 2.1.1代码规范
    • 可视化建模
      • 快速入门
      • 概述
      • 组件菜单
        • 001-基本操作
        • 003-查看模型特征溯源
        • 007-组件状态
        • 008-组件资源配置
        • 006-组件列选择
        • 002-查看模型可解释性
        • 004-查看特征重要性
      • 组件说明
        • 015-图算法
        • 004-特征工程组件
        • 003-数据处理组件
        • 012-预测组件
        • 008-聚类算法
        • 009-Python算法组件
        • 002-数据集组件
        • 014-自然语言处理组件
        • 010-NLP算法
        • 016-统计分析组件
        • 006-回归算法
        • 007-异常检测算法
        • 013-模型评估组件
        • 005-分类算法
        • 018-时间序列组件
      • 画布操作说明
        • 005-AutoML(自动调参)
        • 002-开始训练
        • 001-概述
    • 预置模型调参建模
      • 预置模型调参简介
      • 神经网络训练搜索
      • 开发视觉模型
        • 视觉任务简介
        • 查看训练结果
        • 创建视觉任务
        • 配置视觉任务
        • 开发参考
          • 视觉预训练模型
          • 超参数配置参考
          • 评估报告参考
          • 自动超参搜索配置参考
          • 数据增强算子参考
          • 训练时长设置参考
          • 网络选型参考
      • 开发表格预测模型
        • 创建表格预测任务
        • 配置专家模式表格数据预测任务
        • 查看训练结果
        • 配置AUTOML模式表格数据预测任务
        • 表格预测任务简介
      • 开发文字识别模型
        • 文字识别任务简介
        • 文字识别任务操作流程
      • 开发自然语言处理模型
        • 查看训练结果
        • 自然语言处理任务简介
        • 配置NLP任务
        • 创建NLP任务
        • 代码模板升级及迁移说明
所有文档
menu
没有找到结果,请重新输入

全功能AI开发平台 BML

  • 版本发布记录
  • 快速开始
    • 用BML实现表格预测
    • 用BML实现序列标注
    • 用BML实现文本实体抽取
    • 用BML实现图片分类
    • 用BML实现实例分割
    • 用BML评价短文本相似度
    • 用BML实现开源大模型的预训练(Post-pretrain)
    • 用BML实现文本分类
    • 用BML实现物体检测
  • 模型仓库
    • 从训练任务导入模型
    • 查看模型
    • 创建模型
    • 模型仓库简介
    • 从本地导入模型
    • 校验模型
    • 服务代码文件示例
      • Sklearn服务代码文件示例
      • XGBoost服务代码文件示例
  • 平台管理
    • 权限管理
    • 在BML平台使用并行文件系统PFS和对象存储BOS
    • 在BML平台使用容器镜像服务CCR
    • 在BML使用外部镜像
    • 项目空间管理
    • 镜像管理
      • 镜像使用
      • 镜像管理简介
      • 常见问题
      • 自定义镜像
    • 资源管理
      • 资源池管理简介
      • 资源池使用简介
  • 预测部署
    • 批量预测(用户资源池)API
    • 文字识别模型部署
      • 文字识别任务API参考文档
      • 文字识别任务公有云部署
    • 通用模型部署
      • 标准接口规范参考
      • Paddle框架API调用文档
      • sklearn框架API调用文档
      • 公有云部署
      • XGBoost框架API调用文档
      • tensorflow框架API调用文档
      • Pytorch框架API调用文档
      • 通用类模型API参考
      • 错误码
    • 语音技术模型部署
      • 声音分类API调用文档
    • 视觉模型部署
      • 智能边缘控制台-多节点版
      • 端云协同服务部署
      • 智能边缘控制台-单节点版
      • 视觉任务模型部署整体说明
      • 软硬一体方案部署
        • 视觉任务Jetson专用SDK集成文档
        • 如何获取视觉任务软硬一体产品
        • 视觉任务EdgeBoard(VMX)专用SDK集成文档
        • 视觉任务EdgeBoard(FZ)专用SDK集成文档
        • 视觉任务专用辨影SDK集成开发文档
      • 私有服务器部署
        • 视觉模型如何部署在私有服务器
        • 私有API
          • 如何发布私有API
          • 图像分类-单图单标签私有API集成文档
          • 图像分类-单图多标签私有API集成文档
          • 物体检测私有API集成文档
        • 服务器端SDK
          • 视觉任务服务器端LinuxSDK集成文档-Python
          • 视觉任务服务器端LinuxSDK集成文档-C++
          • 如何发布服务器端SDK
          • 视觉任务服务器端WindowsSDK集成文档
          • 视觉任务服务器端SDK简介
      • 设备端SDK部署
        • 视觉任务WindowsSDK集成文档
        • 视觉任务iOSSDK集成文档
        • 视觉任务LinuxSDK集成文档-Python
        • 视觉任务LinuxSDK集成文档-C++
        • 视觉任务设备端SDK使用说明
        • 如何发布视觉任务设备端SDK
        • 视觉任务AndroidSDK集成文档
      • 公有云部署
        • 文字识别API参考文档
        • 视觉任务公有云部署
        • 物体检测API参考文档
        • 图像分类-单图单标签API参考文档
        • 实例分割API参考文档
        • 图像分类-单图多标签API参考文档
    • 表格预测模型部署
      • 整体说明
      • 公有云部署
    • 公有云部署管理
      • 配置AB测试版本
      • 批量预测服务
      • 公有云部署
      • 公有云部署简介
      • 配置休眠策略
    • NLP模型部署
      • 自然语言处理任务模型部署整体说明
      • 私有服务器部署
        • 如何部署在私有服务器
        • 私有服务API说明
          • 私有部署说明-短文本相似度
          • 私有化部署接口说明-文本分类
          • 私有部署文档-序列标注
          • 文本实体抽取API调用文档
      • 公有云部署
        • 短文本匹配API调用文档
        • 文本实体抽取私有API调用说明
        • 如何发布自然语言处理任务API
        • 文本分类-多标签API调用文档
        • 文本分类API调用文档
        • 序列标注API调用文档
  • 数据服务
    • 数据服务简介
    • 智能数据API
    • 公有云服务调用数据反馈
    • 智能标注
      • 文本智能标注介绍及原理说明
      • 图像智能标注介绍说明
    • 管理视觉数据
      • 实例分割数据导入与标注
        • 数据标注说明
        • 导入未标注数据
        • 导入已标注数据
      • 物体检测数据导入与标注
        • 物体检测数据标注说明
        • 物体检测导入未标注数据
        • 物体检测导入已标注数据
      • 图像分类数据导入与标注
        • 图像分类导入未标注数据
        • 图像分类导入已标注数据
        • 图像分类数据标注说明
    • 管理文本数据
      • 文本分类数据导入与标注
        • 文本分类数据标注说明
        • 文本分类数据导入与标注
        • 数据去重策略
      • 序列标注数据导入与标注
        • 序列标注标注说明
        • 序列标注数据导入
        • 数据去重策略
      • 文本实体抽取数据标注
        • 文本实体抽取数据标注
        • 文本实体抽取数据导入
        • 数据去重策略
      • 短文本匹配数据导入与标注
        • 短文本匹配数据导入与标注
        • 数据去重策略说明
        • 短文本匹配数据标注
  • 产品简介
    • BML平台升级公告
    • 平台重点升级介绍
    • 产品优势
    • 产品功能
    • 什么是BML
    • 文心大模型
  • 产品定价
    • 服务器部署价格说明
    • 专项适配硬件部署价格说明
    • 公有云部署计费说明
    • 批量预测计费说明
    • 模型训练计费说明
    • 通用小型设备部署价格说明
  • 模型训练
    • Notebook建模
      • 创建并启动Notebook
      • Notebook导入数据集
      • 保存Notebook中的模型
      • Notebook使用参考
      • 常见问题
      • 数据模型可视化功能说明
      • Notebook简介
      • 发布模型
      • 配置模型
      • 使用Notebook开发模型
      • 如何使用Notebook SSH 功能
      • Notebook从训练到部署快速入门
        • Codelab Notebook自定义环境部署最佳实践
        • 基于Notebook的图像分类模板使用指南
        • 基于 Notebook 的 NLP 通用模板使用指南
        • Notebook 模板使用指南概述
        • 基于 Notebook 的通用模板使用指南
        • 基于 Notebook 的物体检测模板使用指南
    • 自定义作业建模
      • 自定义作业简介
      • 训练作业API
      • 训练作业
        • 使用训练作业训练模型
        • 创建训练作业
        • 发布模型
        • 训练作业代码示例
          • TensorFlow 1.13.2
          • AIAK- Training Pytorch版
          • TensorFlow 2.3.0
          • Blackhole 1.0.0
          • Pytorch 1.7.1
          • Sklearn 0.23.2
          • XGBoost 1.3.1
          • PaddlePaddle 2.0.0rc
      • 自动搜索作业
        • 创建自动搜索作业
        • yaml文件编写规范
        • 自动搜索作业简介
        • 自动搜索作业代码编写规范
        • 自动搜索作业代码示例
          • XGBoost 1.3.1代码规范
          • TensorFlow 1.13.2代码规范
          • Sklearn 0.23.2代码规范
          • Pytorch 1.7.1代码规范
          • Tensorflow2.3.0代码规范
          • PaddlePaddle 2.1.1代码规范
    • 可视化建模
      • 快速入门
      • 概述
      • 组件菜单
        • 001-基本操作
        • 003-查看模型特征溯源
        • 007-组件状态
        • 008-组件资源配置
        • 006-组件列选择
        • 002-查看模型可解释性
        • 004-查看特征重要性
      • 组件说明
        • 015-图算法
        • 004-特征工程组件
        • 003-数据处理组件
        • 012-预测组件
        • 008-聚类算法
        • 009-Python算法组件
        • 002-数据集组件
        • 014-自然语言处理组件
        • 010-NLP算法
        • 016-统计分析组件
        • 006-回归算法
        • 007-异常检测算法
        • 013-模型评估组件
        • 005-分类算法
        • 018-时间序列组件
      • 画布操作说明
        • 005-AutoML(自动调参)
        • 002-开始训练
        • 001-概述
    • 预置模型调参建模
      • 预置模型调参简介
      • 神经网络训练搜索
      • 开发视觉模型
        • 视觉任务简介
        • 查看训练结果
        • 创建视觉任务
        • 配置视觉任务
        • 开发参考
          • 视觉预训练模型
          • 超参数配置参考
          • 评估报告参考
          • 自动超参搜索配置参考
          • 数据增强算子参考
          • 训练时长设置参考
          • 网络选型参考
      • 开发表格预测模型
        • 创建表格预测任务
        • 配置专家模式表格数据预测任务
        • 查看训练结果
        • 配置AUTOML模式表格数据预测任务
        • 表格预测任务简介
      • 开发文字识别模型
        • 文字识别任务简介
        • 文字识别任务操作流程
      • 开发自然语言处理模型
        • 查看训练结果
        • 自然语言处理任务简介
        • 配置NLP任务
        • 创建NLP任务
        • 代码模板升级及迁移说明
  • 文档中心
  • arrow
  • 全功能AI开发平台BML
  • arrow
  • 预测部署
  • arrow
  • 视觉模型部署
  • arrow
  • 软硬一体方案部署
  • arrow
  • 视觉任务Jetson专用SDK集成文档
本页目录
  • 简介
  • 模型支持:
  • 软件版本支持
  • Release Notes
  • 快速开始
  • 安装依赖
  • 使用序列号激活
  • 编译并运行Demo
  • 测试Demo HTTP 服务
  • 使用说明
  • 初始化接口
  • 预测接口
  • 参数配置接口
  • 预测视频接口
  • 日志配置
  • 返回格式
  • http服务
  • 1. 开启http服务
  • 2. 请求http服务
  • http 返回数据
  • 多线程预测
  • 已知问题
  • 开发板信息查询与设置
  • 查询L4T或JetPack版本
  • 功率模式设置与查询
  • FAQ
  • 1. EasyDL SDK与云服务效果不一致,如何处理?
  • 2. 运行SDK报错 Authorization failed
  • 3. 使用libcurl请求http服务时,速度明显变慢
  • 4. 运行demo时报找不到libeasyedge_extension.so
  • 5. 运行demo时报如下之一错误
  • 6. 运行有损压缩加速的模型,运算精度较标准模型偏低

视觉任务Jetson专用SDK集成文档

更新时间:2025-08-21

简介

本文档介绍EasyEdge/EasyDL的Jetson SDK的使用方法。Jetson SDK支持的硬件包括Jetson nano,Jetson TX2,Jetson AGX Xavier和Jetson Xavier NX。您可在AI市场了解Jetson相关系列产品,同时可以在软硬一体方案了解部署方案。

模型支持:

  • EasyDL图像:图像分类高精度,图像分类高性能,物体检测高精度,物体检测均衡,物体检测高性能,目标跟踪单标签模型。
  • BML:

    • 公开数据集预训练模型:SSD-MobileNetV1,YOLOv3-DarkNet,YOLOv3-MobileNetV1,ResNet50,ResNet101,SE-ResNeXt50,SE-ResNeXt101,MobileNetV2,EfficientNetB0_small,EfficientNetB4,MobileNetV3_large_x1_0,ResNet18_vd,SE_ResNet18_vd,Xception71。
    • 百度超大规模数据集预训练模型:YOLOv3-DarkNet,MobileNetV3_large_x1_0,ResNet50_vd,ResNet101_vd。
  • EasyEdge:EasyEdge支持的模型较多,详见查看模型网络适配硬件。若模型不在此列表,可以尝试使用自定义网络生成端计算组件。

软件版本支持

使用EasyDL的Jetson系列SDK需要安装指定版本的JetPack和相关组件。所支持的JetPack版本会随着SDK版本的升级和新版本JetPack的推出而不断的更新。在使用SDK前请务必保证软件版本满足此处声明版本。目前所支持的JetPack版本包括:

  • JetPack5.0.1
  • JetPack4.6
  • JetPack4.5
  • JetPack4.4(deprecated,该版本SDK会在未来某个版本移除,请切换至新版本JetPack)
  • JetPack4.2.2(已移除,请切换至新版本JetPack)

安装JetPack时请务必安装对应的组件:

  • 使用SDK Manager安装JetPack需要勾选TensorRT、OpenCV、CUDA、cuDNN等选项。
  • 使用SD Card Image方式(仅对Jetson Nano和Jetson Xavier NX有效)则无需关心组件问题,默认会全部安装。

Release Notes

时间 版本 说明
2022.07.28 1.6.0 新增支持JetPack5.0.1,新增目标追踪接入实时流的demo
2022.05.18 1.5.0 部分模型切换格式,max_batch_size含义变更,由输入图片数不大于该值变更为等于该值;移除适用于JetPack4.2.2的SDK;示例代码demo_stream_inference重构;示例代码移除frame_buffer,新增更安全高效的safe_queue
2021.12.22 1.3.5 新增支持JetPack4.6;支持在EasyEdge平台语义分割模型生成开发套件;修复缓存问题;支持自定义缓存路径
2021.10.20 1.3.4 新增支持JetPack4.5;大幅提升EasyDL有损压缩加速模型的推理速度
2021.06.29 1.3.1 视频流支持分辨率调整;支持将预测后的视频推流,新增推流demo
2021.05.13 1.3.0 新增视频流接入支持;EasyDL模型发布新增多种加速方案选择;目标追踪支持x86平台的CPU、GPU加速版;展示已发布模型性能评估报告
2021.03.09 1.2.1 EasyEdge新增一系列模型的支持;性能优化
2021.01.27 1.1.0 EasyDL经典版高性能分类模型升级;
EasyDL经典版检测模型新增均衡选项;
EasyEdge平台新增Jetson系列端计算组件的生成;
问题修复
2020.12.18 1.0.0 接口升级和一些性能优化
2020.08.11 0.5.5 部分模型预测速度提升
2020.06.23 0.5.4 支持JetPack4.4DP,支持EasyDL专业版更多模型
2020.05.15 0.5.3 专项硬件适配SDK支持Jetson系列

2022-5-18: 【接口变更】 PREDICTOR_KEY_GTURBO_MAX_BATCH_SIZE含义变更。 变更前:预测输入图片数不大于该值均可。 变更后:预测输入图片数需等于该值。SDK内部对该接口变更做了兼容处理,在输入图片数小于该值时依然可正常运行,但预测性能会和等于该值时一致。推荐根据实际输入图片数量需求修改该值,尽可能保持最小。 【版本移除】 适用于JetPack4.4版本的SDK被标记为deprecated,SDK会在未来某个版本移除,建议切换至最新版本JetPack。 适用于JetPack4.2.2版本的SDK被移除。

2020-12-18: 【接口升级】 参数配置接口从1.0.0版本开始已升级为新接口,以前的方式被置为deprecated,并将在未来的版本中移除。请尽快考虑升级为新的接口方式,具体使用方式可以参考下文介绍以及demo工程示例,谢谢。

2021-10-20: 【版本移除】 适用于JetPack4.2.2版本的SDK被标记为deprecated,该版本代码已停止更新,SDK会在未来某个版本移除,请切换至新版本JetPack

快速开始

安装依赖

本SDK适用于JetPack4.4、JetPack4.5、JetPack4.6版本,请务必安装其中之一版本,并使用对应版本的SDK。 注意在安装JetPack时,需同时安装CUDA、cuDNN、OpenCV、TensorRT等组件。

如已安装JetPack需要查询相关版本信息,请参考下文中的开发板信息查询与设置。

使用序列号激活

首先请在官网获取序列号。

将获取到的序列号填写到demo文件中或以参数形式传入。

编译并运行Demo

模型资源文件默认已经打包在开发者下载的SDK包中。Demo工程直接编译即可运行。

编译运行:

Bash
1cd src
2mkdir build && cd build
3cmake ..
4make -j$(nproc)
5# make install 为可选,也可将lib所在路径添加为环境变量
6sudo make install
7sudo ldconfig
8./demo_batch_inference/easyedge_batch_inference {模型RES文件夹}  {测试图片路径或仅包含图片的文件夹路径} {序列号}

demo运行示例:

Bash
1baidu@nano:~/ljay/easydl/sdk/demo/build$ ./demo_batch_inference/easyedge_batch_inference ../../../../RES/ /ljay/images/mix008.jpeg
22020-08-06 20:56:30,665 INFO [EasyEdge] 548125646864 Compiling model for fast inference, this may take a while (Acceleration)
32020-08-06 20:57:58,427 INFO [EasyEdge] 548125646864 Optimized model saved to: /home/baidu/.baidu/easyedge/jetson/mcache/24110044320/m_cache, Don't remove it
4Results of image /ljay/images/mix008.jpeg: 
52, kiwi, p:0.997594 loc: 0.352087, 0.56119, 0.625748, 0.868399
62, kiwi, p:0.993221 loc: 0.45789, 0.0730294, 0.73641, 0.399429
72, kiwi, p:0.992884 loc: 0.156876, 0.0598725, 0.3802, 0.394706
81, tomato, p:0.992125 loc: 0.523592, 0.389156, 0.657738, 0.548069
91, tomato, p:0.991821 loc: 0.665461, 0.419503, 0.805282, 0.573558
101, tomato, p:0.989883 loc: 0.297427, 0.439999, 0.432197, 0.59325
111, tomato, p:0.981654 loc: 0.383444, 0.248203, 0.506606, 0.400926
121, tomato, p:0.971682 loc: 0.183775, 0.556587, 0.286996, 0.711361
131, tomato, p:0.968722 loc: 0.379391, 0.0386965, 0.51672, 0.209681
14Done

检测结果展示:

测试Demo HTTP 服务

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

Bash
1# ./easyedge_serving {res_dir} {serial_key} {host, default 0.0.0.0} {port, default 24401}
2 ./easyedge_serving ../../../../RES "1111-1111-1111-1111" 0.0.0.0 24401

日志中会显示

Bash
1HTTP is now serving at 0.0.0.0:24401

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

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

使用说明

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

使用流程

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

C++
1// step 1: 配置模型运行参数
2EdgePredictorConfig config;
3config.model_dir = model_dir;
4config.set_config(params::PREDICTOR_KEY_SERIAL_NUM, serial_num);
5config.set_config(params::PREDICTOR_KEY_GTURBO_MAX_BATCH_SIZE, 1);  // 优化的模型可以支持的batch_size
6config.set_config(params::PREDICTOR_KEY_GTURBO_FP16, false);        // 置true开启fp16模式推理会更快,精度会略微降低,但取决于硬件是否支持fp16,不是所有模型都支持fp16,参阅文档
7config.set_config(params::PREDICTOR_KEY_GTURBO_COMPILE_LEVEL, 1);   // 编译模型的策略,如果当前设置的max_batch_size与历史编译存储的不同,则重新编译模型
8
9
10// step 2: 创建并初始化Predictor
11auto predictor = global_controller()->CreateEdgePredictor<EdgePredictorConfig>(config);
12if (predictor->init() != EDGE_OK) {
13    exit(-1);
14}
15
16// step 3-1: 预测图像
17auto img = cv::imread({图片路径});
18std::vector<EdgeResultData> results;
19predictor->infer(img, results);
20
21// step 3-2: 预测视频
22std::vector<EdgeResultData> results;
23FrameTensor frame_tensor;
24VideoConfig video_config;
25video_config.source_type = static_cast<SourceType>(video_type);  // source_type 定义参考头文件 easyedge_video.h
26video_config.source_value = video_src;
27/*
28... more video_configs, 根据需要配置video_config的各选项
29*/
30auto video_decoding = CreateVideoDecoding(video_config);
31while (video_decoding->next(frame_tensor) == EDGE_OK) {
32    results.clear();
33    if (frame_tensor.is_needed) {
34        predictor->infer(frame_tensor.frame, results);
35        render(frame_tensor.frame, results, predictor->model_info().kind);
36    }
37    //video_decoding->display(frame_tensor); // 显示当前frame,需在video_config中开启配置
38    //video_decoding->save(frame_tensor); // 存储当前frame到视频,需在video_config中开启配置
39 }

初始化接口

C++
1auto predictor = global_controller()->CreateEdgePredictor<EdgePredictorConfig>(config);
2if (predictor->init() != EDGE_OK) {
3        exit(-1);
4}

若返回非0,请查看输出日志排查错误原因。

预测接口

C++
1/**
2 * @brief
3 * 单图预测接口
4 * @param image: must be BGR , HWC format (opencv default)
5 * @param result
6 * @return
7 */
8virtual int infer(
9        cv::Mat& image, std::vector<EdgeResultData>& result
10) = 0;
11
12/**
13 * @brief
14 * 批量图片预测接口
15 * @param image: must be BGR , HWC format (opencv default)
16 * @param result
17 * @return
18 */
19virtual int infer(
20        std::vector<cv::Mat>& image,
21        std::vector<std::vector<EdgeResultData>>& results
22) = 0;
23
24/**
25  * @brief
26  * 批量图片预测接口,带阈值
27  * @related infer(cv::Mat & image, EdgeColorFormat origin_color_format, std::vector<EdgeResultData> &result, float threshold)
28  */
29virtual int infer(
30            std::vector<cv::Mat> &images,
31            EdgeColorFormat origin_color_format,
32            std::vector<std::vector<EdgeResultData>> &results,
33            float threshold
34) = 0;

图片的格式务必为opencv默认的BGR, HWC格式。

批量图片的预测接口的使用要求在调用 init 接口的时候设置一个有效的 max_batch_size,其含义见下方参数配置接口的介绍。

参数配置接口

参数配置通过结构体EdgePredictorConfig完成。

Plain Text
1struct EdgePredictorConfig {
2    /**
3     * @brief 模型资源文件夹路径
4     */
5    std::string model_dir;
6
7    std::map<std::string, std::string> conf;
8
9    EdgePredictorConfig();
10
11    template<typename T>
12    T get_config(const std::string &key, const T &default_value);
13
14    template<typename T = std::string>
15    T get_config(const std::string &key);
16
17    template<typename T>
18    const T *get_config(const std::string &key, const T *default_value);
19
20    template<typename T>
21    void set_config(const std::string &key, const T &value);
22
23    template<typename T>
24    void set_config(const std::string &key, const T *value);
25
26    static EdgePredictorConfig default_config();
27};

运行参数选项的配置以key、value的方式存储在类型为std::map的conf中,并且键值对的设置和获取可以通过EdgePredictorConfig的set_config和get_config函数完成。同时也支持以环境变量的方式设置键值对。 EdgePredictorConfig的具体使用方法可以参考开发工具包中的demo工程。

针对Jetson开发工具包,目前EdgePredictorConfig的运行参数所支持的Key包括如下项:

C++
1/**
2 * @brief 当有同类型的多个设备的时候,使用哪一个设备,如:
3 * GPU: 使用哪张GPU卡
4 * EdgeBoard(VMX),Movidius NCS :使用哪一张加速卡
5 * 值类型:int
6 * 默认值:0
7 */
8static constexpr auto PREDICTOR_KEY_DEVICE_ID = "PREDICTOR_KEY_DEVICE_ID";
9
10/**
11 * @brief 生成 batch_size 为 max_batch_size 的优化模型,单次预测图片数量可以小于或等于此值(推荐等于此值,见release notes)
12 * 值类型: int
13 * 默认值:4
14 */
15static constexpr auto PREDICTOR_KEY_GTURBO_MAX_BATCH_SIZE = "PREDICTOR_KEY_GTURBO_MAX_BATCH_SIZE";
16
17/**
18 * @brief 设置device对应的GPU卡可以支持的最大并发量
19 * 实际预测的时候对应GPU卡的最大并发量不超过这里设置的范围,否则预测请求会排队等待预测执行
20 * 值类型: int
21 * 默认值:1
22 */
23static constexpr auto PREDICTOR_KEY_GTURBO_MAX_CONCURRENCY = "PREDICTOR_KEY_GTURBO_MAX_CONCURRENCY";
24
25/**
26 * @brief 是否开启fp16模式预测,开启后预测速度会更快,但精度会略有降低。并且需要硬件支持fp16
27 * 值类型: bool
28 * 默认值:false
29 */
30static constexpr auto PREDICTOR_KEY_GTURBO_FP16 = "PREDICTOR_KEY_GTURBO_FP16";
31
32/**
33 * @brief 模型编译等级
34 * 1:如果当前max_batch_size与历史编译产出的max_batch_size不相等时,则重新编译模型(推荐)
35 * 2:无论历史编译产出的max_batch_size为多少,均根据当前max_batch_size重新编译模型
36 * 值类型: int
37 * 默认值:1
38 */
39static constexpr auto PREDICTOR_KEY_GTURBO_COMPILE_LEVEL = "PREDICTOR_KEY_GTURBO_COMPILE_LEVEL";
40
41/**
42 * @brief GPU工作空间大小设置
43 * workspace_size = workspace_prefix * (1 << workspace_offset)
44 * workspace_offset: 10 = KB, 20 = MB, 30 = GB
45 * 值类型: int
46 * 默认值:WORKSPACE_PREFIX: 100, WORKSPACE_OFFSET: 20,即100MB
47 */
48static constexpr auto PREDICTOR_KEY_GTURBO_WORKSPACE_PREFIX = "PREDICTOR_KEY_GTURBO_WORKSPACE_PREFIX";
49static constexpr auto PREDICTOR_KEY_GTURBO_WORKSPACE_OFFSET = "PREDICTOR_KEY_GTURBO_WORKSPACE_OFFSET";
50
51/**
52 * @brief 需要使用的dla core
53 * 值类型: int
54 * 默认值:-1(不使用)
55 */
56static constexpr auto PREDICTOR_KEY_GTURBO_DLA_CORE = "PREDICTOR_KEY_GTURBO_DLA_CORE";
57
58/**
59 * @brief 自定义缓存文件存储路径
60 * 值类型: string
61 * 默认值: ~/.baidu/easyedge/mcache/{model_id * 1000000 + release_id}
62 */
63static constexpr auto PREDICTOR_KEY_GTURBO_CACHE_DIR = "PREDICTOR_KEY_GTURBO_CACHE_DIR";
64
65/**
66 * @brief 自定义缓存文件命名,默认即可
67 * 值类型: string
68 * 默认值: 根据配置自动生成
69 */
70static constexpr auto PREDICTOR_KEY_GTURBO_CACHE_NAME = "PREDICTOR_KEY_GTURBO_CACHE_NAME";
71
72/**
73 * @brief 序列号设置;序列号不设置留空时,SDK将会自动尝试使用本地已经激活成功的有效期内的序列号
74 * 值类型:string
75 * 默认值:空
76 */
77static constexpr auto PREDICTOR_KEY_SERIAL_NUM = "PREDICTOR_KEY_SERIAL_NUM";

PREDICTOR_KEY_GTURBO_CACHE_NAME:首次加载模型会先对模型进行编译优化,通过此值可以设置优化后的产出文件名。

PREDICTOR_KEY_GTURBO_CACHE_DIR:首次加载模型经过编译优化后,产出的优化文件会存储在这个位置,可以按需修改。

PREDICTOR_KEY_GTURBO_WORKSPACE_PREFIX、PREDICTOR_KEY_GTURBO_WORKSPACE_OFFSET:设置运行时可以被用来使用的最大临时显存。

PREDICTOR_KEY_GTURBO_MAX_BATCH_SIZE:此值用来控制批量图片预测可以支持的最大图片数,实际预测的时候单次预测图片数需等于此值。

PREDICTOR_KEY_DEVICE_ID:设置需要使用的 GPU 卡号,对于Jetson,此值无需更改。

PREDICTOR_KEY_GTURBO_COMPILE_LEVEL:模型编译等级。通常模型的编译会比较慢,但编译产出是可以复用的。可以在第一次加载模型的时候设置合理的 max_batch_size 并在之后加载模型的时候直接使用历史编译产出。是否使用历史编译产出可以通过此值 compile_level 来控制,当此值为 0 时,表示忽略当前设置的 max_batch_size 而仅使用历史产出(无历史产出时则编译模型);当此值为 1 时,会比较历史产出和当前设置的 max_batch_size 是否相等,如不等,则重新编译;当此值为 2 时,无论如何都会重新编译模型。

PREDICTOR_KEY_GTURBO_MAX_CONCURRENCY:通过此值设置单张 GPU 卡上可以支持的最大 infer 并发量,其上限取决于硬件限制。init 接口会根据此值预分配 GPU 资源,建议结合实际使用控制此值,使用多少则设置多少。注意:此值的增加会降低单次 infer 的速度,建议优先考虑 batch inference。

PREDICTOR_KEY_GTURBO_FP16:默认是 fp32 模式,置 true 可以开启 fp16 模式预测,预测速度会有所提升,但精度也会略微下降,权衡使用。注意:不是所有模型都支持 fp16 模式,也不是所有硬件都支持 fp16 模式。已知不支持fp16的模型包括:EasyDL图像分类高精度模型。

预测视频接口

SDK 提供了支持摄像头读取、视频文件和网络视频流的解析工具类VideoDecoding,此类提供了获取视频帧数据的便利函数。通过VideoConfig结构体可以控制视频/摄像头的解析策略、抽帧策略、分辨率调整、结果视频存储等功能。对于抽取到的视频帧可以直接作为SDK infer 接口的参数进行预测。

classVideoDecoding:

Plain Text
1    /**
2     * @brief 获取输入源的下一帧
3     * @param frame_tensor
4     * @return
5     */
6    virtual int next(FrameTensor &frame_tensor) = 0;
7
8    /**
9     * @brief 显示当前frame_tensor中的视频帧
10     * @param frame_tensor
11     * @return
12     */
13    virtual int display(const FrameTensor &frame_tensor) = 0;
14
15    /**
16     * @brief 将当前frame_tensor中的视频帧写为本地视频文件
17     * @param frame_tensor
18     * @return
19     */
20    virtual int save(FrameTensor &frame_tensor) = 0;
21
22    /**
23     * @brief 获取视频的fps属性
24     * @return
25     */
26    virtual int get_fps() = 0;
27     /**
28      * @brief 获取视频的width属性
29      * @return
30      */
31    virtual int get_width() = 0;
32
33    /**
34     * @brief 获取视频的height属性
35     * @return
36     */
37    virtual int get_height() = 0;

struct VideoConfig

Plain Text
1/**
2 * @brief 视频源、抽帧策略、存储策略的设置选项
3 */
4struct VideoConfig {
5    SourceType source_type;            // 输入源类型
6    std::string source_value;          // 输入源地址,如视频文件路径、摄像头index、网络流地址
7    int skip_frames{0};                // 设置跳帧,每隔skip_frames帧抽取一帧,并把该抽取帧的is_needed置为true
8    int retrieve_all{false};           // 是否抽取所有frame以便于作为显示和存储,对于不满足skip_frames策略的frame,把所抽取帧的is_needed置为false
9    int input_fps{0};                  // 在采取抽帧之前设置视频的fps
10    Resolution resolution{Resolution::kAuto}; // 采样分辨率,只对camera有效
11
12    bool enable_display{false};
13    std::string window_name{"EasyEdge"};
14    bool display_all{false};           // 是否显示所有frame,若为false,仅显示根据skip_frames抽取的frame
15
16    bool enable_save{false};
17    std::string save_path;             // frame存储为视频文件的路径
18    bool save_all{false};              // 是否存储所有frame,若为false,仅存储根据skip_frames抽取的frame
19
20    std::map<std::string, std::string> conf;
21};

source_type:输入源类型,支持视频文件、摄像头、网络视频流三种,值分别为1、2、3。 source_value: 若source_type为视频文件,该值为指向视频文件的完整路径;若source_type为摄像头,该值为摄像头的index,如对于/dev/video0的摄像头,则index为0;若source_type为网络视频流,则为该视频流的完整地址。 skip_frames:设置跳帧,每隔skip_frames帧抽取一帧,并把该抽取帧的is_needed置为true,标记为is_needed的帧是用来做预测的帧。反之,直接跳过该帧,不经过预测。 retrieve_all:若置该项为true,则无论是否设置跳帧,所有的帧都会被抽取返回,以作为显示或存储用。 input_fps:用于抽帧前设置fps。 resolution:设置摄像头采样的分辨率,其值请参考easyedge_video.h中的定义,注意该分辨率调整仅对输入源为摄像头时有效。 conf:高级选项。部分配置会通过该map来设置。

注意:

  1. 如果使用VideoConfig的display功能,需要自行编译带有GTK选项的opencv,默认打包的opencv不包含此项。
  2. 使用摄像头抽帧时,如果通过resolution设置了分辨率调整,但是不起作用,请添加如下选项:
Plain Text
1video_config.conf["backend"] = "2";

3.部分设备上的CSI摄像头尚未兼容,如遇到问题,可以通过工单、QQ交流群或微信交流群反馈。

具体接口调用流程,可以参考SDK中的demo_video_inference。

日志配置

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

C++
1EdgeLogConfig log_config;
2log_config.enable_debug = true;
3global_controller()->set_log_config(log_config);

返回格式

预测成功后,从 EdgeResultData中可以获取对应的分类信息、位置信息。

C++
1struct EdgeResultData {
2    int index;  // 分类结果的index
3    std::string label;  // 分类结果的label
4    float prob;  // 置信度
5
6    // 物体检测或图像分割时才有
7    float x1, y1, x2, y2;  // (x1, y1): 左上角, (x2, y2): 右下角; 均为0~1的长宽比例值。
8
9    // 图像分割时才有
10    cv::Mat mask;  // 0, 1 的mask
11    std::string mask_rle;  // Run Length Encoding,游程编码的mask
12};

关于矩形坐标

x1 图片宽度 = 检测框的左上角的横坐标 y1 图片高度 = 检测框的左上角的纵坐标 x2 图片宽度 = 检测框的右下角的横坐标 y2 图片高度 = 检测框的右下角的纵坐标

以上字段可以参考demo文件中使用opencv绘制的逻辑进行解析

http服务

1. 开启http服务

http服务的启动参考demo_serving.cpp文件。

C++
1 /**
2     * @brief 开启一个简单的demo http服务。
3     * 该方法会block直到收到sigint/sigterm。
4     * http服务里,图片的解码运行在cpu之上,可能会降低推理速度。
5     * @tparam ConfigT
6     * @param config
7     * @param host
8     * @param port
9     * @param service_id service_id  user parameter, uri '/get/service_id' will respond this value with 'text/plain'
10     * @param instance_num 实例数量,根据内存/显存/时延要求调整
11     * @return
12     */
13    template<typename ConfigT>
14    int start_http_server(
15            const ConfigT &config,
16            const std::string &host,
17            int port,
18            const std::string &service_id,
19            int instance_num = 1);

2. 请求http服务

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

URL中的get参数:

参数 说明 默认值
threshold 阈值过滤, 0~1 如不提供,则会使用模型的推荐阈值

HTTP POST Body即为图片的二进制内容(无需base64, 无需json)

Python请求示例

Python
1import requests
2
3with open('./1.jpg', 'rb') as f:
4    img = f.read()
5    result = requests.post(
6	    'http://127.0.0.1:24401/',
7	    params={'threshold': 0.1},
8	    data=img).json()

Java请求示例参考这里

http 返回数据

字段 类型说明 其他
error_code Number 0为成功,非0参考message获得具体错误信息
results Array 内容为具体的识别结果。其中字段的具体含义请参考接口使用-返回格式一节
cost_ms Number 预测耗时ms,不含网络交互时间

返回示例

JSON
1{
2    "cost_ms": 52,
3    "error_code": 0,
4    "results": [
5        {
6            "confidence": 0.94482421875,
7            "index": 1,
8            "label": "IronMan",
9            "x1": 0.059185408055782318,
10            "x2": 0.18795496225357056,
11            "y1": 0.14762254059314728,
12            "y2": 0.52510076761245728
13        },
14        {
15            "confidence": 0.94091796875,
16            "index": 1,
17            "label": "IronMan",
18            "x1": 0.79151463508605957,
19            "x2": 0.92310667037963867,
20            "y1": 0.045728668570518494,
21            "y2": 0.42920106649398804
22        }
23      ]
24}

多线程预测

Jetson 系列 SDK 支持多线程预测,创建一个 predictor,并通过 PREDICTOR_KEY_GTURBO_MAX_CONCURRENCY 控制所支持的最大并发量,只需要 init 一次,多线程调用 infer 接口。需要注意的是多线程的启用会随着线程数的增加而降低单次 infer 的推理速度,建议优先使用 batch inference 或权衡考虑使用。

已知问题

1. 多线程时图片按线程分配不均 或 不同batch size的图片交叉调用infer接口时,部分结果错误

A:EasyDL图像分类高精度模型在有些显卡上可能存在此问题,可以考虑填充假图片数据到图片比较少的线程或batch以使得infer间的图片绝对平均。

2. 显存持续增长或遇到 terminate called after throwing an instance of 'std::runtime_error' what(): Failed to create object

A:如果遇到此问题,请确认没有频繁调用 init 接口,通常调用 infer 接口即可满足需求。

3. 开启 fp16 后,预测结果错误

A:不是所有模型都支持 fp16 模式。目前已知的不支持fp16的模型包括:EasyDL图像分类高精度模型。目前不支持的将会在后面的版本陆续支持。

4. 部分模型不支持序列化

A:针对JetPack4.4、4.5版本,部分模型无法使用序列化,如已知的BML的MobileNetV1-SSD和物体检测高性能模型。需要每次加载模型的时候编译模型,过程会比较慢。此问题将在后续JetPack版本中修复。目前JetPack4.6版本SDK已修复该问题。

开发板信息查询与设置

查询L4T或JetPack版本

查询JetPack版本信息,可以通过下面这条命令先查询L4T的版本。

Shell
1# 在终端输入如下命令并回车
2$ head -n 1 /etc/nv_tegra_release
3# 就会输出类似如下结果
4$ # # R32 (release), REVISION: 4.3, GCID: 21589087, BOARD: t210ref, EABI: aarch64, DATE: Fri Jun 26 04:38:25 UTC 2020

从输出的结果来看,板子当前的L4T版本为R32.4.3,对应JetPack4.4。 注意,L4T的版本不是JetPack的版本,一般可以从L4T的版本唯一对应到JetPack的版本,下面列出了最近几个版本的对应关系:

Shell
1L4T R32.6.1  --> JetPack4.6
2L4T R32.5.1  --> JetPack4.5.1
3L4T R32.5    -->  JetPack4.5
4L4T R32.4.3  -->  JetPack4.4
5L4T R32.4.2  -->  JetPack4.4DP
6L4T R32.2.1  -->  JetPack4.2.2
7L4T R32.2.0  -->  JetPack4.2.1

功率模式设置与查询

不同的功率模式下,执行AI推理的速度是不一样的,如果对速度需求很高,可以把功率开到最大,但记得加上小风扇散热~

Shell
1# 1. 运行下面这条命令可以查询开发板当前的运行功率模式
2$ sudo nvpmodel -q verbose
3# $ NV Power Mode: MAXN
4# $ 0
5# 如果输出为MAXN代表是最大功率模式
6
7# 2. 若需要把功率调到最大,运行下面这条命令
8$ sudo nvpmodel -m 0
9
10# 如果你进入了桌面系统,也可以在桌面右上角有个按钮可以切换模式
11
12# 3. 查询资源利用率
13$ sudo tegrastats

FAQ

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

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

2. 运行SDK报错 Authorization failed

日志显示 Http perform failed: null respond 在新的硬件上首次运行,必须联网激活。

SDK 能够接受HTTP_PROXY 的环境变量通过代理处理自己的网络请求。如

Bash
1export HTTP_PROXY="http://192.168.1.100:8888"
2./easyedge_demo ...

3. 使用libcurl请求http服务时,速度明显变慢

这是因为libcurl请求continue导致server等待数据的问题,添加空的header即可

Bash
1headers = curl_slist_append(headers, "Expect:");

4. 运行demo时报找不到libeasyedge_extension.so

需要export libeasyedge_extension.so所在的路径,如路径为/home/work/baidu/cpp/lib,则需执行:

Shell
1export LD_LIBRARY_PATH=/home/work/baidu/cpp/lib:${LD_LIBRARY_PATH}

或者在编译完后执行如下命令将lib文件安装到系统路径:

Shell
1sudo make install

如不能安装,也可手动复制lib下的文件到/usr/local/lib下。

5. 运行demo时报如下之一错误

Bash
12020-12-17 16:15:07,924 INFO [EasyEdge] 547633188880 Compiling model for fast inference, this may take a while (Acceleration)
2Killed
3
4# 或
5
62020-12-17 16:15:07,924 INFO [EasyEdge] 547633188880 Build graph failed

请适当降低PREDICTOR_KEY_GTURBO_MAX_BATCH_SIZE和PREDICTOR_KEY_GTURBO_MAX_CONCURRENCY的值后尝试。

6. 运行有损压缩加速的模型,运算精度较标准模型偏低

首先请保证数据集不会太小。其次可以通过将模型目录RES中的calibrationtable移除,并通过将PREDICTOR_KEY_GTURBO_FP16设置为true,使用FP16的运算精度重新评估模型效果。若依然不理想,可将calibrationtable移除并将PREDICTOR_KEY_GTURBO_FP16设置为false,从而使用更高精度的FP32的运算精度。

上一篇
视觉任务模型部署整体说明
下一篇
如何获取视觉任务软硬一体产品