코드 생성을 넘어: OmniSVG가 Vision-Language Models를 통해 벡터 그래픽을 재정의하는 방법
요약
Fudan University와 StepFun 연구팀이 개발한 OmniSVG는 Vision-Language Models를 활용해 고품질 벡터 그래픽을 생성하는 엔드 투 엔드 프레임워크입니다. 기존의 최적화 방식이나 LLM 코드 생성 방식이 가진 좌표 환각 및 비효율성을 해결하기 위해 구조화된 토큰 시퀀스 예측 방식을 도입했습니다.
핵심 포인트
- Qwen2.5-VL 기반의 네이티브 Vision-Language Models 활용
- 복잡한 XML 대신 5가지 핵심 경로 명령으로 구조 평탄화
- 색상 정보를 명시적 채우기 토큰(F)으로 처리하여 정확도 향상
- 기존 방식의 좌표 환각 및 GPU 전력 소모 문제 해결
안녕하세요, Shrijith Venkatramana입니다. 저는 모든 커밋에서 실행되는 AI 코드 리뷰어인 git-lrc를 구축하고 있습니다. 개발자들이 이 프로젝트를 발견할 수 있도록 Star Us를 눌러주세요. 꼭 사용해 보시고 제품 개선을 위한 피드백을 공유해 주세요.
벡터 그래픽(Vector graphics)은 현대 UI/UX 디자인, CAD 시스템, 그리고 디지털 일러스트레이션의 성배와 같습니다. 고정된 픽셀 그리드로 구성된 래스터 이미지(Raster images, JPEG, PNG 등)와 달리, Scalable Vector Graphics (SVG)는 베지에 곡선(Bézier curves), 다각형(polygons), 채우기 속성(fill attributes)과 같은 기하학적 형상을 사용합니다. 이들은 8K 해상도에서도 선명하게 렌더링되며 무게는 불과 몇 킬로바이트(kilobytes)에 불과합니다.
하지만 SVG 생성을 자동화하는 것은 개발자들에게 항상 큰 고충이었습니다:
- 최적화 방법 (Optimization methods) (DiffVG와 같은 방식)은 벡터화를 반복적인 추측 게임으로 취급합니다. 이 방식은 수천 개의 겹치는 앵커 포인트(anchor points)를 가진, 지저분하고 편집 불가능한 SVG 코드를 생성하며, 이미지 하나를 만들 때마다 막대한 GPU 전력을 소모합니다.
- LLM 코드 생성 방법 (LLM code-generation methods) (Chat2SVG 또는 StarVector와 같은 방식)은 원시 XML 태그를 직접 작성하려고 시도합니다. 표준 AI 토크나이저(tokenizer)가 XML 태그와 좌표 숫자를 무작위로 분리하기 때문에, 모델은 "좌표 환각 (coordinate hallucination)" 현상을 겪으며 디자인이 복잡해질 때마다 엄격한 문자 제한에 부딪힙니다.
Fudan University와 StepFun의 연구팀은 OmniSVG를 소개했습니다. 이는 네이티브 Vision-Language Models (Qwen2.5-VL)를 기반으로 구축된 엔드 투 엔드(end-to-end) 프레임워크로, 벡터 생성을 단순한 원시 텍스트 작성이 아닌 구조화된 토큰 시퀀스 예측(structured token sequence prediction)으로 취급합니다.
1. 상위 수준의 직관: 텍스트 대신 기하학을 토큰화하기
표준 대규모 언어 모델 (LLMs)은 SVG를 <path d="M 10 20 C 30 40 ..."/>와 같은 긴 원시 텍스트 문자열로 간주합니다. 일반적인 AI 토크나이저에게 <path, d=", 10은 서로 연결되지 않은 서브 워드(sub-word) 조각들입니다. AI는 XML 구문 규칙, 부동 소수점 수학, 그리고 공간 기하학을 동시에 학습해야 합니다.
OmniSVG는 패러다임을 바꿉니다:
-
구조 평탄화 (Flatten the Structure): 모든 복잡한 그룹화 태그, 변환 (transformations), 인라인 스타일 (inline styles)을 제거하여 단순하고 평탄한 그리기 명령으로 변환합니다.
-
원자적 명령 (Atomic Commands): 모든 벡터 그래픽은 다섯 가지 핵심 경로 명령 (path commands)으로 단순화됩니다:
- M (Move To)
- L (Line To)
- C (Cubic Curve)
- A (Arc)
- Z (Close Path)
-
명시적 채우기 토큰 (Explicit Fill Token, F): 색상 정보는 그리기 순서 내부에 직접적인 헥사(hex) 채우기 명령 (F)으로 매핑됩니다. 이는 색상을 복잡한 CSS 속성이 아닌, 또 다른 하나의 그리기 단계로 취급합니다.
+-----------------------------------------------------------------------+
| OmniSVG 파이프라인 (Pipeline) |
| |
...
공간 기하학 (spatial geometry)을 저수준 XML 구문 (low-level XML syntax)과 분리함으로써, 기반 모델은 시각적 레이아웃 (visual layout)과 그리기 순서 (drawing order)에 완전히 집중할 수 있습니다.
2. 쉬운 설명으로 풀어보는 수학: 좌표 압축 및 경제성
공간 토큰 압축 (Spatial Token Compression)
전통적인 방식은 가로 ($X$) 및 세로 ($Y$) 좌표를 별개의 숫자로 토큰화했습니다. 만약 SVG 경로에 100개의 점이 있다면, 그 점들이 어디에 위치하는지 지정하는 데만 최소 200개의 토큰이 소요됩니다.
OmniSVG는 모든 SVG를 표준화된 200x200 픽셀 캔버스 그리드에 맞춥니다. 모든 점에 대해 두 개의 별개 숫자를 보내는 대신, OmniSVG는 간단한 그리드 수학을 사용하여 두 좌표를 하나의 숫자 인덱스로 병합합니다:
결합된 토큰 인덱스 (Combined Token Index) = (X 좌표 * 캔버스 너비) + Y 좌표
너비 200픽셀, 높이 200픽셀인 캔버스의 경우, 이 공식은 캔버스 위의 가능한 모든 $(X, Y)$ 지점을 0에서 39,999 사이의 단일 고유 ID 번호로 변환합니다.
이 단일 ID 번호를 실시간으로 다시 2D 좌표로 변환하는 방법은 다음과 같습니다:
- X 좌표: 토큰 ID를 캔버스 너비(200)로 나누고 소수점을 버림 합니다.
- Y 좌표: 토큰 ID를 캔버스 너비(200)로 나눈 나머지 값을 취합니다.
간이 토큰 절감 계산 (Back-of-the-Envelope Token Savings)
시작점, 두 개의 제어 핸들(control handles), 끝점, 그리고 빨간색 채우기 색상을 가진 단일 매끄러운 곡선 세그먼트를 작성한다고 가정해 보겠습니다:
-
Raw XML 텍스트 문자열:
<path d="M 120 45 C 130 50 140 85 150 90 Z" fill="#FF5733"/> -
표준 토크나이저(Tokenizer) 개수: 22 ~ 28개 토큰.
-
OmniSVG 방식:
-
명령어: M, C, Z, F (4개 토큰)
-
시작점 (120과 45를 결합): 1개 토큰
-
곡선 핸들 포인트 및 끝점: 3개 토큰
-
빨간색 색상 코드 (#FF5733): 1개 토큰
-
총 토큰 개수: 9개 토큰 (총 토큰 수의 65% 감소!).
시스템 경제성 및 운영 효율성 (System Economics & Operational Efficiency)
AI 모델이 콘텐츠를 생성할 때, 계산 작업량과 지연 시간(latency)은 토큰 시퀀스(token sequence)의 총 길이에 따라 급격히 증가합니다. 시퀀스가 짧을수록 렌더링 속도가 현저히 빨라지고 서버 비용이 낮아집니다.
토큰 시퀀스 길이 vs. 추론 지연 시간 (개념도)
지연 시간 (Latency)
^
...
| 지표 (Metric) | DiffVG / 실시간 최적화 (Live Optimization) | Raw XML LLM 생성 | OmniSVG (4B/8B 모델) |
|---|---|---|---|
| 방법 유형 (Method Type) | 반복적인 그래디언트 추측 (Repeated Gradient Guesswork) | 표준 텍스트 LLM | 구조화된 시각-언어 모델 (Structured Vision-Language Model) |
| ... |
3. OmniSVG가 그리는 법을 배우는 방식
OmniSVG는 표준 "다음 토큰 예측 (next-token prediction)" 방식을 사용하여 Qwen2.5-VL 시각-언어 모델(Vision-Language Model)을 미세 조정(fine-tunes)합니다. 이는 LLM이 텍스트를 작성할 때 사용하는 것과 정확히 동일한 기술이지만, 벡터 명령에 적용된 것입니다.
- 입력 컨텍스트 (Input Context): 모델은 사용자의 지시 사항(예: "파란색 새 아이콘"과 같은 텍스트 프롬프트 또는 참조 이미지)을 받습니다.
- 순차적 예측 (Sequential Prediction): 지금까지 그린 내용을 바탕으로, 모델은 가장 가능성이 높은 단일 다음 그리기 명령어 또는 좌표 토큰을 예측합니다.
- 학습 목표 (Training Objective): 학습 과정에서 모델은 수백만 개의 완성된 벡터 그래픽을 보여주며, 예측한 토큰과 실제 타겟 토큰 사이의 차이를 최소화하도록 내부 가중치(weights)를 조정합니다.
4. 확장성: MMSVG-2M & MMSVG-Bench
OmniSVG를 학습시키기 위해 저자들은 세 가지 핵심 카테고리에 걸쳐 200만 개의 고품질 SVG 에셋을 포함하는 데이터셋인 MMSVG-2M을 구축했습니다.
- MMSVG-Icon (110만 개 에셋): 웹 아이콘, 인터페이스 심볼, UI 요소.
- MMSVG-Illustration (50만 개 에셋): 풍부한 색상의 플랫 그래픽 (flat graphics), 웹 배너, 벡터 아트워크.
- MMSVG-Character (40만 개 에셋): 정교한 벡터 애니메이션 아트 및 캐릭터 디자인.
+-------------------------------------------------------------------+
| MMSVG-2M 데이터셋 구성 (Breakdown) |
| |
...
벤치마크 결과 (MMSVG-Bench)
OmniSVG는 두 가지 주요 작업, 즉 텍스트 설명으로부터 SVG 생성하기와 래스터 이미지 (raster images)를 SVG로 변환하기를 통해 기존 도구들과 비교 테스트되었습니다.
Text-to-SVG 작업
- 시각적 품질 (FID가 낮을수록 좋음): OmniSVG는 137.40을 기록하며, VectorFusion (250.77) 및 Chat2SVG (190.87)와 같은 기존 텍스트 모델들을 압도적으로 능가했습니다.
- 텍스트 정렬 (Text Alignment): OmniSVG는 60,000회 이상의 반복 (iterations)이 필요한 최적화 도구들과 달리, **4,000개 미만의 토큰 (tokens)**으로 출력을 생성하면서도 높은 프롬프트 정확도를 유지했습니다.
Image-to-SVG 벡터화 작업
- 시각적 유사도 (SSIM이 높을수록 좋음): OmniSVG는 0.950의 구조적 유사도 점수를 달성하여, DiffVG (0.954)와 같은 고가의 최적화 도구와 대등한 성능을 보이면서도 지저분한 형태 대신 깔끔하고 정돈된 벡터 경로 (vector paths)를 생성했습니다.
- 대형 모델 대비 정확도: OmniSVG는 정교한 이미지를 벡터화하는 데 있어 GPT-4o의 직접적인 SVG 출력 (0.792 SSIM) 및 StarVector (0.881 SSIM)를 크게 앞질렀습니다.
5. 토큰화 절제 연구 통찰 (Tokenization Ablation Insights)
좌표와 색상을 커스텀 토큰으로 결합하는 것이 성공의 비결임을 증명하기 위해, 저자들은 네 가지 모델 변형 (variants)을 비교했습니다:
| 설정 (Configuration) | 시각적 오류 (Visual Error) (낮을수록 좋음) | 출력 정확도 (Output Accuracy) (높을수록 좋음) | 평균 토큰 수 (Average Token Count) |
|---|---|---|---|
| Raw XML Text (토큰화 없음) | 높은 오류 (218.76 FID) | 낮은 정확도 (0.718 SSIM) | 18,500 tokens |
| ... |
핵심 요약 (Key Takeaway): $X$와 $Y$ 좌표를 단일 스칼라 토큰 (scalar tokens)으로 결합함으로써 파일 크기와 시퀀스 길이 (sequence lengths)를 74% 줄였으며, 결과물인 그래픽의 시각적 정확도는 두 배로 높였습니다.
6. 실습 예제: 토크나이저 (Tokenizer) 구현
다음은 OmniSVG가 2D 좌표와 그리기 명령 (drawing commands)을 이산 토큰 (discrete tokens)으로 압축하는 방법을 보여주는 Python 스크립트입니다:
import re
class OmniSVGTokenizer:
...
7. 벡터 그래픽의 향후 전망은?
OmniSVG는 기하학적 구조 (geometry)를 가공되지 않은 코드 텍스트가 아닌, 구조화된 그리기 동작 (drawing actions)의 시퀀스로 취급할 때 AI 벡터 생성이 가장 효과적으로 작동함을 증명합니다. 시각-언어 모델 (Vision-Language Models)을 스마트한 공간 토큰화 (spatial tokenization)와 결합함으로써, 우리는 몇 분이 아닌 단 몇 초 만에 깔끔하고 편집 가능한 벡터 그래픽을 생성할 수 있습니다.
현재 개발 워크플로에서 SVG 벡터화 (vectorization)를 어떻게 처리하고 계신가요? 전통적인 이미지 처리 라이브러리 (image processing libraries), 최적화 스크립트 (optimization scripts), 또는 수동 디자인 도구에 의존하시나요? AI가 생성한 SVG 코드에서 가장 자주 겪는 어려움은 무엇인가요? 아래 댓글로 의견을 공유해 주세요!
*AI 에이전트는 코드를 빠르게 작성합니다. 하지만 당신에게 알리지 않고 조용히 로직을 제거하거나, 동작을 변경하고, 버그를 유발하기도 합니다. 이는 종종 운영 환경 (production)에서 발견되곤 합니다.
git-lrc가 이를 해결합니다. git commit에 후킹하여 모든 diff를 반영하기 전에 검토합니다. 60초면 설정이 완료됩니다. 완전히 무료입니다.*
모든 피드백과 기여자를 환영합니다! 온라인에서 소스 코드를 확인할 수 있으며, 누구나 사용할 준비가 되어 있습니다.
GitHub logo HexmosTech / git-lrc
Git Commit에서 실행되는 무료 마이크로 AI 코드 리뷰
| 🇩🇰 Dansk | 🇪🇸 Español | 🇮🇷 Farsi | 🇫🇮 Suomi | 🇯🇵 日本語 | 🇳🇴 Norsk | 🇵🇹 Português | 🇷🇺 Русский | 🇦🇱 Shqip | 🇨🇳 中文 | 🇮🇳 हिन्दी |
git-lrc
커밋에서 실행되는 무료 마이크로 AI 코드 리뷰
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기