親身體驗使用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 工作原理的一個顯著方面。對上下文的理解是凸顯其效能改進的另一個方面。
  • 該模型的突出之處在於它在廣告、遊戲和電子商務等各個領域的廣泛應用。
  • 該模型的顯著特點是易於執行和整合。這得益於其獨特的架構,該架構允許其在低資源環境中執行,推理時間短。

資源

評論留言