精度96.63%、FPS 63,SOTA人像分割方案PP-HumanSeg v2开箱即用!

2023-12-28 17:10

本文主要是介绍精度96.63%、FPS 63,SOTA人像分割方案PP-HumanSeg v2开箱即用!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

人工智能技术的快速发展,给我们的生活和工作带来了各种有趣便利的体验。比如在视频通话和观看直播时的背景虚化、弹幕穿人等神奇的功能,给我们的视频通话及影音观看带来了更优质的体验和多维的乐趣。那这是靠什么AI黑科技实现的呢?

答案就是咱们本篇的主角–人像分割。

图片

图1 PP-HumanSeg v2人像效果展示图

人像分割是将人物和背景在像素级别进行区分,通常可以分为半身人像的肖像分割和针对全身人像的通用人像分割两类。借助于深度学习技术,人像分割的效果和效率都得到快速突破,但是复杂、快速变换的人像边缘的分割精确性,以及即时的预测速度,仍是业界高手持续发力优化的地方。

而飞桨PaddleSeg此次升级发布的PP-HumanSeg v2人像分割方案,以96.63%的mIoU精度,手机端15.86ms的推理耗时,再次刷新开源人像分割算法SOTA指标。该方案可与商业方案媲美,而且支持零成本、开箱即用!

相比PP-HumanSeg v1,肖像分割模型的推理速度提升45.5%,mIoU精度提升3.03%,可视化效果更佳。通用人像分割模型的推理速度最高提升5.7%,mIoU精度最高提升6.5%。

不仅如此,PP-HumanSeg v2开源了PP-HumanSeg-14K数据集,其中包含14000张室内场景半身人像的图片。同时在易用性和部署全流程打通方面,PP-HumanSeg v2也做足了功课,致力提供更佳的开发体验。

还等什么,还不赶紧尝试将PP-HumanSeg v2方案应用到人像分割的业务产品中!

点击阅读原文获得链接

★ 欢迎Star关注 ★

https://github.com/PaddlePaddle/PaddleSeg/tree/release/2.6/contrib/PP-HumanSeg

图片

PP-HumanSeg v2

人像分割方案详细解析

PP-HumanSeg v2人像分割方案提供了肖像分割、通用人像分割、全流程训练和部署的能力。

肖像分割模型

肖像分割是对半身人像的图片进行分割,主要适用于视频通话和会议等场景。由于广泛部署到Web、手机和边缘设备,肖像分割在兼顾分割精度的前提下,需要具有极快的推理速度。PP-HumanSeg v2发布了全新肖像分割模型,主要做了三点改进:设计新的模型结构、使用迁移学习预训练、调整输入图像尺寸。

我们选择PaddleSeg近期发布的超轻量级系列语义分割模型作为基础,进行特定优化得到肖像分割模型,整体结构如图2所示。首先,考虑到模型的算量要求很高,我们使用MobileNetV3作为骨干网络提取多层特征。分析发现MobileNetV3的参数主要集中在最后一个Stage,在不影响分割精度的前提下,我们只保留MobileNetV3的前四个Stage,顺利减少了68.6%的参数量。然后,对于16倍下采样特征图,我们使用SPPM模块汇集全局上下文信息。最后,我们使用三个Fusion模块不断融合深层语义特征和浅层细节特征。其中,最后一个Fusion模块再次汇集不同层次的特征图,输出分割结果。

图片

图2 PP-HumanSeg v2肖像分割模型结构

对于肖像分割任务,数据过少是影响分割精度的重要因素。PaddleSeg开源的PP-HumanSeg-14K数据集,有14000张室内场景半身人像的图片,一定程度缓解了数据过少的问题。针对该问题,我们进一步使用迁移学习的方法来提高模型的分割精度和泛化能力。首先,我们在大规模的通用人像分割数据集上进行预训练,然后再针对PP-HumanSeg-14K半身人像数据集进行微调。

