亲身体验使用RMGB v2.0移除图像背景

亲身体验使用RMGB v2.0移除图像背景

图像分割模型为完成不同维度的任务提供了方法。开源空间已经监督了不同的计算机视觉任务及其应用。去除背景是模型多年来不断探索的另一项图像分割任务。

Bria 的 RMGB v2.0 是一种最先进的模型,能以极高的精度和准确性进行背景去除。该模型是对旧版本 RMGB 1.4 的改进。该开源模型在不同的基准测试中都具有准确性、高效性和多功能性。

该模型可应用于从游戏到图片素材生成等多个领域。它的功能还与其训练数据和架构有关,使其能够在各种环境下运行。

  • 了解 BraiAI 的 RMGB v2.0 模型的功能和先进性。
  • 探索模型架构以及 BiRefNet 如何增强背景去除效果。
  • 了解如何为图像分割任务设置和运行 RMGB v2.0。
  • 了解 RMGB v2.0 在游戏、电子商务和广告领域的实际应用。
  • 分析 RMGB v1.4 在边缘检测和准确性方面的性能改进。

RGMB如何工作?

该模型的工作原理很简单。它将图像作为输入(各种格式,如 Jpeg、PNG 等)。处理图像后,模型会输出一个分割后的图像区域,去除背景或前景。

RGMB 还能提供掩码,以便进一步处理图像或添加新的背景。

RGMB v2.0的性能基准

RGMB v2.0 在性能和准确性方面都优于其前身 RGMB v1.4。几张图像的测试结果突出显示了 RGMB v2.0 如何呈现更干净的背景。

虽然早期版本的性能不错,但 RGMB v2.0 在理解复杂场景和边缘细节方面树立了新的标准,同时全面改进了背景去除效果。

点击以下链接,测试早期版本与最新版本。

RGMB v2.0的模型架构

RMGB 由 BRAI AI 开发,基于 BiRefNet 机制。该框架是一种可执行涉及图像-背景分离的高分辨率任务的架构。

RGMB v2.0的模型架构

这种方法在高分辨率还原模型中结合了两个来源的互补表征。这种方法将对场景的整体理解(一般定位)与详细的边缘信息(局部)相结合,从而实现清晰、精确的边界检测。

RGMB v2.0 采用两阶段模型来利用 BiRefNet 架构:定位模块和复原模块。

定位模块生成代表图像主要区域的一般语义图。该组件可确保模型准确表达图像的结构。有了这个框架,模型就能在考虑背景的情况下确定图像中物体的位置。

另一方面,还原模块有助于还原图像中物体的边界。与第一阶段在较低分辨率下生成语义图相比,该模块在高分辨率下执行这一过程。

还原模块分为两个阶段:第一阶段是原始参考,即原始图像的像素图,提供背景情况。第二个阶段是梯度参考,提供细微边缘的细节。梯度参考还能为边界清晰、颜色复杂的图像提供背景信息,从而帮助提高准确性。

这种方法在物体分离方面效果极佳,尤其是在高分辨率图像中。BriRefNet 架构和模型训练数据集可在各种基准测试中提供最佳结果。

如何运行该模型

即使在低资源环境下,您也可以运行该模型的推理。只需使用一张简单的背景图片,就能完全实现精确分离。

让我们深入了解如何运行 RGMB v2.0 模型;

第 1 步:准备环境

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install kornia
pip install kornia
pip install kornia

安装 Konia 与这项任务息息相关,因为它是各种计算机视觉模型必不可少的 Python 库。Konia 是基于 PyTorch 构建的可微分计算机视觉任务,可为图像处理、几何变换、过滤和深度学习应用提供功能。

第 2 步:导入必要的库

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from PIL import Image
import matplotlib.pyplot as plt
import torch
from torchvision import transforms
from transformers import AutoModelForImageSegmentation
from PIL import Image import matplotlib.pyplot as plt import torch from torchvision import transforms from transformers import AutoModelForImageSegmentation
 from PIL import Image
import matplotlib.pyplot as plt
import torch
from torchvision import transforms
from transformers import AutoModelForImageSegmentation

这些库都是运行该模型所必需的。PIL 在加载和打开图像等图像处理任务中总能派上用场,而 matpotlib 则是显示图像和绘制图表的好帮手。

torch 能将图像转换成与深度学习模型兼容的格式。最后,我们使用 AutoModelForIMageSegmentation,它允许我们使用预训练模型进行图像分割。

