RMBG-2.0 다중 플랫폼 배포 가이드

1. RMBG-2.0를 선택해야 하는 이유

RMBG-2.0은 BRIA AI가 개발한 최신 세대 배경 제거 모델로, 이전 버전 대비 정확도가 73.26%에서 90.14%로 크게 향상되었습니다. 특히 복잡한 경계(예: 머리카락, 반투명 소재)에서도 뛰어난 분할 성능을 보이며, 다양한 하드웨어 및 운영체제 환경에서 유연하게 작동합니다.

2. 사전 준비 사항

  • 지원 OS: Windows 10/11 (64비트), Ubuntu 20.04+, macOS 12 이상
  • Python: 3.8–3.11 호환
  • 메모리: 최소 8GB (GPU 사용 시 16GB 권장)
  • 디스크 공간: 약 1.8GB (모델 + 라이브러리)
  • GPU 옵션: CUDA 11.7+ 기반 NVIDIA GPU 권장
기본 의존성 설치 명령어:
pip install torch==2.0.1 torchvision==0.15.2 pillow==10.0.1 kornia==4.1.0 transformers==4.33.0

3. Windows 환경 구축

3.1 파이썬 기반 직접 실행

import torch
from PIL import Image
from torchvision import transforms
from transformers import AutoModelForImageSegmentation

device = "cuda" if torch.cuda.is_available() else "cpu"
model = AutoModelForImageSegmentation.from_pretrained(
    "briaai/RMBG-2.0",
    trust_remote_code=True,
).to(device).eval()

preprocess = transforms.Compose([
    transforms.Resize((1024, 1024)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

3.2 GUI 패키지 활용

공식 GitHub 릴리스 페이지에서 rmbg-2.0-win-x64.zip를 다운로드 후 압축 해제 → launch.bat 실행 → 자동으로 로컬 웹 인터페이스가 열림.

4. 리눅스 서버 배포 전략

4.1 Docker 기반 서비스화

Dockerfile 예시:
FROM nvidia/cuda:11.7.1-runtime-ubuntu20.04
RUN apt-get update && apt-get install -y python3-pip && rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . /app
WORKDIR /app
CMD ["python3", "server.py"]
빌드 및 실행:
docker build -t rmbg-svc .
docker run -d --gpus all -p 8000:8000 --name rmbg rmbg-svc

4.2 ONNX 변환 및 고성능 추론

import torch
from transformers import AutoModelForImageSegmentation

model = AutoModelForImageSegmentation.from_pretrained(
    "briaai/RMBG-2.0", trust_remote_code=True
).eval().to("cpu")

dummy = torch.randn(1, 3, 1024, 1024)
torch.onnx.export(
    model,
    dummy,
    "rmbg_v2_optimized.onnx",
    input_names=["input"],
    output_names=["mask"],
    dynamic_axes={"input": {0: "batch"}, "mask": {0: "batch"}},
    opset_version=14
)
변환된 ONNX 파일은 TensorRT, OpenVINO 또는 ONNX Runtime에서 즉시 활용 가능.

5. 리소스 제약 환경 최적화

5.1 양자화 기반 경량화

model_quant = torch.quantization.quantize_dynamic(
    model, 
    {torch.nn.Conv2d, torch.nn.Linear}, 
    dtype=torch.qint8
)

scripted = torch.jit.script(model_quant)
torch.jit.save(scripted, "rmbg_lite.pt")
양자화 후 모델 크기 감소율: 약 75%, CPU 추론 속도 향상: 평균 2.4배.

5.2 Raspberry Pi 4B 배포 예시

LibTorch C++ API를 사용해 컴파일:
clang++ -std=c++17 \
  -I /opt/libtorch/include \
  -L /opt/libtorch/lib \
  main.cpp -ltorch -lcaffe2 -o rmbg_pi
입력 해상도는 512×512로 조정하여 실시간 처리 가능하도록 최적화.

6. 실제 적용 코드 샘플

6.1 단일 이미지 처리 함수

def process_image(src: str, dst: str):
    img = Image.open(src).convert("RGB")
    orig_size = img.size
    tensor = preprocess(img).unsqueeze(0).to(device)
    
    with torch.no_grad():
        mask = model(tensor)[-1].sigmoid()[0, 0]
    
    mask_resized = transforms.functional.resize(
        mask.unsqueeze(0), orig_size, antialias=True
    )[0]
    
    alpha = Image.fromarray((mask_resized * 255).byte().cpu().numpy())
    img.putalpha(alpha)
    img.save(dst)

6.2 병렬 배치 처리

from concurrent.futures import ProcessPoolExecutor
import glob

def batch_run(file_list: list):
    with ProcessPoolExecutor(max_workers=3) as executor:
        futures = [
            executor.submit(process_image, f, f.replace("input/", "output/"))
            for f in file_list
        ]
        for _ in futures:
            _.result()

7. 주요 오류 해결법

  • CUDA OOM 에러: torch.cuda.empty_cache() 호출 후 batch_size=1 설정
  • Hugging Face 다운로드 실패: HF_HOME 환경 변수로 캐시 디렉토리 지정 또는 git clone 수동 다운로드
  • 모델 로딩 지연: torch.backends.cudnn.benchmark = True 활성화
  • 마스크 경계 흐림: 후처리에 transforms.Resize(..., interpolation=Image.BICUBIC) 적용

8. 성능 튜닝 팁

  • GPU 사용 시 FP16 추론 활성화 → 약 1.8배 속도 향상
  • 배치 크기 4 이상 시 메모리 효율 증가, 하지만 정확도 저하 가능성 검토 필요
  • 모델 파라미터 중 일부 레이어 동결(freeze) → 미세조정 없이도 5% 이상 속도 개선
  • OpenCV 대신 Pillow 사용 시 CPU 부하 감소 (특히 리사이징 단계)

태그: RMBG-2.0 PyTorch onnx TensorRT docker

8월 21일 12:26에 게시됨