高性能轻量化的图像处理系统——FlyCV

news/2024/7/21 6:47:17 标签: 图像处理, 计算机视觉, 人工智能, python

大多数从事计算机视觉相关岗位的人基本上都使用过OpenCV。OpenCV于2000年发布首个开源版本,随着深度学习技术的深入,其在视觉产品工程化落地过程中产生新的问题。例如在移动端设备上,因包体积较大,占用储存空间和APP网络下载时间。在算力较低的AIoT设备上,性能表现不好。因此,百度视觉团队萌生了开发一个高性能图像处理库的想法。

FlyCV是百度视觉团队内部孵化高性能轻量化的图像处理系统。该系统基于飞桨平台开源发布,利用自身高性能、轻量化、跨平台的三大核心优势,帮助更多企业开发者提升AI视觉产品开发的综合体验。

2f524326b40f662e5a6b1d0fc9783f1a.pngFlyCV的应用场景及解决的问题

几乎所有计算机视觉任务都需要进行图像处理,常用操作包括缩放、旋转、抠图等。FlyCV主要专注于图像处理领域,着重解决了在算力、资源受限场景下的图像处理性能问题,并改善对国产化芯片的支持情况,提升适配效率,大幅优化产品落地时面临的库体积和兼容性等问题。

385438221c9948e1a1acd975519d5055.png

53daa1f4d4ce5b49e1a4741528d378c1.pngFlyCV的核心优势

当前,FlyCV的核心优势是:

高性能。FlyCV重点优化了ARM端的性能,主流算子在性能上全面领先OpenCV。

轻量化。相比OpenCV,FlyCV体积缩减90%,通过粗细双层模块化设计,能够进行算子级别的编译选项控制,实现按需编译,生成最小库文件。对于常用的图像处理操作,使用OpenCV动态库需要15.9MB,而使用FlyCV只需要1.3MB。

跨平台。目前FlyCV支持5类主流操作系统,覆盖移动端、嵌入式、PC设备。

ee36c360fc44a43eb11a5c29fea1026d.png

下面展开来说说这三点核心优势的详情。

17a056e9b1090a8f1deeb4f34d80dbc6.png高性能

如下方动图所示,演示动图采用高通骁龙636芯片手机,分别使用FlyCV和OpenCV对14张1080P的图片进行三项图像处理操作,并计算平均耗时进行对比。执行操作分别是颜色空间转换、仿射变换和图像缩放。运行结果显示,FlyCV平均耗时29.6ms,OpenCV平均耗时64.91ms。在三项操作中,FlyCV比OpenCV性能提升1倍。

ebf97afb36ab51e1072db966116c44ac.gif

如下图所示,左侧柱状图显示的是低、中、高三类算力设备的性能测评数据,并对18类常用算子的平均性能进行统计。运行结果显示,在高算力骁龙888芯片上,FlyCV算子性能提升了36%。在中算力骁龙835芯片上,算子性能提升了1.77倍。在低算力骁龙625芯片上,FlyCV算子性提升了4.38倍。

77a72f197edd33ff6350d4a9b9868104.png

右侧表格显示的是当采用骁龙835芯片测评设备,处理1080P的图片数据时,FlyCV性能提升排名前十的算子。相比于OpenCV,FlyCV算子性能提升超过61%,最高可达9倍。例如融合算子(bgr_to_rgba_with_mask),OpenCV耗时10毫秒以上,但FlyCV仅耗时1.2毫秒,性能提升明显。

为了提升性能,百度采用了一系列的优化方法。

da290d5b1033e1c1a644a67e6ac9c14d.png

ARM端

FlyCV结合32位、64位汇编进行优化,使用NEON指令进行并行计算,同时布局ARM最新V9指令集SVE2。实际上,使用汇编不一定会提升速度,因为像C++编译器已完成很多指令优化工作,所以在开发汇编程序时,工程师还需要做好很多方面的设计,比如数据分块、分组、预取等,进而极大提升cache的命中和流水线的并行度。在这方面,FlyCV经过长时间打磨,已经有了一些成熟的积累。

X86平台

FlyCV开展了AVX/SSE指令集的优化工作。

算子融合方面

FlyCV通过联合多个操作、减少数据传递、提升计算并行度等方法,进一步缩小耗时,目前已支持5+综合算子。

异构计算方面

FlyCV正在开展类似硬件加速、GPU加速的建设。

0786e51cb40327002c8fda243f8dfc8f.png轻量化

