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

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

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

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

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

高性能轻量化的图像处理系统——FlyCV_第1张图片

53daa1f4d4ce5b49e1a4741528d378c1.pngFlyCV的核心优势

当前,FlyCV的核心优势是:

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

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

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

高性能轻量化的图像处理系统——FlyCV_第2张图片

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

17a056e9b1090a8f1deeb4f34d80dbc6.png高性能

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

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

高性能轻量化的图像处理系统——FlyCV_第3张图片

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

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

高性能轻量化的图像处理系统——FlyCV_第4张图片

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的方式有关,如果使用动态库或静态库进行集成,结果会略有不同。

高性能轻量化的图像处理系统——FlyCV_第5张图片

4ec90c9bb2143f4576e7b86ccea025c4.png

跨平台

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

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

高性能轻量化的图像处理系统——FlyCV_第6张图片

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

高性能轻量化的图像处理系统——FlyCV_第7张图片

GitHub项目地址

http://github.com/PaddlePaddle/FlyCV

你可能感兴趣的:(图像处理,计算机视觉,人工智能,python)