v2.0.0
Release Note
重点功能
-
新增 CUDA 预测支持, 详情参考here,兼容模型列表如下:
- INT8 量化模型
- yolov3,P4下性能为30ms/image.
- FP32模型
- yolov3
- alexnet
- unet
- INT8 量化模型
-
支持 Nvidia Jetson TX2 的CUDA 编译和部署,支持的模型如下:
- yolov3 fp32
- alexnet fp32
- unet fp32
-
初步支持 X86 CPU 预测部署,支持 inception v4, googlenet, resnet50 等3个模型,详情参考 here
-
增加 Python API 支持,已经在 ARM Linux 和 CUDA 上验证,详细参考 here
-
支持根据模型极致裁剪动态库,可以极大压缩单个模型的手机端ARM CPU预测库,详情参考 here.
-
ARM CPU INT8 量化模型预测支持加强,增加以下模型支持
- shufflenetv2
- mobilenet-ssd
- vgg16
- googlenet
-
ARM CPU FP32 新增如下模型支持
- transformer
- facebox
- blazeface
transformer 开源模型待发布;facebox和blazeface的模型可从Paddle/Models仓库下获取,得到的训练格式的模型,还需转换成inference格式。以 blazeface_original
为例,转换过程如下
git clone https://github.com/PaddlePaddle/models.git
cd mode/PaddleCV/PaddleDetection
pip install -r requirements.txt
# 将下载的模型放到yml指定目录
mkdir -p output/blazeface/ && cd output/blazeface/
wget https://paddlemodels.bj.bcebos.com/object_detection/blazeface_original.tar
tar -xvf blazeface_original.tar && mv blazeface_original model_final && cd ../../
# 模型格式转换
export PYTHONPATH=`pwd`:$PYTHONPATH
python tools/export_model.py \
--output_dir=_inference_model_dir> --config=configs/face_detection/blazeface.yml
基础功能
-
接口去除 prefered place。框架中移除prefered place 概念及相应接口,改为使用 place 在valid place列表中的排序来标识用户对执行place偏好,在valid place列表中排序越靠前代表对此place的偏好越强。#2192
-
增加算子版本,与 Paddle 训练版本对应 #2243
- 对齐 Lite 与 Paddle 的框架 ProtoBuf 数据结构定义,
- 添加设定算子版本的接口,算子版本号与 Paddle 框架版本号格式一致(三位小数组成的字符串,如 "1.5.0"),在注册时进行设定。
示例:
REGISTER_LITE_KERNEL(leaky_relu, kCUDA, kFloat, kNCHW,
paddle::lite::kernels::cuda::LeakyReluCompute,
def)
.BindInput("X", {LiteType::GetTensorTy(TARGET(kCUDA))})
.BindOutput("Out", {LiteType::GetTensorTy(TARGET(kCUDA))})
.SetVersion("1.5.0")
.Finalize();
- 运行期间跳过feed fetch op,减少硬件之间的数据拷贝
- 新增包括
GetInputNames
等4个API接口,详细可以参考 C++ API List - 新增CUDA GPU op
- yolobox
- transpose
- concat
- nearest_interp
- elementwise_add
- scale
- dropout
- softmax
- pool2d
- bilinear_interp
- mul
- conv2d
编译
-
ARM Linux在full publish模式下增加生成动态链接库,tiny publish模式下不再生成静态库,而改为生成动态链接库。
-
Mac环境下支持
full_publish
编译(Android),目前 Mac下可以完整支持tiny_publish
和full_publish
两种预测库的编译模式,详情可参考 源码编译指南- 需要将mac的cmake版本设置为cmake 3.10
- 如果出现问题:
Too many open files
,使用下面命令修改最大可打开文件数ulimit -n 1024
- 注意:
full_publish
编译时,项目不能有中文路径
性能
文档
Demo
- 增加树莓派案例:ARM Linux 图像识别和目标检测DEMO,支持摄像头采集图像,并提供armv7hf&armv8预编译的动态链接库。
Bug修复
- 修复加载 naive buffer 模型内存占用过大问题
- naive buffer 格式的vgg16、inceptionv4、yolov3 模型均验证通过
- 修复
model_optimize_tool
优化后模型变大问题 - 修复
static_pick_kernel_pass
中,没有初始化kernel_pick_factors_
#2158 - 修复
type_layout_cast_pass
中,选中 kernel 的变量名写错 #2158 - 修复
op_registry
中注册 kernel 时,没有考虑 layout #2158 - 修复conv transpose bug #2165
- 修复arm fc多batch计算错误#2244
- 修复arm int8 gemv bug #2249
附件说明
附件中包含了编译好的预测库,不同选项组合采用后缀字段表示,重要字段如下:
- android/ios: 平台
- armv7/armv8: ARM 指令集版本
- c++_shared/c++_static: C++ STL 采用动态链接还是静态链接,前者自身小但需额外拷贝 STL 的动态库
- tiny_publish/full_publish: 是否采用轻量化部署,前者部署体积很小,但需要配合
model_optimize_tool
; 后者可以直接用于 原始 Paddle 模型; 两者性能一致 - with_extra: 除了基础算子,额外编译NLP、控制流及其他所有算子