<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Image Segmentation on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/ko/tags/image-segmentation/</link><description>Recent content in Image Segmentation on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Thu, 07 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/ko/tags/image-segmentation/index.xml" rel="self" type="application/rss+xml"/><item><title>ToonOut과 BiRefNet — 애니 캐릭터 전용 매팅 모델이 픽셀 정확도 99.5%를 만드는 방법</title><link>https://ice-ice-bear.github.io/ko/posts/2026-05-07-toonout-birefnet-anime-matting/</link><pubDate>Thu, 07 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/ko/posts/2026-05-07-toonout-birefnet-anime-matting/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post ToonOut과 BiRefNet — 애니 캐릭터 전용 매팅 모델이 픽셀 정확도 99.5%를 만드는 방법" /&gt;&lt;h2 id="개요"&gt;개요
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://ice-ice-bear.github.io/posts/2026-05-07-popcon-dev11/" &gt;popcon dev #11&lt;/a&gt;에서 매팅 모델을 ToonOut으로 갈아탔다. 두 GitHub 레포지토리를 같이 읽으면 흐름이 명확해진다 — &lt;a class="link" href="https://github.com/zhengpeng7/birefnet" target="_blank" rel="noopener"
 &gt;ZhengPeng7/BiRefNet&lt;/a&gt; (CAAI AIR'24, ★3,397, 일반 매팅의 SOTA 후보)과 &lt;a class="link" href="https://github.com/MatteoKartoon/BiRefNet" target="_blank" rel="noopener"
 &gt;MatteoKartoon/BiRefNet&lt;/a&gt; (애니 전용 fine-tuning, ★94, arXiv:2509.06839). 베이스 모델 + 도메인 fine-tuning 패턴의 깔끔한 사례다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph LR
 Input["애니 캐릭터 RGB 이미지"] --&gt; Compose["#808080 회색 배경에 합성 &amp;lt;br/&amp;gt; (ToonOut training distribution)"]
 Compose --&gt; ToonOut["ToonOut &amp;lt;br/&amp;gt; (BiRefNet fine-tuned &amp;lt;br/&amp;gt; on 1228 anime images)"]
 ToonOut --&gt; Mask["alpha mask &amp;lt;br/&amp;gt; (95.3% → 99.5%)"]
 Mask --&gt; Compose2["원하는 배경에 합성"]
 BaseRef["ZhengPeng7/BiRefNet &amp;lt;br/&amp;gt; (일반 사진 매팅 SOTA)"] -. fine-tune .-&gt; ToonOut
 Dataset["1228장 hand-annotated &amp;lt;br/&amp;gt; CC-BY 4.0"] -. train .-&gt; ToonOut&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="birefnet--bilateral-reference-dichotomous-image-segmentation"&gt;BiRefNet — Bilateral Reference, dichotomous image segmentation
&lt;/h2&gt;&lt;p&gt;원본 BiRefNet은 2024년 CAAI Artificial Intelligence Research에 실린 논문이다. &amp;ldquo;Dichotomous image segmentation&amp;rdquo; — 이미지의 전경(salient)과 배경을 이진 분리하는 작업의 baseline. 일반 매팅 모델 대비 차이점:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;고해상도 학습&lt;/strong&gt; — 1024×1024 입력 + 표준 매팅보다 큰 supervision 신호.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bilateral reference&lt;/strong&gt; — 디코더가 forward pass에서 입력 이미지를 두 번 참고한다. 첫 번째는 거친 segmentation, 두 번째는 fine-grained refinement. 머리카락 같은 thin structure에 강하다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Salient object + camouflaged object + DIS 통합&lt;/strong&gt; — 한 모델이 세 task를 같이 처리해서 generalization이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;레포의 News 타임라인을 보면 운영자가 모델을 꾸준히 갱신한다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;시점&lt;/th&gt;
 &lt;th&gt;변화&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2025-02-12&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BiRefNet_HR-matting&lt;/code&gt; — 2048×2048 학습, 고해상도 매팅 전용&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025-03-31&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BiRefNet_dynamic&lt;/code&gt; — 256×256 ~ 2304×2304 dynamic resolution 학습. &lt;strong&gt;임의 해상도에서 robust&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025-05-15&lt;/td&gt;
 &lt;td&gt;fine-tuning 튜토리얼 영상 (YouTube/Bilibili)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025-06-30&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;refine_foreground&lt;/code&gt;를 8x 가속 — 80ms / 5090&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025-09-23&lt;/td&gt;
 &lt;td&gt;swin transformer attention을 PyTorch SDPA로 교체, memory 감소 + flash_attn 호환성&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;특히 &lt;code&gt;BiRefNet_dynamic&lt;/code&gt;이 흥미롭다. 256~2304 사이 해상도를 dynamic하게 학습한 모델이라, 입력 해상도에 robust하다. 이전엔 입력을 모델 학습 해상도로 resize해야 했는데, dynamic 모델은 그 step을 생략할 수 있다.&lt;/p&gt;
&lt;p&gt;GPU 후원이 있었다는 점도 명시되어 있다 — Freepik이 고해상도 학습을 위한 GPU를 지원했다. 학계 모델이 production-grade로 나오는 패턴.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="toonout--1228장으로-만든-fine-tuning-데이터셋"&gt;ToonOut — 1228장으로 만든 fine-tuning 데이터셋
&lt;/h2&gt;&lt;p&gt;ToonOut은 BiRefNet의 fork다. README의 핵심 수치 한 줄.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;hellip;we collected and annotated a custom dataset of &lt;strong&gt;1,228 high-quality anime images&lt;/strong&gt;&amp;hellip; The resulting model, &lt;strong&gt;ToonOut&lt;/strong&gt;, shows marked improvements in background removal accuracy for anime-style images, achieving an increase in Pixel Accuracy from &lt;strong&gt;95.3% to 99.5%&lt;/strong&gt; on our test set.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;1228장은 fine-tuning 기준에서 작은 셋이다. 그런데 95.3% → 99.5%로 4.2 포인트 개선이 났다. &lt;strong&gt;base model(BiRefNet)이 이미 충분히 강했고, 도메인 차이만 메우면 됐다는 뜻&lt;/strong&gt;. 일반 매팅에서 이미 잘 작동하는 모델을 애니에 fine-tune할 때, &amp;ldquo;전체 distribution을 새로 배우는&amp;rdquo; 게 아니라 &amp;ldquo;edge case 패턴(머리카락, 투명 배경, anime shading)을 추가로 노출&amp;quot;하는 데 1228장이면 충분했다.&lt;/p&gt;
&lt;h3 id="데이터셋-조직"&gt;데이터셋 조직
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;toonout_dataset/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── train/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── train_generations_20250318_emotion/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── im/ # raw RGB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── gt/ # ground truth alpha mask
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ └── an/ # combined RGBA
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;im/gt/an&lt;/code&gt; 세 폴더 구조가 표준 매팅 데이터셋 형식. 라이선스는 데이터셋이 CC-BY 4.0, 모델 weights는 MIT — 학습 결과를 production에 쓰는 데 제약이 거의 없다.&lt;/p&gt;
&lt;h3 id="repo의-fork-specific-변경"&gt;Repo의 fork-specific 변경
&lt;/h3&gt;&lt;p&gt;Original BiRefNet에서 ToonOut으로 오면서 손본 부분:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bfloat16으로 NaN gradient 회피&lt;/strong&gt; — 원본의 fp16 학습이 안정성 문제를 보였던 듯. &lt;code&gt;train_finetuning.sh&lt;/code&gt;에서 &lt;code&gt;bfloat16&lt;/code&gt;로 통일.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluation script 정정&lt;/strong&gt; — &lt;code&gt;eval_existingOnes.py&lt;/code&gt;의 settings를 고친 &lt;code&gt;evaluations.py&lt;/code&gt; 추가.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5개 fundamental scripts&lt;/strong&gt; — split / train / test / eval / visualize의 표준 파이프라인이 bash entrypoint로 정리됐다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;유틸리티 셋&lt;/strong&gt; — baseline prediction 생성, alpha mask 추출, &lt;strong&gt;Photoroom API 비교 통합&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;마지막 항목이 흥미롭다. Photoroom은 상용 background removal API의 강자인데, ToonOut paper에서 baseline 비교 대상으로 명시했다는 건 &amp;ldquo;academic SOTA + 상용 API + ours&amp;rdquo; 세 축으로 평가했다는 뜻. 학계 논문이 production 평가 관점을 갖췄다.&lt;/p&gt;
&lt;p&gt;GPU 환경 disclaimer도 솔직하다 — &amp;ldquo;RTX 4090 24GB × 2&amp;quot;로 학습. 4090 두 장이면 cloud 1주 정도 비용에 들어가니, 이 정도 fine-tuning은 개인이 재현 가능한 영역.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="popcon에서-toonout을-통합한-방식"&gt;popcon에서 ToonOut을 통합한 방식
&lt;/h2&gt;&lt;p&gt;popcon에서 ToonOut으로 갈아타면서 한 가지 더 배운 것: &lt;strong&gt;ToonOut은 학습 분포에서 회색 배경(#808080)을 가정한다.&lt;/strong&gt; RGBA 입력이 흰색이나 다른 배경 위에 있으면 매팅 결과가 흔들린다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# gpu_worker — ToonOut에 입력하기 전 항상 #808080에 합성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_swap_bg_to_gray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ndarray&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ndarray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Soft white-key compositor: alpha-blend onto #808080.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alpha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;255.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rgb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full_like&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rgb&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;alpha&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;gray&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;astype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이건 &amp;ldquo;training distribution alignment&amp;quot;의 작은 사례다. 모델이 학습한 입력 분포에 맞춰서 입력을 정규화하는 게 inference 시점에서 정확도 차이를 만든다. ToonOut의 README는 직접적으로 명시하지 않지만, training script와 dataset의 &lt;code&gt;an/&lt;/code&gt; 폴더 RGBA 이미지를 보면 학습 시점에 이미 회색 배경에 합성되어 있을 가능성이 높다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="인사이트"&gt;인사이트
&lt;/h2&gt;&lt;p&gt;ToonOut은 &amp;ldquo;도메인 fine-tuning은 이렇게 한다&amp;quot;의 깨끗한 사례다. 핵심 패턴 셋:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;베이스 모델 선정이 절반.&lt;/strong&gt; 일반 매팅에서 이미 SOTA에 가까운 BiRefNet을 base로 잡았기 때문에 1228장으로 충분했다. 만약 base 모델이 약했다면 1만 장으로도 부족했을 것.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;데이터셋 + weights 라이선스 분리.&lt;/strong&gt; Dataset CC-BY, weights MIT. 다른 사람이 이 weights를 production에 쓰는 데 제약이 없고, 데이터셋도 academic/commercial 양쪽에 열려 있다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inference 시점의 input distribution alignment.&lt;/strong&gt; 학습 분포에 맞게 입력을 정규화하는 작은 step(여기선 회색 배경 합성)이 inference 정확도를 결정짓는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;BiRefNet의 News 타임라인 자체도 학습 자료다. 학계 모델이 어떻게 production-grade로 진화하는지 — dynamic resolution, attention 백엔드 교체, 8x foreground refine 가속 — 한 줄씩 따라가면 1년치 maintenance pattern이 보인다.&lt;/p&gt;
&lt;p&gt;다음에 살펴볼 것: ToonOut paper(arXiv:2509.06839)의 evaluation methodology, BiRefNet_dynamic의 dynamic resolution 학습 구현 디테일, 그리고 popcon에서 매팅 결과의 quality A/B 메트릭 (이전 모델 vs ToonOut).&lt;/p&gt;</description></item></channel></rss>