高性能图像处理的新利器——FlyCV
大多数从事计算机视觉相关岗位的人基本上都使用过 OpenCV。OpenCV 于 2000 年发布首个开源版本,随着深度学习技术的深入,其在视觉产品工程化落地过程中产生新的问题。例如在移动端设备上,因包体积较大,占用储存空间和 APP 网络下载时间。在算力较低的 AIoT 设备上,性能表现不好。因此,百度视觉团队萌生了开发一个高性能图像处理库的想法。
FlyCV 是百度视觉团队内部孵化高性能轻量化的图像处理系统。该系统基于飞桨平台开源发布,利用自身高性能、轻量化、跨平台的三大核心优势,帮助更多企业开发者提升 AI 视觉产品开发的综合体验。
FlyCV 的应用场景及解决的问题
几乎所有计算机视觉任务都需要进行图像处理,常用操作包括缩放、旋转、抠图等。FlyCV 主要专注于图像处理领域,着重解决了在算力、资源受限场景下的图像处理性能问题,并改善对国产化芯片的支持情况,提升适配效率,大幅优化产品落地时面临的库体积和兼容性等问题。
FlyCV 的核心优势
当前,FlyCV 的核心优势是:
高性能。FlyCV 重点优化了 ARM 端的性能,主流算子在性能上全面领先 OpenCV。
轻量化。相比 OpenCV,FlyCV 体积缩减 90%,通过粗细双层模块化设计,能够进行算子级别的编译选项控制,实现按需编译,生成最小库文件。对于常用的图像处理操作,使用 OpenCV 动态库需要 15.9MB,而使用 FlyCV 只需要 1.3MB。
跨平台。目前 FlyCV 支持 5 类主流操作系统,覆盖移动端、嵌入式、PC 设备。
下面展开来说说这三点核心优势的详情。
高性能
如下方动图所示,演示动图采用高通骁龙 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 倍。
右侧表格显示的是当采用骁龙 835 芯片测评设备,处理 1080P 的图片数据时,FlyCV 性能提升排名前十的算子。相比于 OpenCV,FlyCV 算子性能提升超过 61%,最高可达 9 倍。例如融合算子(bgr_to_rgba_with_mask),OpenCV 耗时 10 毫秒以上,但 FlyCV 仅耗时 1.2 毫秒,性能提升明显。
为了提升性能,百度采用了一系列的优化方法。
ARM 端
FlyCV 结合 32 位、64 位汇编进行优化,使用 NEON 指令进行并行计算,同时布局 ARM 最新 V9 指令集 SVE2。实际上,使用汇编不一定会提升速度,因为像 C++编译器已完成很多指令优化工作,所以在开发汇编程序时,工程师还需要做好很多方面的设计,比如数据分块、分组、预取等,进而极大提升 cache 的命中和流水线的并行度。在这方面,FlyCV 经过长时间打磨,已经有了一些成熟的积累。
X86 平台
FlyCV 开展了 AVX/SSE 指令集的优化工作。
算子融合方面
FlyCV 通过联合多个操作、减少数据传递、提升计算并行度等方法,进一步缩小耗时,目前已支持 5+综合算子。
异构计算方面
FlyCV 正在开展类似硬件加速、GPU 加速的建设。
轻量化
目前,FlyCV 已应用在 20 多款百度视觉产品,在体积缩减 90%以上的同时,大幅提升性能表现。
如下图所示,FlyCV 在人脸离线识别 SDK、数字人方案、度目智能门禁机等软件设备上都显著提升产品性能,特别是在文字识别和小度机器人这类产品中,在体积减小的同时,性能实现了提升。其中,具体的体积缩减大小与集成 FlyCV 的方式有关,如果使用动态库或静态库进行集成,结果会略有不同。
跨平台
FlyCV 支持五类主流操作系统,覆盖移动端、嵌入式、PC 等设备。
在系统架构最上层,FlyCV 实现了 6 大类算子应用,比如图像转换、图像绘制、图像求值、多媒体 IO、数学运算和融合算子。其核心模块主体基于 C++,实现了定制汇编模块,并在内部设计集成了多线程框架和硬件加速等方案。
目前,FlyCV 在 GitHub 上提供源码、编译工具和 Docker 镜像,用户可以下载预编译库,直接集成。同时 FlyCV 还提供一些文档、Demo 示例工程,并在飞桨 FastDeploy 部署工具中集成,供用户使用。
GitHub 项目地址
评论