VLM-to-Metadata: AI ์ผํ ์์ด์ ํธ ๊ตฌ์ถ์ ์ ์
Pickle AI๊ฐ Vision-at-the-Gate๋ก VLM ์ถ๋ก ๋น์ฉ์ 90% ์ ๊ฐํ ๋ฐฉ๋ฒ.
ํจ์ ์ํ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค. ์ ์ ๊ฐ ๋ฌป์ต๋๋ค: "๋น์ทํ์ง๋ง ๋ ํฌ๋ฉํ ๊ฑธ ์ฐพ์์ค." ๋จ์ํ ๋ฐฉ๋ฒ? ๋งค ๊ฒ์๋ง๋ค ์ด๋ฏธ์ง๋ฅผ Vision-Language Model์ ์ ์กํฉ๋๋ค.
์ค์๊ฐ VLM ์ถ๋ก ์ ์์ธํ ๊ฒฝ์ ํ: ์ถํํฉ๋๋ค โ ์ฟผ๋ฆฌ ํ๋์ $0.03๊ณผ 6์ด์ ๋ ์ดํด์๋ฅผ ํ์ ์ต๋๋ค. ์ด๊ฑธ ์ผ์ผ 10,000๊ฑด ๊ฒ์์ผ๋ก ํ์ฅํ๋ฉด ์ถ๋ก ๋น์ฉ๋ง์ผ๋ก ํ๋ฃจ $300์ด ์ฆ๋ฐํฉ๋๋ค.
๐ฅ ๋ฌธ์ : ์ค์๊ฐ VLM ์ถ๋ก ์ ์ค์ผ์ผํ์ง ์๋๋ค
๋๋ถ๋ถ์ AI ์ ํ ๋ฐ๋ชจ๊ฐ ํธ๋ฆฌํ๊ฒ ๋ฌด์ํ๋ ๋ถํธํ ์ง์ค์ด ์์ต๋๋ค: Vision-Language Model์ ๋๊ท๋ชจ์์ ๊ฒฝ์ด์ ์ผ๋ก ๋น์๋๋ค.
Pickle AI๊ฐ "์ ์ฌ ์์ดํ
์ฐพ๊ธฐ" ๊ธฐ๋ฅ์ ์ฒ์ ํ๋กํ ํ์ดํํ์ ๋, ์ํคํ
์ฒ๋ ๋จ์ํ์ต๋๋ค: ์ ์ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ํ ์ด๋ฏธ์ง๋ฅผ ์ฒจ๋ถํ๊ณ , ๋ ๋ค claude-sonnet-4-5-20250929์ ๋ณด๋ด๊ณ , ์๋ต์ ๋ฐํํฉ๋๋ค.
๋ฐ๋ชจ์์๋ ์๋ฆ๋ต๊ฒ ์๋ํ์ต๋๋ค. ํ๋ก๋์ ์์๋ ์ฌ์์ ์ผ๋ก ๋น๊ฒฝ์ ์ ์ด์์ต๋๋ค.
| ์งํ | ์ค์๊ฐ VLM | ๊ตฌ์กฐ์ ๋ฉํ๋ฐ์ดํฐ ์ฟผ๋ฆฌ |
|---|---|---|
| ๊ฒ์๋น ๋น์ฉ | $0.030 | $0.0001 |
| 10k ๊ฒ์๋น ๋น์ฉ | $300.00 | $1.00 |
| ๋ ์ดํด์ | 3.5โ6.0s | 45ms |
| ๊ฒฐ์ ๋ก ์ฑ | ๋น๊ฒฐ์ ์ | ๊ฒฐ์ ์ |
| ์บ์ฑ ๊ฐ๋ฅ์ฑ | โ ๋ถ๊ฐ | โ ์์ ์ง์ |
| ์ค์ผ์ผ๋ง ํน์ฑ | ์ ์ ๋น O(n) | ์์ดํ ๋น O(1) |
๋งค ์ฟผ๋ฆฌ๋ง๋ค ์ค์๊ฐ VLM์ ๋๋ฆฌ๋ ๊ฒ์ ๊ณ ๊ฐ์ด ์ง๋๊ฐ ๋๋ง๋ค ์๋ฆฌํธ ๋ฏธ์ ํ๋ก ๊ฐ๋ฅผ ๋งค์ฅ ํต๋ก์ ์ธ์๋๊ณ ์ ์ธ ๋ฅผ ๋ถ์ํ๊ฒ ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. Vision-at-the-Gate๋ ํ๋ก ๊ฐ๊ฐ ์ฐฝ๊ณ ์์ ํ ๋ฒ ์์ธํ ์คํ ์ํธ๋ฅผ ์์ฑํ๊ณ , ๋น ๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ณ ๊ฐ์ ์๋ํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
๐งช ์ง์ ์ฒดํ: Vision-at-the-Gate ์๋ฎฌ๋ ์ดํฐ
์ํคํ ์ฒ๋ฅผ ํ๊ณ ๋ค๊ธฐ ์ ์, ์ฐจ์ด๋ฅผ ์ง์ ๊ฒฝํํด ๋ณด์ธ์:
๐ก TIP "Simulate Metadata Extraction"์ ๋จผ์ ํด๋ฆญํ์ฌ 13๊ฐ์ง ๊ตฌ์กฐ์ Fashion DNA ํ๊ทธ๊ฐ ๋จ์ผ ํจ์ค๋ก ์ถ์ถ๋๋ ๊ณผ์ ์ ํ์ธํ์ธ์. ๊ทธ๋ฐ ๋ค์ "Reset"์ ๋๋ฅด๊ณ "Simulate Real-time VLM"์ ์๋ํ์ฌ 6์ด ๋ ์ดํด์ ํ๋ํฐ๋ฅผ ์ฒด๊ฐํด ๋ณด์ธ์.
๐ ์ํคํ ์ฒ: Vision-at-the-Gate
ํต์ฌ ์ธ์ฌ์ดํธ๋ ๊ธฐ๋ง์ ์ผ๋ก ๋จ์ํฉ๋๋ค: ์ดํด ๋จ๊ณ์ ์ถ๋ก ๋จ๊ณ๋ฅผ ๋ถ๋ฆฌํ๋ผ.
VLM์ **๋ฌธ์ง๊ธฐ(Gatekeeper)**์ด์ง, ๋งค๋ฒ ํธ์ถ๋๋ ์๋น์ค๊ฐ ์๋๋๋ค. ์ธ์ ์์ ์์ ํ ๋ฒ ์คํ๋ฉ๋๋ค. ๊ทธ ์ดํ์ ๋ชจ๋ ๋ค์ด์คํธ๋ฆผ ์์ โ ๊ฒ์, ์ถ์ฒ, ๊ฐ์ธํ โ ์ ํ ์คํธ ์ ์ฉ LLM ๋น์ฉ์ผ๋ก ๊ตฌ์กฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์ฉํฉ๋๋ค.
๐งฌ ๋ฅ ํ๊น : ํจ์ DNA ๋ถํด
claude-sonnet-4-5-20250929 ๋ชจ๋ธ์ ๋จ์ผ ์ด๋ฏธ์ง ์ค์บ์ผ๋ก 13๊ฐ์ง ๊ตฌ์กฐ์ ์์ฑ์ ์ถ์ถํฉ๋๋ค:
import anthropic import base64 client = anthropic.Anthropic() def extract_fashion_dna(image_path: str) -> dict: """์ธ์ ์ ๋จ 1ํ ์คํ๋๋ VLM ์ถ์ถ ํจ์.""" image_data = base64.standard_b64encode( open(image_path, "rb").read() ).decode("utf-8") response = client.messages.create( model="claude-sonnet-4-5-20250929", max_tokens=1024, messages=[{ "role": "user", "content": [ {"type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": image_data, }}, {"type": "text", "text": """์ด ํจ์ ์์ดํ ์ ๋ถ์ํ์ธ์. ์ ํจํ JSON๋ง ๋ฐํ: { "primary_color": "<dominant color>", "secondary_color": "<accent color or null>", "material": "<primary fabric>", "material_weight": "<light|medium|heavy>", "silhouette": "<fitted|relaxed|boxy|oversized>", "fit_type": "<slim|regular|relaxed|oversized>", "pattern": "<solid|striped|plaid|floral|graphic>", "formal_index": <float 0.0-5.0>, "warmth_index": <float 0.0-5.0>, "season": ["<applicable seasons>"], "occasion": ["<suitable occasions>"], "layer_compatibility": <float 0.0-1.0>, "style_tags": ["<style descriptors>"] }"""}, ], }], ) return json.loads(response.content[0].text)
์ด ๋จ์ผ ํจ์ ํธ์ถ์ ๋น์ฉ์ ์ด๋ฏธ์ง๋น ์ฝ $0.003 โ ๊ทธ๋ฆฌ๊ณ ๋จ ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค.
ํจ์ DNA์ 4๋ ์ถ
| ์ถ | ์์ฑ | ๋ชฉ์ |
|---|---|---|
| ์์ & ์์ฌ | primary_color, secondary_color, material, material_weight | ๋ฌผ๋ฆฌ์ ์์ฑ ๊ธฐ๋ฐ ํํฐ๋ง |
| ์คํ์ผ ํ๊ทธ | silhouette, fit_type, pattern, style_tags | ๋ฏธํ์ ๋ถ๋ฅ ๋ฐ ๋งค์นญ |
| TPO / Formal Index | formal_index, occasion | ๋งฅ๋ฝ ์ธ์ ๊ฒ์์ ์ํ TPO ์ค์ฝ์ด๋ง |
| ๋ณด์จ์ฑ / ๊ณ์ ์ฑ | warmth_index, season, layer_compatibility | ๊ธฐํ ์ธ์ ์ถ์ฒ |
๐ ๋ฐ์ดํฐ ์ํคํ ์ฒ: pgvector ์ค์ฌ ์ค๊ณ
| Vector Type | Dim | ์ฉ๋ | ์ํ |
|---|---|---|---|
style_dna_vector | 32 | ๊ฐ์ธํ ์ทจํฅ ๋ชจ๋ธ๋ง โ ์ ์ ์คํ์ผ DNA ๋งค์นญ | โ Active |
description_embedding | 1536 | OOTD ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ โ ํ ์คํธ+๋ฒกํฐ ๋ณตํฉ ์ฟผ๋ฆฌ | โ Active |
image_embedding | 512 | ์๊ฐ์ ์ ์ฌ๋ ๊ฒ์ โ CLIP ๊ธฐ๋ฐ ์ด๋ฏธ์ง ๋งค์นญ | ๐ Roadmap |
ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ ์ฟผ๋ฆฌ
SELECT p.id, p.title, p.fashion_dna, 1 - (p.style_dna_vector <=> $1) AS style_similarity, 1 - (p.description_embedding <=> $2) AS text_similarity FROM products p WHERE p.fashion_dna->>'material' = 'denim' AND (p.fashion_dna->>'formal_index')::float BETWEEN 1.5 AND 3.5 ORDER BY 0.6 * (1 - (p.style_dna_vector <=> $1)) + 0.4 * (1 - (p.description_embedding <=> $2)) DESC LIMIT 20;
๊ตฌ์กฐ์ WHERE ์ ์ด ํ๋ ํํฐ(์์ฌ, ์์ฆ)๋ฅผ ์ฒ๋ฆฌํ๊ณ , ORDER BY๊ฐ ๋ฒกํฐ ์ ์ฌ๋ ์ ์๋ฅผ ๋ธ๋ ๋ฉํฉ๋๋ค. VLM ํธ์ถ ์ ๋ก. Sub-50ms ์๋ต.
๐ ๊ฒฝ์ ์ฑ: 90% ๋น์ฉ ์ ๊ฐ
50,000๊ฐ ์ํ, ์ผ์ผ 10,000๊ฑด ๊ฒ์ ๊ธฐ์ค ํ๋ก๋์ ๋ฐฐํฌ ๋น์ฉ ๋ถ์:
| ์ ๋ต | 10k ๊ฒ์๋น ๋น์ฉ | ์๊ฐ (30๋ง๊ฑด) | ์ฐ๊ฐ |
|---|---|---|---|
| ์ค์๊ฐ VLM | $300/์ผ | $9,000 | $108,000 |
| Vision-at-the-Gate | $1/์ผ | $30 | $360 |
| ์ ๊ฐ์ก | $107,640 (99.7%) |
$155์ ์ผํ์ฑ ์ธ์ ๋น์ฉ์ ํ๋ก๋์ ํธ๋ํฝ 12์๊ฐ ๋ง์ ํ์๋ฉ๋๋ค.
"AI ์ํคํ ์ฒ์์ ๋น์ (Vision)์ ์ดํด๋ฅผ ์ํ ๊ฒ์ด์ง๋ง, ๋ฉํ๋ฐ์ดํฐ(Metadata)๋ ํ์ฅ์ ์ํ ๊ฒ์ด๋ค."
๐บ ๋ก๋๋งต: Text-DNA์์ ์์ธก์ ํ๋ ์ด์ ๊น์ง
Phase 1 โ Text-DNA Search (ํ์ฌ): VLM ์ถ์ถ ๋ฉํ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ํํฐ๋ง + ํ ์คํธ ๊ธฐ๋ฐ ์์ด์ ํธ ์ถ๋ก .
Phase 2 โ Hybrid Search (๋ค์): pgvector ์ฝ์ฌ์ธ ์ ์ฌ๋ + BM25 ํ ์คํธ ์ค์ฝ์ด ๊ฒฐํฉ.
Phase 3 โ Visual Similarity: CLIP ๊ธฐ๋ฐ image_embedding์ผ๋ก ์ด๋ฏธ์ง ์
๋ ฅ๋ง์ผ๋ก ์ ์ฌ ์์ดํ
๊ฒ์.
Phase 4 โ Predictive Curation: ์ ์ ํ๋ ํจํด ๊ธฐ๋ฐ ๋ฅ๋์ ์คํ์ผ ํ๋ ์ด์ .
๐ง ๊ฒฐ๋ก : ์ฒซ ๋ ๋ถํฐ ์ค์ผ์ผ์ ์ํด ์ค๊ณํ๋ผ
VLM์ ๋ฐํ์ ์๋น์ค๋ก ์ทจ๊ธํ๊ณ ์ถ์ ์ ํน์ด ์์ต๋๋ค. ํ์ง๋ง ์๋น์ ๊ท๋ชจ์์ ์ด ๋ฉํ ๋ชจ๋ธ์ ํ์ฐ์ ์ด๋ํฉ๋๋ค.
- ์ ๊ตฌ์์ ํ ๋ฒ ์ค์บ โ ๊ฐ์ฅ ๊ฐ๋ ฅํ VLM์ผ๋ก.
- DNA๋ฅผ ์์ํ โ ๊ตฌ์กฐ์ ๋ฉํ๋ฐ์ดํฐ + ๋ฒกํฐ๋ฅผ pgvector์.
- ์ ๋ ดํ๊ฒ ์ถ๋ก โ ๊ฒ์ ์ ํ ์คํธ ์ ์ฉ LLM์ผ๋ก.
- ์์ ๋กญ๊ฒ ์ค์ผ์ผ โ ์ ์ ์ฆ๊ฐ๊ฐ VLM ๋น์ฉ์ ๋๋ฆฌ์ง ์์.
์ง์ ํ ๋น์ฉ ์ต์ ํ๋ ๋ ์ผ ๋ชจ๋ธ์ ์ฐพ๋ ๊ฒ์ด ์๋๋๋ค โ ๋น์ผ ๋ชจ๋ธ์ ๋ ์ ๊ฒ ํธ์ถํ๋ ๊ฒ์ ๋๋ค.
Updated 5/1/2026