目前,FlyCV已应用在20多款百度视觉产品,在体积缩减90%以上的同时,大幅提升性能表现。

如下图所示,FlyCV在人脸离线识别SDK、数字人方案、度目智能门禁机等软件设备上都显著提升产品性能,特别是在文字识别和小度机器人这类产品中,在体积减小的同时,性能实现了提升。其中,具体的体积缩减大小与集成FlyCV的方式有关,如果使用动态库或静态库进行集成,结果会略有不同。

17bf9f6f2fdf678fb03339e3b7e021c3.png

4ec90c9bb2143f4576e7b86ccea025c4.png

跨平台

FlyCV支持五类主流操作系统,覆盖移动端、嵌入式、PC等设备。

在系统架构最上层,FlyCV实现了6大类算子应用,比如图像转换、图像绘制、图像求值、多媒体IO、数学运算和融合算子。其核心模块主体基于C++,实现了定制汇编模块,并在内部设计集成了多线程框架和硬件加速等方案。

f84d2a43d2c1640c9a0eba922b645c2f.png

目前,FlyCV在GitHub上提供源码、编译工具和Docker镜像,用户可以下载预编译库,直接集成。同时FlyCV还提供一些文档、Demo示例工程,并在飞桨FastDeploy部署工具中集成,供用户使用。

f0d1aa9e3a577d656b1572fc87f621dd.png

GitHub项目地址

http://github.com/PaddlePaddle/FlyCV


http://www.niftyadmin.cn/n/28231.html

相关文章

docker推送镜像至阿里私有镜像仓库

文章目录一、注册阿里私有镜像仓库二、将公共镜像推送至私有镜像仓库1、首先拉取到mysql镜像2、登录阿里云Docker Registry(这里的信息要更换成自己的)3、将mysql镜像推送至Registry4、查看5、拉取镜像三、将正在启动的容器导出并推送至私有仓库1、将启动…

企业级Jenkins实践

1. 概述2. Jenkins部署 2.1. Jenkins容器镜像构建2.2. 部署 3. 其他组件集成 3.1. sonarqube3.2. gitlab3.3. harbor 4. 构建运行时 4.1. 动态slave4.2. 定制化镜像4.3. pod启动加速 5. CI构建 5.1. 构建改造5.2. 缓存5.3. DID5.4. buildx5.5. DOCKER_BUILDKIT 6. 落地规划7. 附…

单目标应用:蜣螂优化算法DBO与麻雀搜索算法SSA求解无人机三维航迹规划(提供Matlab代码)

一、无人机三维航迹规划 三维航迹规划是无人机在执行任务过程中的非常关键的环节,三维航迹规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径最短约束 无人机航迹规划的首要目标是寻找起飞点和目标点…

sql概述和数据规范

1、sql概述 SQL (Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交由IBM 上世纪70年代开发出来。后由美国国家标准局 (ANSI)开始着手制定SQL标准,先后有 SQL-86道,SQL-89,SQ…

PR基础知识

sh什么是帧,什么是帧速率,什么是方形像素? 什么叫场序? # 时长 s时i长为视频时间得长度,基本单位为秒。但是在PR软件中。有更为精准得时间单位计算为帧。也就是说把1秒分为若干份。一份就是一帧。一帧也就可以理解为一张图片。 s所以在PR…

postman接口关联

有两种方法,使用json提取器实现接口关联,还有使用正则表达式提取器实现接口关联。方法一:使用json提取器实现接口关联第一个接口://使用json提取器提取contractID、documentID//把返回的字符串格式的数据转换成对象的形式var resu…

微电网(风、光、储能、需求响应)【Simulink 仿真实现】

目录 1 展现 2 典型几个介绍 2.1 采用PR的三相逆变器电压控制 2.2 太阳能直流微电网系统 2.3 主电网故障时的交流微电网性能 2.4 混合光伏、双馈发电和电池能源的微电网集成 3 写在后面 4 完整资源 1 展现 随便打开一个,就以第一个(采用PID的三…

C++ Primer笔记——默认移动操作、移动迭代器、左右值引用成员函数、标准库仿函数、function包装器

目录 一.P476 合成的移动操作 二.P480 移动迭代器 三.P483 右值和左值引用成员函数 四.P510 标准库定义的仿函数 五.P512 标准库function类型(包装器) 一.P476 合成的移动操作 什么时候会有默认的移动构造和移动赋值函数,需满足以下几点…