大家通常会调整模型的深度和宽度来平衡分割精度和推理速度,而模型的输入尺寸也是一个需要重视的变量。手机和电脑端最常见的拍摄尺寸是1028x720,PP-HumanSeg v1肖像分割模型推荐将图片缩放为398x224进行预测。为了追求极致的推理速度,PP-HumanSeg v2肖像分割模型的最佳输入尺寸进一步缩小为256x144,将推理速度提升了52%(相比输入尺寸398x224)。更小的输入尺寸,不可避免减少了输入信息量,但是得益于PP-HumanSeg v2模型具有更强的学习能力,最终也有不错的分割效果。

基于上述改进,PP-HumanSeg v2肖像分割模型对比PP-HumanSeg v1,推理速度(手机端)提升45.5%,mIoU精度提升3.03%,可视化效果更佳。此外,该模型支持手机拍摄的横屏和竖屏输入图像,针对室内场景可以开箱即用。

图片

通用人像分割模型

针对通用人像分割任务,我们使用PaddleSeg的SOTA模型在大规模数据集上训练,发布了两个型号的PP-HumanSeg v2通用人像分割模型。PP-HumanSeg v2-Lite通用人像分割模型,使用和肖像分割模型类似的结构,适合部署在手机端ARM CPU上。相比PP-HumanSeg v1-Lite模型,它的精度mIoU提升6.5%。PP-HumanSeg v2-Mobile通用人像分割模型,使用PaddleSeg自研的PP-LiteSeg模型结构,适合部署在服务器端GPU上。相比PP-HumanSeg v1-Mobile模型,它的精度mIoU提升1.49%,推理速度提升5.7%。

由于通用人像分割任务的场景变化很大,大家需要根据实际场景评估PP-HumanSeg通用人像分割模型的精度。如果满足业务要求,大家可以直接使用。如果不满足业务要求,大家可以基于PP-HumanSeg通用人像分割模型进行进一步优化,可以达到事半功倍的效果。

图片

全流程训练和部署

PP-HumanSeg v2人像分割方案不仅开源了更佳的模型,还提供了二次训练和部署的功能代码。使用提供的肖像分割和通用人像分割配置文件,大家只需要准备好数据即可训练。模型支持在不同硬件上进行应用部署,包括NVIDIA GPU、X86 CPU、ARM CPU、浏览器Web。

此外,我们对模型预测结果使用形态学后处理操作,滤除背景干扰,保留人像主体。如下图所示,原始预测图像中每个像素数值表示前景的概率。首先使用阈值操作滤除概率较小的像素,然后使用腐蚀和膨胀操作消除细条,腐蚀操作的核尺寸小于膨胀操作,掩码图像作用在原始预测结果上,得到最终预测的结果。可见,通过形态学后处理,可以有效提升人像分割的可视化效果。

图片

图 3 形态学后处理的分割图像

在线体验工具

贴心的PaddleSeg团队还为大家准备了在线体验PP-HumanSeg v2人像分割能力的小工具,支持在线上传图片即可完成人像抠图,并下载效果图。

图片

图4 PP-HumanSeg v2在线网站体验效果图

加入技术交流群

加入PaddleSeg PP-HumanSeg v2技术交流群,还有更多惊喜福利等你来拿喔!

入群福利

福利一:获取PP-HumanSeg-14K半身人像数据集

福利二:获取PaddleSeg详解本次升级内容的直播课链接

福利三:获取PaddleSeg团队整理的重磅学习礼包,包括:

  • 语义分割场景应用合集:包括Matting扣图、交互式分割、人像分割、3D医学图像分割等10+垂类模型,覆盖通用、工业、互娱、医疗的主要分割垂类应用

  • PaddleSeg历次发版直播课程视频

  • PaddleSeg实操产业范例:车道线分割、工业瑕疵检测等10+全流程项目

关注【飞桨PaddlePaddle】公众号
获取更多技术内容~

这篇关于精度96.63%、FPS 63,SOTA人像分割方案PP-HumanSeg v2开箱即用!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546652

相关文章

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计