02_char_lora · 인페인팅 벤치마크

말풍선/텍스트 제거 — 인페인팅 모델별 퀄리티 비교

같은 검출 마스크(YOLO 풍선 ∪ comic-text-detector 텍스트)를 기준으로, 고전 알고리즘(Telea) · 비생성형(LaMa) · 생성형(FLUX Fill·Kontext)이 같은 자리를 어떻게 채우는지 비교한다. 핵심 질문: "보기 좋게" 채우는 생성형이 학습 데이터로도 좋은가?

검출 풍선 conf0.4·45px ∪ 텍스트 seg0.5·24px 대상 이직로그 4패널 FLUX 12B · 28steps seed 0 고정

비교 대상 — 4가지 채움 방식

고전

OpenCV Telea

주변 픽셀 전파(FMM). 다운로드·학습 불필요. 넓은 영역은 뭉개짐.

프롬프트 없음 — 마스크 기반(반경 5px)
0.24초/컷
비생성형 · 현행

LaMa

FFT 기반 대형수용야 인페인팅. 주변 텍스처를 충실히 복원, "상상" 안 함.

프롬프트 없음 — 마스크 기반
1.4초/컷
생성형 · 마스크

FLUX.1 Fill (12B)

마스크 영역을 프롬프트 따라 새로 그림. 깨끗하나 없던 내용 생성 위험.

프롬프트: "clean manhwa illustration background, smooth, consistent, no text, no speech bubble"
5.2초/컷 + 로드 264초
생성형 · 지시문

FLUX.1 Kontext (12B)

마스크 없이 지시문으로 편집. 이미지 전체를 재생성.

지시문: "Remove all speech bubbles, narration boxes and text. Fill with clean background matching the surrounding art. Keep everything else identical."
18.8초/컷 + 로드 237초

※ Telea·LaMa는 CPU/경량, FLUX은 GPU 12B(28 steps, seed 0). 속도는 RTX PRO 6000 기준 측정값.

결과 — 패널별 (원본 · 검출마스크 · Telea · LaMa · FLUX Fill · FLUX Kontext)

각 셀 높이 정렬. 초록 테두리=LaMa(현행 채택) · 파랑 테두리=생성형.

ep003 / panel_031 — 대형 풍선 + 속도선 배경

원본
검출 마스크풍선∪텍스트
Telea속도선이 뭉개진 얼룩0.20s
LaMa ✓속도선 텍스처 자연 연장0.48s
FLUX Fill상단을 밝은 빛으로 새로 그림(원본과 다른 배경)6.0s
FLUX Kontext전체 재생성 — 인물·구도 변형18.4s

ep004 / panel_023 — 풍선 + 밝은 창 배경

원본
검출 마스크풍선∪텍스트
Telea빛이 아래로 번진 얼룩0.29s
LaMa ✓빛·머리카락 충실 복원1.6s
FLUX Fill⚠ 하단에 없던 가짜 글씨 환각4.5s
FLUX Kontext전체 재생성 — 인물 다시 그림18.7s

ep004 / panel_004 — 상·하 풍선 + 인물 얼굴

원본
검출 마스크풍선∪텍스트
Telea상·하단 번짐0.31s
LaMa ✓주변 톤으로 자연 복원1.5s
FLUX Fill그럴듯하나 빛·디테일 임의 생성3.9s
FLUX Kontext전체 재생성 — 인물 확대·변형19.1s

ep001 / panel_050 — 대사 + 말풍선 + 책상/인물

원본
검출 마스크풍선∪텍스트
Telea책상 위 번짐 얼룩0.17s
LaMa ✓책상 배경 자연 복원1.9s
FLUX Fill⚠ 좌하단에 없던 가짜 글씨 환각6.6s
FLUX Kontext전체 재생성 — 구도·모니터 변형19.1s

결론

방식유형비용충실도(학습 데이터 관점)판정
Telea고전(FMM)0.24초/컷 · 무학습 넓은/텍스처 영역은 번져 뭉개짐. 작은 풍선엔 그럭저럭보조용
LaMa비생성형1.4초/컷 · 경량(로드 수초) 주변 텍스처를 충실히 연장. 없던 것을 만들지 않음채택
FLUX Fill생성형·마스크 12B5.2초/컷 + 로드 264초, VRAM 24GB+ 깨끗해 보이나 마스크 영역을 새로 상상텍스트 자리에 가짜 글씨를 생성(ep004/p023·ep001/p050)✕ 오염
FLUX Kontext생성형·지시문 12B18.8초/컷(Fill의 3.6배) + 로드 237초 이미지 전체를 재생성 → 인물·구도·색이 원작에서 이탈✕ 오염
"보기 좋게" ≠ "학습용으로 좋게" — 생성형 인페인터는 빈자리를 자기 그림체로 채운다. 이는 일반 사진 보정엔 장점이지만, 그림체 LoRA 학습 데이터에선 치명적이다: ① FLUX Fill은 텍스트를 지우라는 자리에 오히려 없던 가짜 글씨를 환각해 넣었고(2개 패널에서 재현), ② FLUX Kontext는 말풍선만 지우는 게 아니라 인물 자체를 다시 그려 원작 정체성이 바뀐다. LoRA가 이런 오염을 "원작 그림체"로 학습하면 캐릭터 일관성이 무너진다. 결론: 충실한 복원이 목적이므로 비생성형 LaMa를 유지한다.

속도 결론 — LaMa는 컷당 1.4초·로드 수초인 반면, 생성형은 12B 모델 로드만 4분, 생성도 Kontext 기준 컷당 18.8초(LaMa의 13배). 4천 패널 전량 처리 시 LaMa 분 단위 vs 생성형 시간 단위. 품질(충실도)·속도 모두 LaMa가 우위 → 현행 유지 확정.

Qwen-Image-Edit-2509(20B) 추가 시도 — 보류
로컬 ComfyUI fp8 단일파일 + 캐시된 Qwen2.5-VL을 diffusers 파이프라인으로 직접 조립해 비교군에 넣으려 했으나, ① 머신 RAM 62GB 한계로 OOM, ② GPU 직접 적재 시 fp8 캐스팅 세그폴트로 반복 실패했다. 정식 diffusers repo(~40GB 추가 다운로드)나 ComfyUI 헤드리스 실행으로 마저 붙일 수 있다(아래 참조).

스크립트 02_char_lora/src/inpaint_compare.py · 동일 마스크/seed0/28steps · 속도 측정 timings.json · 모델 캐시는 NVMe(~/data)·로컬 fp8 사용.

×