ai papers
같은 마스크, 다른 문제: Inpainting과 Editing은 Object Removal을 어떻게 다시 설계했나
Junyoung Park · 2026-08-31 · 13 min
관련 글 — 비디오 인페인팅은 레퍼런스 프레임에서 시작한다 · 객체를 지운다는 것
앞선 글에서는 방송 영상의 레퍼런스 프레임을 만들기 위해 실제로 모델을 고른 과정을 정리했다. 범용 Editing API는 생성력이 좋았지만 원본과의 pixel alignment를 보장하지 않았고, 전용 Inpainting 모델은 보존에는 유리했지만 복잡한 배경이나 모호한 대상에서 막혔다. 내부 테스트에서는 OSOR을 기본 경로로 두고 MaskFlow를 예외 처리에 가까운 경로로 남겼다.
그 선택만 적고 나니 설명되지 않은 부분이 있었다. OSOR, SmartEraser, ObjectClear와 MaskFlow는 모두 image와 mask를 받는다. 겉으로는 같은 interface인데, 논문이 mask에 부여하는 역할은 서로 다르다. 어떤 모델에는 채워야 할 hole이고, 어떤 모델에는 지울 대상을 찾는 query이며, 또 다른 모델에는 sampling trajectory를 제한하는 조건이다.
이번 글은 사용 결과를 다시 비교하기보다 그 차이를 논문 안에서 따라가려 한다. 특히 다음 네 가지를 같은 기준으로 보았다.
- mask 안의 원본 pixel을 모델에 보여주는가
- 사용자가 준 object mask와 실제 edit region을 같은 것으로 보는가
- mask 밖의 원본을 어느 단계에서 보존하는가
- source와 target pair를 어떤 방식으로 확보했는가
같은 mask라도 최적화하는 것은 다르다
전용 Inpainting은 원래 locality에서 출발한다. 어디를 다시 그릴지 mask로 제한하고 나머지를 보존한다. 대신 hole 안의 pixel을 지우고 입력하면 그 안에서 무엇을 없애야 하는지 알기 어렵다. 최근 Object Removal 논문은 target pixel을 다시 보여주거나, object와 effect의 범위를 따로 학습하는 방식으로 semantic을 보강한다.
범용 Editing은 반대쪽에서 출발한다. 자연어로 무엇을 바꿀지 이해하고 장면 전체를 다시 구성하는 능력은 좋다. 대신 model의 vector field나 noise prediction이 이미지 전체에 걸쳐 계산되므로, mask를 넣어도 외부 영역이 반드시 고정되지는 않는다. MaskFlow는 이 경로 자체에 mask를 넣어 locality를 보강한다.
두 계열은 서로 반대 방향에서 object-aware local editing에 접근한다. 아래의 control과 freedom 사이 균형은 없어지는 것이 아니라 모델 내부로 이동한다.
이 관점에서 보면 Inpainting과 Editing은 명확히 분리된 두 범주라기보다 서로의 약점을 가져오는 중이다. 다만 같은 지점으로 수렴한다고 해서 학습 신호까지 같아지는 것은 아니다.
SmartEraser: 지울 pixel을 가리는 것이 오히려 정보를 버린다
전통적인 mask-and-inpaint 입력은 다음과 같이 쓸 수 있다.
mask 안의 원본은 placeholder나 noise로 바뀌고, 모델은 바깥 문맥만 보고 hole을 채운다. 손상 복원이라면 자연스럽다. 그러나 Object Removal에서는 mask 안의 물체가 무엇인지 알려주는 가장 직접적인 증거까지 함께 사라진다. 도로라는 배경만 보고 채우면 차를 지우는 대신 다른 차를 생성할 수도 있다.
SmartEraser는 이 조건을 로 바꾼다.
논문에서 Masked-Region Guidance라고 부르는 핵심은 의외로 단순하다. mask 안을 지운 이미지를 넣지 않고 complete image를 그대로 보여준다. mask는 "이 영역을 새로 그려라"보다 "이 안의 대상을 제거하라"에 가까워진다. 사용자가 대상을 넓게 둘러 그렸더라도, model은 mask 안의 원래 texture와 다른 물체를 보고 무엇을 유지할지 판단할 수 있다.
문제는 이 구조를 random-mask reconstruction data로 학습할 수 없다는 데 있다. 입력 에 정답 pixel이 전부 남아 있으면 model은 제거 대신 그대로 복사하는 shortcut을 배울 수 있다. SmartEraser는 foreground instance를 다른 background에 붙인 뒤, 합성 전 background를 ground truth로 사용하는 Syn4Removal을 만든다. 논문이 구성한 triplet은 약 100만 개다. 다양한 mask 형태에 대응하기 위해 erosion, dilation, convex hull, ellipse와 bounding shape도 학습 중 섞는다.
이 방식은 target identity와 loose mask 문제를 상당 부분 정리한다. 동시에 synthetic pasting의 한계도 분명하다. 원래 background를 정답으로 확보하기는 쉽지만 실제 물체가 만들었을 defocus, contact shadow, reflection과 foreground occlusion을 모두 합성하기는 어렵다. target pixel을 보존하는 것은 semantic ambiguity를 줄이지만, 그 물체가 장면에 남긴 효과의 범위를 자동으로 알려주지는 않는다.
ObjectClear와 OSOR: object mask는 최종 edit boundary가 아니다
사용자가 그린 만 hard boundary로 쓰면 그림자와 반사가 남는다. 반대로 이를 넓게 칠하게 하면 보존해야 할 앞쪽 물체까지 다시 생성해야 한다. 최근 removal 전용 모델은 입력 mask와 최종 수정 범위를 분리한다.
ObjectClear는 SDXL-Inpainting의 masked image 대신 원본 전체 을 넣는다. 이 점은 SmartEraser와 닮았지만, effect region을 다루는 방식이 더 explicit하다. object crop의 CLIP visual embedding과 고정 text prompt를 cross-attention에 넣고, 그 attention map이 object와 effect를 함께 덮도록 로 감독한다. 논문은 이 모듈을 Adaptive Target-Aware Attention, ATA라고 부른다.
추론 마지막 step의 attention map은 다시 합성 mask가 된다. 생성 결과 전체를 쓰지 않고, soft object-effect map으로 원본과 alpha blending하는 Attention-Guided Fusion을 적용한다. semantic을 찾는 attention이 preservation을 위한 spatial gate로도 사용되는 구조다.
ObjectClear Figure 3에서 framework만 남겼다. 학습된 attention map이 추론 때 object-effect 영역을 정하고 원본과의 fusion을 제어한다. 논문 원문
여기서 흥미로운 것은 model이 edit region을 더 넓게 예측하면서도 외부 변화는 줄인다는 점이다. 둘은 모순처럼 보이지만, 생성할 범위와 결과로 채택할 범위를 분리하면 가능하다. ObjectClear의 ablation에서 AGF를 추가했을 때 background PSNR이 28.80에서 35.50으로 크게 오른 것도 이 fusion의 역할을 보여준다. 다만 attention map이 effect를 놓치면 fusion도 같이 놓친다. target recognition과 boundary estimation이 하나의 map에 묶여 있다.
OSOR은 같은 문제를 attention map이 아니라 alpha head와 2단계 curriculum으로 푼다. Phase I에서는 effect-aware mask를 조건과 정답 영역에 함께 쓰고, latent space에서 hard blending한다. one-step restoration은 여러 denoising step에 걸쳐 seam을 고칠 여유가 없기 때문에, 각 discriminator patch에서 mask가 차지하는 비율을 supervision으로 주는 occupancy-guided discriminator도 둔다.
Phase II에서는 의도적으로 불완전한 mask를 입력한다. object core만 남기거나 mask를 erosion, shift, hole dropping으로 망가뜨린 뒤에도 alpha head가 실제 effect-aware 범위 를 복원하게 한다.
사용자 mask는 conditioning이고, 가 최종 latent composition의 edit region이다. 논문에서 object-only mask를 넣었을 때도 shadow와 reflection 쪽으로 alpha가 확장되는 이유다.
OSOR Figure 3의 2단계 curriculum만 크롭했다. Phase I은 잘 정의된 mask로 one-step 복원을 안정화하고, Phase II는 incomplete mask에서 실제 effect 범위를 예측한다. 논문 원문
ObjectClear와 OSOR은 모두 object mask를 query로 읽고 effect region을 새로 만든다. 차이는 ObjectClear가 cross-attention을 effect map과 fusion에 재사용하는 반면, OSOR은 별도의 alpha 출력과 incomplete-mask supervision을 둔다는 데 있다. OSOR의 one-step 설계는 속도 면에서 유리하지만, 그만큼 boundary supervision과 distillation 품질에 더 민감해진다.
MaskFlow: Editing model의 생성 경로 안에 mask를 넣다
앞의 세 모델은 전용 removal model이 target semantics와 effect awareness를 추가하는 흐름이었다. MaskFlow는 반대 방향이다. Qwen-Image-Edit-2511의 semantic editing 능력을 유지하면서, 편집 영역 밖이 함께 변하는 문제를 sampling formulation에서 제한한다.
일반적인 instruction-based editor는 image 전체에 대한 vector field를 예측한다. mask가 별도 condition으로 들어가더라도 probability path 자체가 분리되는 것은 아니다. MaskFlow는 source latent , target latent , editable mask 에 대해 다음 경로를 정의한다.
mask 안은 target으로 이동하고, mask 밖은 같은 시간축에서 source로 이동한다. mask를 attention이 참고할 이미지 한 장으로만 넣는 대신, 어디가 생성 분포를 따르고 어디가 source trajectory를 따를지 probability path에서 나눈다. loss도 mask area로 정규화해 작은 edit가 큰 mask에 묻히지 않게 한다.
MaskFlow Figure 2에서 학습 구조와 data pipeline만 남겼다. 왼쪽은 mask-aware flow와 Soft-Poisson, 오른쪽은 prompt·source·mask·target pair를 만드는 과정이다. 논문 원문
foreground와 preserved background가 서로 다른 trajectory를 따르면 mask 경계에 색과 gradient seam이 생길 수 있다. MaskFlow의 Soft-Poisson de-seaming은 완성된 이미지를 마지막에 보정하는 후처리가 아니다. 각 sampling step에서 추정한 vector field를 gradient domain objective로 다시 풀어, 중앙은 생성 foreground를 따르고 경계로 갈수록 source feature에 붙도록 만든다.
ablation 수치도 역할을 구분해 보여준다. 논문이 보고한 MEData 결과에서 base QwenImage-Edit-2511의 FID는 29.85다. mask-aware path를 넣으면 20.51로 크게 줄고, Soft-Poisson을 추가하면 19.90이 된다. LPIPS도 0.2070에서 0.1074, 0.1047 순으로 내려간다. 이 표만 보면 가장 큰 변화는 boundary 후처리보다 mask를 probability path에 넣은 데서 나온다.
MaskFlow Figure 5 중 removal 예시 세 행만 크롭했다. 각 행은 왼쪽부터 prompt, source와 mask, QwenImage-Edit-2511, MaskFlow without Soft-Poisson, 전체 MaskFlow다. 논문 원문
그렇다고 mask 밖 pixel이 수학적으로 bit-identical하다는 뜻은 아니다. 논문의 background MSE와 LPIPS는 MaskFlow에서 소수점 넷째 자리까지 0.0000으로 보고되지만, 자체 MEData와 평가 설정에서 반올림된 metric이다. VAE와 finite-step solver를 포함한 실제 output에서 모든 pixel이 동일하다는 API contract와는 구분해야 한다. 1편에서 확인한 locality 문제를 크게 줄인 연구 결과이지, 별도 pixel diff 검사가 불필요해졌다는 선언은 아니다.
같은 frame으로 OSOR과 MaskFlow를 다시 비교했다
논문의 표만 비교해서는 실제 합성에서 어느 쪽을 먼저 써야 하는지 답하기 어려웠다. 그래서 1편에서 사용한 base.jpg와 alpha mask를 그대로 두고 OSOR과 MaskFlow를 각각 실행했다. 입력과 두 결과는 모두 1920×1306이라 resize나 registration 없이 RGB absolute difference를 계산했다. 평가에서는 alpha < 128을 edit region으로 정의했다. 아래 delta는 작은 변화를 보기 위해 4배 증폭했으며, 청록색 선은 그 경계다. 이 mask는 전체 pixel의 약 5.25%를 차지한다.
각 행의 왼쪽부터 base, model output, |output − base| × 4다. Delta 위 청록색 선은 저장된 alpha mask의 경계다. 세 이미지의 크기가 같아 별도 정렬 보정은 하지 않았다.
수치는 다음과 같았다. mask 밖 동일 pixel은 R·G·B 세 channel이 원본과 모두 같은 pixel의 비율이고, 차이 > 5는 pixel별 RGB absolute difference의 평균이 5를 넘는 비율이다.
| Model | Full-frame RGB MAE | Mask 밖 RGB MAE | Mask 밖 동일 pixel | Mask 밖 차이 > 5 |
|---|---|---|---|---|
| OSOR | 2.685 | 0.597 | 96.88% | 1.57% |
| MaskFlow | 3.400 | 0.965 | 96.48% | 1.83% |
둘 다 1편의 범용 Editing API 결과처럼 frame 전체를 다시 그리지는 않았다. Mask 밖 pixel의 96% 이상이 bit-identical했고, 이 샘플에서는 OSOR이 모든 locality 지표에서 조금 더 보수적이었다. 다만 검은 배경 위 delta를 보면 외부 차이가 wall이나 조명에 넓게 퍼진 것이 아니라, 청록색 mask 밖의 다른 주황색 cushion에 집중되어 있다. 두 모델 모두 공간 경계만 따른 것이 아니라 장면 안의 비슷한 target까지 찾아 바꾼 셈이다. 이 경우의 outside-mask error는 diffuse background drift보다 semantic spillover에 가깝다.
같은 좌표를 확대한 비교다. 정답 background가 없는 removal 결과이므로 자연스러움과 구조 연결은 정성적으로만 판단했다.
확대해서 보면 낮은 pixel difference가 곧 높은 생성 품질을 뜻하지 않는다는 점이 더 분명해진다. OSOR은 mask 밖을 더 보수적으로 유지했지만, 정작 생성한 sofa와 바닥에는 blur가 강하게 걸렸다. 나뭇결과 fabric의 고주파 detail이 뭉개지고, 비워진 면도 납작하게 이어져 원래 scene의 texture와 분리되어 보인다. 경계가 튀지는 않지만, 그 대가로 내부 구조까지 과도하게 평활화한 결과에 가깝다.
MaskFlow는 더 넓은 silhouette을 다시 그렸고 외부 pixel difference도 OSOR보다 컸다. 대신 sofa의 부피와 바닥 구조가 더 자연스럽게 이어지고, 생성 영역 안의 선명도도 상대적으로 잘 남았다. 한 장의 정성 품질만 비교하면 이 sample에서는 MaskFlow 결과가 낫다. 특히 이 frame을 video propagation의 reference로 쓴다면, OSOR의 blur가 이후 frame에 안정적으로 전파되는 것 역시 실패다. 낮은 outside-mask MAE만 보고 OSOR을 고를 수 없는 이유다.
이 결과를 모델 순위로 일반화할 수는 없다. 제거 뒤의 실제 ground truth가 없으므로 mask 내부 MAE는 품질 점수가 아니며, sample도 한 장뿐이다. 다만 이 사례는 locality와 fill quality를 별개의 축으로 평가해야 한다는 점은 분명히 보여준다. OSOR은 외부 보존 수치가 좋았지만 내부 생성 품질에서 실패했고, MaskFlow는 더 많이 바꾸는 대신 더 나은 복원 결과를 만들었다. 따라서 OSOR을 빠른 기본 경로로 두더라도, blur와 texture continuity를 검사해 MaskFlow로 넘기는 quality gate가 필요하다.
결국 dataset이 model이 믿는 세계를 정한다
네 논문을 method만 놓고 보면 mask와 fusion 설계가 먼저 보인다. 실제 차이는 pair를 만드는 방법에서 더 크게 드러난다.
| 논문 | 학습 pair | 얻는 장점 | 남는 prior |
|---|---|---|---|
| SmartEraser | foreground를 background에 붙인 Syn4Removal 약 100만 triplet | 정확히 정렬된 real background, 큰 규모 | 실제 shadow·reflection·defocus와 depth interaction이 약함 |
| ObjectClear | 고정 camera로 찍은 2,878 real pair + 10,000 composite pair | object-effect mask와 실제 물리 효과를 직접 감독 | scene와 object 종류의 규모가 제한되고 합성 부분은 평평한 배경에 치우침 |
| OSOR | instruction editing triplet을 semantic·pixel difference로 검증한 CORNE 28만 pair | effect-aware pair를 대규모로 선별 | upstream edit 결과와 verification rule이 허용한 사례만 남음 |
| MaskFlow | VLM prompt, 생성 target, SAM과 사람 보정을 거친 MEData 약 1만 pair | removal뿐 아니라 add·replace·attribute edit를 한 regional editor에서 학습 | 생성 target의 prior와 1만 pair 규모가 out-of-domain edit의 경계를 정함 |
SmartEraser의 data는 깨끗하고 많지만 insertion으로 만들기 어려운 물리 효과가 약하다. ObjectClear는 실제 전후 촬영으로 그 효과를 얻지만 2,878 pair를 만드는 데 물리적인 비용이 든다. OSOR은 이미 존재하는 editing triplet을 검증해 28만 pair로 늘리지만, difference가 충분히 localized되고 instruction과 semantic하게 맞는 사례를 골라낸 결과다. 검증기를 통과하지 못한 복잡한 실패는 학습 분포에서도 사라질 수 있다.
MaskFlow의 MEData는 목적이 다르다. removal 전용 counterfactual dataset이 아니라 regional editing dataset이다. 위치를 자세히 적은 full prompt로 target을 생성하고, 학습용 edit prompt에서는 위치 설명을 빼서 model이 mask를 보도록 한다. 이 설계는 mask와 instruction의 역할을 분리한다. 대신 add, replace, attribute change와 removal을 함께 배우므로, "아무것도 새로 만들지 말고 지우기만 하라"는 prior는 전용 모델보다 약할 수밖에 없다.
내가 실제 데이터에서 본 trade-off는 이 표와 연결된다. 전용 removal model은 자주 등장하는 object와 effect에는 안정적이지만 학습 pair가 충분히 설명하지 못한 아웃포커싱, 복잡한 그림과 depth overlap에서 막힌다. Editing model은 prompt로 대상을 구분하고 더 강한 generation prior를 쓸 수 있지만, 그 자유도가 곧 외부 변화와 결과 랜덤성으로 돌아온다.
논문들이 만난 지점과 아직 풀지 못한 지점
네 방법을 한 줄로 정리하면 다음과 같다.
- SmartEraser는 Inpainting에 target evidence를 되돌려 준다.
- ObjectClear는 target attention으로 effect region과 fusion mask를 만든다.
- OSOR은 incomplete object mask에서 adaptive alpha를 예측한다.
- MaskFlow는 Editing의 probability path를 mask 안과 밖으로 나눈다.
전용 Inpainting은 점점 semantic해지고, 범용 Editing은 점점 spatial해진다. 두 방법이 향하는 곳은 비슷하다. 무엇을 바꿀지는 의미적으로 이해하되, 실제 변경은 필요한 pixel에만 제한하는 editor다.
그래도 세 가지 목표는 아직 완전히 합쳐지지 않는다.
첫째, target을 정확히 이해할수록 그 visual feature가 generation에도 강하게 남아 대상을 다시 만들 수 있다. 둘째, effect를 놓치지 않으려고 edit region을 넓힐수록 원본 보존은 어려워진다. 셋째, mask 밖을 엄격히 고정할수록 조명과 그림자처럼 경계를 넘는 효과를 자연스럽게 고치기 어렵다.
Depth-awareness도 대부분 explicit하지 않다. ObjectClear가 synthetic placement를 고를 때 depth gradient를 사용하지만, 추론 때 3D layer를 복원하는 것은 아니다. 네 모델 모두 2D appearance와 학습 prior로 "앞에 있는 물체는 남기고 뒤의 사람만 지운다"는 관계를 추론한다. 실제 방송 세트의 defocus, 투명체, foreground overlap이 여전히 어려운 이유다.
Pixel preservation의 보장도 단계별로 나눠 봐야 한다. ObjectClear는 마지막에 원본과 pixel-space fusion을 하고, OSOR은 latent composition을 하며, MaskFlow는 probability path에서 source trajectory를 유지한다. 셋 다 외부 변화를 줄이지만 같은 보장은 아니다. 특히 latent blend 뒤에는 VAE decode가 남아 있다. 합성 pipeline에서 bit identity가 필요하면 최종 output에 다시 원본을 덮고 edge와 effect mask를 따로 검증해야 한다.
이 비교에서 내린 결론
Object Removal을 Inpainting과 Editing 중 하나로 분류하는 것만으로는 model을 고르기 어렵다. 더 유용한 질문은 네 가지다.
- model은 mask 안의 target을 볼 수 있는가
- object mask 밖의 effect를 누가, 어떤 supervision으로 찾는가
- 보존할 background를 sampling, latent, pixel 중 어느 단계에서 되돌리는가
- 그 판단을 학습한 before/after pair가 실제 사용 장면을 얼마나 포함하는가
이 기준으로 보면 OSOR과 MaskFlow는 단순한 대체재가 아니다. OSOR은 제거라는 좁은 task에서 빠르고 보수적인 기본값에 가깝다. MaskFlow는 강한 editor에 locality를 추가해, mask-only removal이 이해하지 못하는 장면을 prompt와 generation prior로 푸는 방향이다. 하나가 다른 하나를 완전히 포함하지 않는다.
Video Inpainting의 reference frame을 만들 때도 결국 두 결과를 이미지 한 장의 자연스러움으로만 평가할 수 없다. 수정 영역의 background가 그럴듯한지, 외부 pixel과 geometry가 유지됐는지, 그리고 그 가설이 다른 frame의 known pixel과 만났을 때 모순이 생기지 않는지를 함께 봐야 한다. Image model의 prior를 고르는 일이 Video pipeline의 앞단 문제로 끝나지 않는 이유다.