第 3 步:加载预训练模型

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
model = AutoModelForImageSegmentation.from_pretrained('briaai/RMBG-2.0', trust_remote_code=True)
torch.set_float32_matmul_precision(['high', 'highest'][0])
model.to('cuda')
model.eval()
model = AutoModelForImageSegmentation.from_pretrained('briaai/RMBG-2.0', trust_remote_code=True) torch.set_float32_matmul_precision(['high', 'highest'][0]) model.to('cuda') model.eval()
model = AutoModelForImageSegmentation.from_pretrained('briaai/RMBG-2.0', trust_remote_code=True)
torch.set_float32_matmul_precision(['high', 'highest'][0])
model.to('cuda')
model.eval()

这段代码加载了预先训练好的后台移除模型,然后应用了 trust_remote_code=True,因为它允许执行自定义的 Python 代码。下一行使用矩阵乘法优化性能。

最后,我们将模型移动到可用的 GPU 上,为推理做好准备。

第 4 步:图像预处理

这段代码定义了图像处理阶段,将图像大小调整为 1024 x 1024,并转换为张量。这样,我们就有了平均值和标准偏差的像素值。

transform.compose 函数以链式转换的方式帮助处理输入的图像操作,以确保图像得到统一处理。这一步骤还能将像素值保持在一致的范围内。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
image_size = (1024, 1024)
transform_image = transforms.Compose([
transforms.Resize(image_size),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
image_size = (1024, 1024) transform_image = transforms.Compose([ transforms.Resize(image_size), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])
image_size = (1024, 1024)
transform_image = transforms.Compose([
transforms.Resize(image_size),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

第 5 步:加载图像

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
image = Image.open("/content/Boy using a computer.jpeg")
input_images = transform_image(image).unsqueeze(0).to('cuda')
image = Image.open("/content/Boy using a computer.jpeg") input_images = transform_image(image).unsqueeze(0).to('cuda')
 image = Image.open("/content/Boy using a computer.jpeg")
input_images = transform_image(image).unsqueeze(0).to('cuda')

在这里,我们加载图像并为模型做好准备。首先,使用“PIL”打开图像,然后调整图像大小并将其转换为张量。在将图像移动到 GPU 的“cuda”之前,还会为图像添加额外的批次维度,以加快推理速度并确保与模型的兼容性。

电脑前的小男孩

第 6 步:去除背景

这段代码会根据模型预测生成分割掩码,并将其应用于原始图像,从而去除背景。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
with torch.no_grad():
preds = model(input_images)[-1].sigmoid().cpu()
pred = preds[0].squeeze()
pred_pil = transforms.ToPILImage()(pred)
mask = pred_pil.resize(image.size)
image.putalpha(mask)
with torch.no_grad(): preds = model(input_images)[-1].sigmoid().cpu() pred = preds[0].squeeze() pred_pil = transforms.ToPILImage()(pred) mask = pred_pil.resize(image.size) image.putalpha(mask)
 with torch.no_grad():
preds = model(input_images)[-1].sigmoid().cpu()
pred = preds[0].squeeze()
pred_pil = transforms.ToPILImage()(pred)
mask = pred_pil.resize(image.size)
image.putalpha(mask)

这段代码通过从模型中获取透明度掩码来移除背景。它在不进行梯度跟踪的情况下运行模型,应用 sigmoid() 获得像素概率,并将结果移动到 CPU。遮罩的大小会调整到与原始图像相匹配,并设置为其 alpha 通道,从而使背景透明。

输入图像的结果如下,背景已去除,并与主要对象(男孩)分离。

下面是代码文件

移除背景后的小男孩

使用RMGB v2.0移除图像背景的应用

该模型在不同领域有多种应用案例。一些常见的应用包括

  • 电商:该模型可用于完成电子商务产品摄影,因为您可以移除和替换图像中的前景。
  • 游戏:移除背景在创建游戏资产中发挥着巨大作用。该模型可用于将选定的图像与其他对象分离。
  • 广告:您可以利用 RMGB 的背景移除和替换功能生成广告设计和内容。这些可以是图像,甚至是图形。

小结

RMGB 广泛应用于各行各业。从早期的 v1.2 到最新的 v2.0,该模型的功能也得到了改进。它的架构和对 BiRefNet 的利用在其性能和推理时间方面发挥了巨大作用。您可以使用各种图像类型来探索该模型的输出和性能质量。

  • 与前代产品相比,该模型的改进是 RMGB 工作原理的一个显著方面。对上下文的理解是凸显其性能改进的另一个方面。
  • 该模型的突出之处在于它在广告、游戏和电子商务等各个领域的广泛应用。
  • 该模型的显著特点是易于执行和集成。这得益于其独特的架构,该架构允许其在低资源环境中运行,推理时间短。

资源

评论留言