- models.md: Supported models by tier (Quick/Standard/Detailed/Extreme) - captioning.md: Complete VLM guide including: - Captioning approaches (Booru tags, e621, natural language, hybrid) - Model-specific recommendations for SD1.5/SDXL/Flux/Z-Image - Detailed model specs for 14+ captioning models - Vision model landscape (DINOv2, InternVL, SigLIP, etc.) - Workflow patterns and ComfyUI nodes reference Generated with Claude Code
934 lines
27 KiB
Markdown
934 lines
27 KiB
Markdown
# Image Captioning with Vision Language Models (VLMs)
|
||
|
||
A comprehensive guide to VLMs for image captioning, with model-specific details and best practices.
|
||
|
||
## Table of Contents
|
||
- [What are VLMs?](#what-are-vlms)
|
||
- [Why VLMs for Captioning?](#why-vlms-for-captioning)
|
||
- [Captioning Approaches](#captioning-approaches)
|
||
- [Booru Tags (Danbooru/Gelbooru)](#booru-tags-danboorugelbooru)
|
||
- [e621 Tags](#e621-tags)
|
||
- [Natural Language Captions](#natural-language-captions)
|
||
- [Hybrid Approach](#hybrid-approach)
|
||
- [Model-Specific Recommendations](#model-specific-recommendations)
|
||
- [Best Practices](#best-practices)
|
||
- [Model-Specific Details](#model-specific-details)
|
||
- [Quick Tier](#quick-tier)
|
||
- [Standard Tier](#standard-tier)
|
||
- [Detailed Tier](#detailed-tier)
|
||
- [Extreme (API) Tier](#extreme-api-tier)
|
||
- [Prompting Techniques](#prompting-techniques)
|
||
- [Vision Model Landscape](#vision-model-landscape)
|
||
- [Vision Foundation Models](#vision-foundation-models)
|
||
- [Contrastive Vision-Language Models](#contrastive-vision-language-models)
|
||
- [Diffusion-Optimized Captioners](#diffusion-optimized-captioners)
|
||
- [Tag-Based Models](#tag-based-models)
|
||
- [Workflow Patterns](#workflow-patterns)
|
||
- [Common Pitfalls](#common-pitfalls)
|
||
|
||
---
|
||
|
||
## What are VLMs?
|
||
|
||
Vision Language Models (VLMs) are multimodal AI models that can process both images and text simultaneously. Unlike traditional image classifiers that output fixed labels, VLMs can:
|
||
|
||
- Generate natural language descriptions of images
|
||
- Answer questions about visual content
|
||
- Follow specific formatting instructions
|
||
- Understand context and nuance
|
||
|
||
**Key architectures include:**
|
||
- **Encoder-Decoder**: Image encoder (ViT) + Text decoder (LLM)
|
||
- **Cross-Modal Fusion**: Deep integration of visual and text features
|
||
- **Mixture of Experts (MoE)**: Specialized sub-networks for different tasks
|
||
|
||
## Why VLMs for Captioning?
|
||
|
||
### For Diffusion Model Training
|
||
|
||
Automated descriptive captions enable training diffusion models on wider ranges of images without manual labeling. High-quality captions improve generation quality (ref: DALL-E 3 paper).
|
||
|
||
### Caption Quality Matters
|
||
|
||
| Caption Quality | Training Result |
|
||
|-----------------|-----------------|
|
||
| Generic tags | Model learns surface patterns |
|
||
| Detailed descriptions | Model learns relationships, composition, style |
|
||
| Structured format | Consistent, predictable outputs |
|
||
|
||
---
|
||
|
||
## Captioning Approaches
|
||
|
||
Different diffusion models expect different caption formats. Choosing the right approach is critical for training quality.
|
||
|
||
### Booru Tags (Danbooru/Gelbooru)
|
||
|
||
Booru tags are structured metadata keywords from anime imageboard sites. They use a comma-separated format with underscores for multi-word concepts.
|
||
|
||
**Format:**
|
||
```
|
||
1girl, long_hair, purple_hair, blue_eyes, school_uniform, sitting, classroom, looking_at_viewer
|
||
```
|
||
|
||
**Tag Categories:**
|
||
| Category | Examples |
|
||
|----------|----------|
|
||
| Subject | `1girl`, `1boy`, `multiple_girls`, `solo` |
|
||
| Hair | `long_hair`, `blonde_hair`, `twintails`, `ponytail` |
|
||
| Eyes | `blue_eyes`, `red_eyes`, `heterochromia` |
|
||
| Clothing | `school_uniform`, `dress`, `armor`, `nude` |
|
||
| Expression | `smile`, `blush`, `crying`, `angry` |
|
||
| Pose | `sitting`, `standing`, `lying`, `from_behind` |
|
||
| Setting | `outdoors`, `classroom`, `beach`, `night` |
|
||
| Meta | `highres`, `absurdres`, `masterpiece`, `best_quality` |
|
||
|
||
**Strengths:**
|
||
- Precise control over specific attributes
|
||
- Well-understood by anime models (SD1.5, Pony, NAI)
|
||
- Extensive tag vocabularies available
|
||
- Fast to generate with taggers (WD14, DeepDanbooru)
|
||
|
||
**Limitations:**
|
||
- Ambiguity: "1girl, 1boy, kimono" - who wears the kimono?
|
||
- No relationship/composition information
|
||
- Limited for realistic/photographic content
|
||
- Newer models (Flux, SD3) prefer natural language
|
||
|
||
**Tools:**
|
||
- [WD14 Tagger](https://huggingface.co/SmilingWolf/wd-v1-4-vit-tagger-v2)
|
||
- [DeepDanbooru](https://github.com/KichangKim/DeepDanbooru)
|
||
- [a1111-sd-webui-tagcomplete](https://github.com/DominikDoom/a1111-sd-webui-tagcomplete)
|
||
|
||
---
|
||
|
||
### e621 Tags
|
||
|
||
e621 uses a similar booru-style system but with vocabulary specific to furry/anthropomorphic content.
|
||
|
||
**Format:**
|
||
```
|
||
anthro, female, canine, wolf, blue_fur, yellow_eyes, sitting, forest, solo
|
||
```
|
||
|
||
**Key Differences from Danbooru:**
|
||
| Aspect | Danbooru | e621 |
|
||
|--------|----------|------|
|
||
| Focus | Anime/manga | Furry/anthro |
|
||
| Species tags | Limited | Extensive (`canine`, `feline`, `dragon`) |
|
||
| Body tags | Human-focused | Anthro-focused (`fur`, `scales`, `feathers`) |
|
||
| Rating system | `safe`, `questionable`, `explicit` | `safe`, `questionable`, `explicit` |
|
||
|
||
**Common Tag Categories:**
|
||
| Category | Examples |
|
||
|----------|----------|
|
||
| Species | `canine`, `feline`, `dragon`, `avian`, `equine` |
|
||
| Body | `fur`, `scales`, `feathers`, `anthro`, `feral` |
|
||
| Colors | `blue_fur`, `white_scales`, `orange_feathers` |
|
||
| Features | `wings`, `tail`, `horns`, `claws` |
|
||
|
||
**Conversion:**
|
||
Tools exist to convert between Danbooru and e621 tag formats:
|
||
- [danbooru-e621-tag-list-processor](https://github.com/DraconicDragon/danbooru-e621-tag-list-processor)
|
||
|
||
---
|
||
|
||
### Natural Language Captions
|
||
|
||
Full sentence descriptions that read like natural text. Preferred for newer models.
|
||
|
||
**Format:**
|
||
```
|
||
A young woman with long purple hair and blue eyes sits at a wooden desk in a sunlit classroom. She wears a navy school uniform with a red ribbon and looks directly at the viewer with a gentle smile. Soft afternoon light streams through the windows behind her.
|
||
```
|
||
|
||
**Strengths:**
|
||
- Clear relationships and composition ("woman wearing kimono stands next to man in suit")
|
||
- Better generalization to unseen concepts
|
||
- Required for Flux, SD3, PixArt Sigma
|
||
- Handles complex scenes naturally
|
||
- Better spatial/compositional understanding
|
||
|
||
**Limitations:**
|
||
- Slower to generate (requires VLM)
|
||
- More tokens = higher training cost
|
||
- May be too verbose for some use cases
|
||
- Less precise for specific attributes
|
||
|
||
**Best Practices:**
|
||
- Describe what IS in the image, not what isn't
|
||
- Use clear, complete phrases
|
||
- Include: subject, setting, lighting, mood, colors
|
||
- Be visually grounded (describe what you see)
|
||
|
||
---
|
||
|
||
### Hybrid Approach
|
||
|
||
Combines tags for structure with natural language for context.
|
||
|
||
**Format:**
|
||
```
|
||
1girl, purple_hair, blue_eyes, school_uniform. A young woman sits at her desk in a sunlit classroom, looking at the viewer with a gentle smile. Soft afternoon lighting.
|
||
```
|
||
|
||
**When to Use:**
|
||
- SDXL (handles both reasonably well)
|
||
- When you need precise attributes + context
|
||
- Dual-encoder models (CLIP + T5)
|
||
|
||
**Strategy:**
|
||
- Tags for structural elements: `1girl`, `sitting`, `indoors`
|
||
- Natural language for complex descriptions
|
||
- Keep tags first, then sentences
|
||
|
||
---
|
||
|
||
### Model-Specific Recommendations
|
||
|
||
| Model | Recommended Format | Notes |
|
||
|-------|-------------------|-------|
|
||
| **SD 1.5** | Booru tags | Trained primarily on tagged data |
|
||
| **NAI** | Booru tags | Optimized for Danbooru tags |
|
||
| **Pony** | e621/Booru tags | Trained on e621 + Danbooru |
|
||
| **SDXL** | Hybrid or Tags | Handles both, tags more precise |
|
||
| **Flux** | Natural language | T5 encoder expects sentences |
|
||
| **SD3** | Natural language | Trained on natural captions |
|
||
| **PixArt** | Natural language | Sentence-based training |
|
||
| **Z-Image** | Structured natural language | Long detailed prompts, NO negative prompts |
|
||
|
||
**Flux-Specific Tips:**
|
||
- Use dual captioning: WD14 tags + natural language
|
||
- Captions should match your prompting style
|
||
- Longer, descriptive sentences work best
|
||
- "Clear, complete phrases that are visually grounded"
|
||
|
||
**Z-Image-Specific Tips:**
|
||
- Uses S3-DiT (Scalable Single-Stream Diffusion Transformer) backbone
|
||
- **No negative prompts** - guidance scale is 0.0, negatives are ignored
|
||
- Long, detailed prompts work best (80-250 words, up to 1024 tokens)
|
||
- Structure prompts like camera directions: shot type, subject, clothing, environment, lighting, mood
|
||
- Embed constraints positively: "fully clothed, no watermark, correct anatomy"
|
||
- Excellent for photorealistic generation and bilingual text rendering (English/Chinese)
|
||
- Be very specific - the model is "unopinionated" and needs explicit direction
|
||
|
||
**Z-Image Prompt Structure:**
|
||
```
|
||
[Shot type], [Subject description], [Age/appearance], [Clothing details],
|
||
[Environment/background], [Lighting], [Mood/atmosphere], [Style/medium],
|
||
[Technical notes], [Safety constraints: no watermark, no text, correct anatomy]
|
||
```
|
||
|
||
---
|
||
|
||
## Best Practices
|
||
|
||
### Image Preparation
|
||
1. **Resolution**: Most models work best with 384px-1024px images
|
||
2. **Format**: JPEG, PNG, WebP supported by most models
|
||
3. **Quality**: Clear, well-lit images produce better captions
|
||
4. **Aspect Ratio**: Some models handle varied ratios better than others
|
||
|
||
### Prompting Guidelines
|
||
1. **Be specific** about what you want described
|
||
2. **Provide structure** if you need formatted output
|
||
3. **Use examples** (few-shot) for consistent style
|
||
4. **Place images before text** in the prompt (when possible)
|
||
|
||
### Output Considerations
|
||
1. **Token limits** vary by model (256-4096 typical)
|
||
2. **Temperature 0** for consistent, deterministic output
|
||
3. **Post-processing** may be needed for formatting
|
||
|
||
---
|
||
|
||
## Model-Specific Details
|
||
|
||
---
|
||
|
||
### Quick Tier
|
||
|
||
#### Florence-2-large-PromptGen v2.0
|
||
`MiaoshouAI/Florence-2-large-PromptGen-v2.0`
|
||
|
||
**Architecture**: Sequence-to-sequence with DaViT encoder
|
||
**Parameters**: 0.77B
|
||
**VRAM**: ~1.5 GB
|
||
|
||
**Strengths:**
|
||
- Extremely fast inference (~30ms)
|
||
- State-of-the-art zero-shot captioning (CIDEr 133.0 on COCO)
|
||
- Multiple task modes via prompts
|
||
- Excellent for bulk processing
|
||
|
||
**Limitations:**
|
||
- Limited context understanding for complex scenes
|
||
- May struggle with multiple objects and relationships
|
||
- Less detailed than larger models
|
||
- Watermark recognition not always reliable
|
||
|
||
**Best Prompts:**
|
||
```
|
||
<CAPTION> # Brief caption
|
||
<DETAILED_CAPTION> # More detailed
|
||
<MORE_DETAILED_CAPTION> # Most detailed
|
||
```
|
||
|
||
**Best For:** Initial tagging passes, bulk processing, quick previews
|
||
|
||
---
|
||
|
||
#### BLIP-image-captioning-large
|
||
`Salesforce/blip-image-captioning-large`
|
||
|
||
**Architecture**: ViT-L/16 encoder + text decoder
|
||
**Parameters**: ~470M
|
||
**VRAM**: ~1 GB
|
||
|
||
**Strengths:**
|
||
- Very lightweight and fast
|
||
- Good baseline quality
|
||
- Supports conditional captioning (with text prompts)
|
||
- Real-time capable (milliseconds on GPU)
|
||
|
||
**Limitations:**
|
||
- Less detailed than newer models
|
||
- Basic vocabulary compared to LLM-based models
|
||
- No instruction following
|
||
|
||
**Best Prompts:**
|
||
```python
|
||
# Unconditional
|
||
processor(image, return_tensors="pt")
|
||
|
||
# Conditional (guided)
|
||
processor(image, "a photograph of", return_tensors="pt")
|
||
```
|
||
|
||
**Best For:** Simple baseline, real-time applications, low-resource environments
|
||
|
||
---
|
||
|
||
### Standard Tier
|
||
|
||
#### JoyCaption Beta One (GGUF Q4_K_M)
|
||
`mradermacher/llama-joycaption-beta-one-hf-llava-GGUF`
|
||
|
||
**Architecture**: LLaVA-based (Llama + CLIP)
|
||
**Parameters**: ~7B (quantized to ~4B effective)
|
||
**VRAM**: ~5-7 GB
|
||
|
||
**Strengths:**
|
||
- Built specifically for diffusion training
|
||
- Free, open, and uncensored
|
||
- 10 different caption modes
|
||
- Equal coverage of SFW and NSFW content
|
||
- Broad diversity in training data
|
||
|
||
**Limitations:**
|
||
- Quantized version has some quality loss
|
||
- Slower than Florence-2
|
||
- May be verbose in some modes
|
||
|
||
**Caption Modes:**
|
||
| Mode | Description |
|
||
|------|-------------|
|
||
| `descriptive` | Detailed, verbose descriptions |
|
||
| `straightforward` | Balanced detail (recommended) |
|
||
| `stable_diffusion_prompt` | SD-style tags |
|
||
| `midjourney` | MJ-style prompts |
|
||
| `booru` | Booru tag format |
|
||
|
||
**Best For:** Balanced quality/speed, diffusion training datasets
|
||
|
||
---
|
||
|
||
#### BLIP-2-opt-2.7b
|
||
`Salesforce/blip2-opt-2.7b`
|
||
|
||
**Architecture**: Q-Former bridge + OPT-2.7B LLM
|
||
**Parameters**: ~2.7B
|
||
**VRAM**: ~7 GB
|
||
|
||
**Strengths:**
|
||
- Bridges vision encoder to LLM
|
||
- Conditional captioning with prompts
|
||
- Good instruction following
|
||
- Scalable architecture
|
||
|
||
**Limitations:**
|
||
- Larger than BLIP-1
|
||
- Can be slow on CPU
|
||
|
||
**Best Prompts:**
|
||
```
|
||
"Describe this image in detail."
|
||
"What is shown in this photograph?"
|
||
"Generate a caption for this image:"
|
||
```
|
||
|
||
**Best For:** Conditional captioning, prompt-guided descriptions
|
||
|
||
---
|
||
|
||
#### Qwen2.5-VL-3B-Instruct
|
||
`Qwen/Qwen2.5-VL-3B-Instruct`
|
||
|
||
**Architecture**: Qwen2.5 LLM + Vision encoder
|
||
**Parameters**: 3B
|
||
**VRAM**: ~6-8 GB
|
||
|
||
**Strengths:**
|
||
- Excellent multilingual support
|
||
- Good instruction following
|
||
- Handles varied aspect ratios well
|
||
- Natural language grounding
|
||
|
||
**Limitations:**
|
||
- Smaller than 7B variant
|
||
- Less detailed for complex scenes
|
||
|
||
**Prompt Format:**
|
||
```python
|
||
messages = [
|
||
{
|
||
"role": "user",
|
||
"content": [
|
||
{"type": "image", "image": image_path},
|
||
{"type": "text", "text": "Describe this image in detail."}
|
||
]
|
||
}
|
||
]
|
||
```
|
||
|
||
**Best For:** Multilingual applications, varied aspect ratios
|
||
|
||
---
|
||
|
||
#### Qwen2.5-VL-7B-Instruct (4-bit)
|
||
`Qwen/Qwen2.5-VL-7B-Instruct`
|
||
|
||
**Architecture**: Qwen2.5 LLM + Vision encoder
|
||
**Parameters**: 7B (quantized to ~4B effective)
|
||
**VRAM**: ~6-8 GB with 4-bit quantization
|
||
|
||
**Strengths:**
|
||
- Better quality than 3B
|
||
- Fits in 8GB VRAM with quantization
|
||
- Robust 480px-2560px resolution handling
|
||
- Object detection + grounding support
|
||
|
||
**Limitations:**
|
||
- Slower than smaller variants
|
||
- 4-bit quantization affects quality slightly
|
||
- Object detection accuracy decreases outside optimal resolution
|
||
|
||
**Best For:** Quality-focused with limited VRAM
|
||
|
||
---
|
||
|
||
### Detailed Tier
|
||
|
||
#### JoyCaption Beta One (FP16)
|
||
`fancyfeast/llama-joycaption-beta-one-hf-llava`
|
||
|
||
**Architecture**: LLaVA-based (Llama + CLIP)
|
||
**Parameters**: ~7B (full precision)
|
||
**VRAM**: ~16 GB
|
||
|
||
**Strengths:**
|
||
- Highest quality JoyCaption
|
||
- No quantization artifacts
|
||
- Trained on 2.4M samples
|
||
- DPO-optimized (score improved 5.14 → 7.03)
|
||
|
||
**Limitations:**
|
||
- High VRAM requirement
|
||
- Slower inference
|
||
- Requires good GPU
|
||
|
||
**Best For:** Final dataset preparation, highest quality captions for training
|
||
|
||
---
|
||
|
||
#### Qwen2.5-VL-7B-Captioner-Relaxed
|
||
`Ertugrul/Qwen2.5-VL-7B-Captioner-Relaxed`
|
||
|
||
**Architecture**: Fine-tuned Qwen2.5-VL-7B
|
||
**Parameters**: 7B
|
||
**VRAM**: ~16 GB
|
||
|
||
**Strengths:**
|
||
- Fine-tuned specifically for T2I captioning
|
||
- Relaxed constraints (less restrictive)
|
||
- Enhanced detail generation
|
||
- Natural language output optimized for image generation
|
||
|
||
**Limitations:**
|
||
- High VRAM
|
||
- May be too verbose for some uses
|
||
|
||
**Best For:** Text-to-image training datasets, detailed descriptions
|
||
|
||
---
|
||
|
||
#### BLIP-2-opt-6.7b
|
||
`Salesforce/blip2-opt-6.7b`
|
||
|
||
**Architecture**: Q-Former + OPT-6.7B LLM
|
||
**Parameters**: ~6.7B
|
||
**VRAM**: ~14 GB
|
||
|
||
**Strengths:**
|
||
- Larger LLM backbone
|
||
- Better language generation
|
||
- More nuanced descriptions
|
||
|
||
**Limitations:**
|
||
- High VRAM
|
||
- Slower than smaller BLIP-2
|
||
|
||
**Best For:** High-quality conditional captioning
|
||
|
||
---
|
||
|
||
### Extreme (API) Tier
|
||
|
||
#### Gemini 2.5 Pro
|
||
**Provider**: Google AI
|
||
**URL**: https://ai.google.dev/
|
||
**Cost**: ~$1.25/M input tokens
|
||
|
||
**Strengths:**
|
||
- Best overall vision understanding
|
||
- Up to 1M input tokens (3600 images/prompt)
|
||
- Enhanced object detection with bounding boxes
|
||
- Multimodal output (text + images)
|
||
- Spatial understanding improvements
|
||
|
||
**Limitations:**
|
||
- API latency
|
||
- Cost at scale
|
||
- Rate limits
|
||
|
||
**Token Usage:**
|
||
- 258 tokens if both dimensions ≤ 384px
|
||
- Larger images tiled into 768x768 (258 tokens each)
|
||
|
||
**Best For:** Complex scene understanding, batch processing via API
|
||
|
||
---
|
||
|
||
#### GPT-4o
|
||
**Provider**: OpenAI
|
||
**URL**: https://platform.openai.com/
|
||
**Cost**: ~$5/M input tokens
|
||
|
||
**Strengths:**
|
||
- Excellent creative descriptions
|
||
- Strong instruction following
|
||
- Good structured output (JSON, etc.)
|
||
- Few-shot learning works well
|
||
|
||
**Limitations:**
|
||
- Higher cost
|
||
- Cannot identify specific individuals
|
||
- Spatial reasoning limitations
|
||
|
||
**Best Practices:**
|
||
- Use system prompts for consistent style
|
||
- Provide few-shot examples for formatting
|
||
- Use ontology/schema for structured output
|
||
- Include image before text in messages
|
||
|
||
**Best For:** Creative, detailed captions; structured output
|
||
|
||
---
|
||
|
||
#### Claude Sonnet 4
|
||
**Provider**: Anthropic
|
||
**URL**: https://console.anthropic.com/
|
||
**Cost**: ~$3/M input tokens
|
||
|
||
**Strengths:**
|
||
- Strongest vision model from Anthropic
|
||
- Excellent visual reasoning
|
||
- Accurate text transcription from images
|
||
- Follows format instructions precisely
|
||
- Charts/graphs interpretation
|
||
|
||
**Limitations:**
|
||
- Cannot identify individuals
|
||
- Precise spatial measurements difficult
|
||
- Requires human oversight for critical uses
|
||
|
||
**Best Practices:**
|
||
- Place images before text
|
||
- Use clear, structured queries
|
||
- Supported formats: JPEG, PNG, GIF, WebP
|
||
|
||
**Best For:** Format-precise outputs, visual reasoning, chart interpretation
|
||
|
||
---
|
||
|
||
#### Grok 4
|
||
**Provider**: xAI
|
||
**URL**: https://console.x.ai/
|
||
**Cost**: ~$0.20/M input tokens
|
||
|
||
**Strengths:**
|
||
- Cheapest API option
|
||
- Good general captioning
|
||
- Fast response times
|
||
|
||
**Limitations:**
|
||
- Less established than competitors
|
||
- Fewer advanced features
|
||
|
||
**Best For:** Cost-sensitive API usage, high-volume processing
|
||
|
||
---
|
||
|
||
## Prompting Techniques
|
||
|
||
### Zero-Shot
|
||
Simple direct instruction:
|
||
```
|
||
Describe this image in detail.
|
||
```
|
||
|
||
### Few-Shot
|
||
Provide examples for consistent style:
|
||
```
|
||
Example 1: [image] → "A woman with long brown hair wearing a red dress..."
|
||
Example 2: [image] → "A man in his 30s with short black hair..."
|
||
Now describe: [target image]
|
||
```
|
||
|
||
### Structured Output
|
||
Request specific format:
|
||
```
|
||
Describe this image using the following structure:
|
||
- Subject:
|
||
- Setting:
|
||
- Lighting:
|
||
- Mood:
|
||
- Colors:
|
||
```
|
||
|
||
### Chain-of-Thought
|
||
For complex analysis:
|
||
```
|
||
First, identify the main subject.
|
||
Then, describe the background.
|
||
Finally, note the lighting and mood.
|
||
```
|
||
|
||
---
|
||
|
||
## Vision Model Landscape
|
||
|
||
Beyond the captioning models listed above, here's a broader view of vision models and their roles in image understanding workflows.
|
||
|
||
### Vision Foundation Models
|
||
|
||
General-purpose vision backbones that produce features for downstream tasks.
|
||
|
||
#### DINOv2 (Meta)
|
||
Self-supervised Vision Transformer producing excellent general-purpose embeddings.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | Self-supervised ViT |
|
||
| **Parameters** | ViT-S/B/L/G variants |
|
||
| **Training** | 142M images, no labels |
|
||
| **Strengths** | Classification, retrieval, segmentation, depth estimation |
|
||
|
||
**Key Features:**
|
||
- Works across domains without fine-tuning
|
||
- Student-teacher training mechanism
|
||
- Both image-level and patch-level learning
|
||
- Zero-shot learning capabilities
|
||
|
||
**Best For:** Feature extraction, transfer learning, when you need robust visual embeddings
|
||
|
||
**Resources:** [DINOv2 GitHub](https://github.com/facebookresearch/dinov2) | [Meta AI Blog](https://ai.meta.com/blog/dino-v2-computer-vision-self-supervised-learning/)
|
||
|
||
---
|
||
|
||
#### InternVL 2.5 (Shanghai AI Lab)
|
||
State-of-the-art open-source multimodal model rivaling GPT-4o.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | ViT-MLP-LLM architecture |
|
||
| **Parameters** | 1B to 78B variants |
|
||
| **Resolution** | Up to 448×448 tiles (dynamic) |
|
||
| **Strengths** | Multi-image, video, OCR, reasoning |
|
||
|
||
**Key Features:**
|
||
- First open-source to achieve >70% on MMMU benchmark
|
||
- Progressive scaling training strategy
|
||
- Supports English and Chinese
|
||
- MPO (Mixed Preference Optimization) variants available
|
||
|
||
**Best For:** Complex scene understanding, document analysis, video comprehension
|
||
|
||
**Resources:** [InternVL GitHub](https://github.com/OpenGVLab/InternVL) | [HuggingFace](https://huggingface.co/OpenGVLab/InternVL2_5-78B)
|
||
|
||
---
|
||
|
||
#### EVA-02 (BAAI)
|
||
Scaled-up vision transformer with excellent transfer learning.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | Vision Transformer |
|
||
| **Strengths** | Downstream classification, minimal fine-tuning needed |
|
||
|
||
**Best For:** When you need strong classification with efficient fine-tuning
|
||
|
||
---
|
||
|
||
### Contrastive Vision-Language Models
|
||
|
||
Models that align image and text embeddings in a shared space.
|
||
|
||
#### SigLIP / SigLIP 2 (Google)
|
||
Improved CLIP using sigmoid loss instead of softmax.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | Contrastive VLM |
|
||
| **Improvement** | Better calibration, more efficient training |
|
||
| **Batch Size** | Works well with smaller batches |
|
||
|
||
**Key Differences from CLIP:**
|
||
- Sigmoid loss vs softmax contrastive loss
|
||
- Better zero-shot classification on ImageNet
|
||
- More memory efficient (2x batch size possible)
|
||
- Multilingual support (SigLIP 2)
|
||
|
||
**SigLIP 2 Improvements:**
|
||
- Better zero-shot classification
|
||
- Improved transfer performance for VLMs
|
||
- Better localization and dense prediction
|
||
|
||
**Best For:** Zero-shot classification, efficient training with limited compute
|
||
|
||
**Resources:** [SigLIP 2 Blog](https://huggingface.co/blog/siglip2) | [HuggingFace](https://huggingface.co/google/siglip-so400m-patch14-384)
|
||
|
||
---
|
||
|
||
#### CLIP (OpenAI)
|
||
The classic contrastive vision-language model.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | Contrastive VLM |
|
||
| **Strengths** | Zero-shot classification, embedding similarity |
|
||
| **Ecosystem** | Extensive community tooling |
|
||
|
||
**Best For:** When you need broad compatibility and community support
|
||
|
||
---
|
||
|
||
#### CoCa (Google)
|
||
Combines contrastive and captioning objectives.
|
||
|
||
**Best For:** Tasks requiring both classification and generation
|
||
|
||
---
|
||
|
||
### Diffusion-Optimized Captioners
|
||
|
||
Models specifically designed or fine-tuned for generating prompts for diffusion models.
|
||
|
||
#### JoyCaption
|
||
Purpose-built for diffusion model training captions.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Architecture** | LLaVA-based (Llama + CLIP) |
|
||
| **Modes** | 10 different caption styles |
|
||
| **Training** | 2.4M samples, DPO-optimized |
|
||
|
||
**Caption Modes:**
|
||
| Mode | Output Style |
|
||
|------|--------------|
|
||
| `descriptive` | Detailed, verbose natural language |
|
||
| `straightforward` | Balanced detail (recommended) |
|
||
| `stable_diffusion_prompt` | SD-style prompts |
|
||
| `midjourney` | MJ-style prompts |
|
||
| `booru` | Danbooru tag format |
|
||
|
||
**Best For:** Training data for Flux, SDXL, SD models
|
||
|
||
**Resources:** [JoyCaption GitHub](https://github.com/fpgaminer/joycaption) | [Civitai Article](https://civitai.com/articles/14672/joycaption-beta-one-release)
|
||
|
||
---
|
||
|
||
#### CogVLM2 / GLM-4V (Tsinghua/Zhipu)
|
||
Strong visual understanding with artistic style recognition.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Architecture** | ViT + Adapter + LLM |
|
||
| **CogVLM2 Base** | Llama3-8B backbone |
|
||
| **GLM-4V** | GLM-9B backbone, 13B total |
|
||
| **Resolution** | Up to 1344×1344 (CogVLM2), 1120×1120 (GLM-4V) |
|
||
|
||
**Key Features:**
|
||
- GPT-4V equivalent performance
|
||
- Excellent OCR capabilities
|
||
- Video understanding (CogVLM2-Video)
|
||
- Bilingual (English/Chinese)
|
||
|
||
**Best For:** Detailed descriptions, style identification, OCR-heavy images
|
||
|
||
**Resources:** [CogVLM2 GitHub](https://github.com/THUDM/CogVLM2) | [GLM-4 GitHub](https://github.com/THUDM/GLM-4)
|
||
|
||
---
|
||
|
||
#### LLaVA-NeXT / LLaVA 1.6
|
||
Solid VLM with good ComfyUI integration.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Architecture** | CLIP + Vicuna/Llama |
|
||
| **Strengths** | Good balance of quality and speed |
|
||
| **Integration** | Strong ComfyUI node support |
|
||
|
||
**Best For:** General-purpose captioning with easy integration
|
||
|
||
---
|
||
|
||
### Tag-Based Models
|
||
|
||
Fast taggers for booru-style output.
|
||
|
||
#### WD14 Tagger / WD Tagger (SmilingWolf)
|
||
Danbooru-style tag extraction optimized for anime/illustration.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | Image classifier |
|
||
| **Output** | Danbooru tags + ratings |
|
||
| **Speed** | Very fast |
|
||
| **Accuracy** | ~50% better than DeepDanbooru |
|
||
|
||
**Available Models:**
|
||
| Model | Notes |
|
||
|-------|-------|
|
||
| `wd-v1-4-moat-tagger-v2` | Newest, MOAT architecture |
|
||
| `wd-v1-4-convnext-tagger-v2` | Most popular |
|
||
| `wd-v1-4-vit-tagger-v2` | ViT-based |
|
||
|
||
**Best For:** Anime/illustration tagging, fast batch processing, SDXL/Pony prompts
|
||
|
||
**Resources:** [HuggingFace Space](https://huggingface.co/spaces/SmilingWolf/wd-tagger) | [ComfyUI Node](https://github.com/pythongosssss/ComfyUI-WD14-Tagger)
|
||
|
||
---
|
||
|
||
#### DeepDanbooru
|
||
Original Danbooru tagger, still widely used.
|
||
|
||
| Aspect | Details |
|
||
|--------|---------|
|
||
| **Type** | CNN classifier |
|
||
| **Output** | Danbooru tags |
|
||
| **Speed** | Fast |
|
||
|
||
**Best For:** Legacy workflows, when WD14 unavailable
|
||
|
||
---
|
||
|
||
### Model Comparison Table
|
||
|
||
| Model | Type | Best For | Speed | VRAM |
|
||
|-------|------|----------|-------|------|
|
||
| **DINOv2** | Foundation | Feature extraction | Fast | Low |
|
||
| **InternVL 2.5** | VLM | Complex scenes, OCR | Medium | High |
|
||
| **SigLIP** | Contrastive | Zero-shot classification | Fast | Low |
|
||
| **JoyCaption** | Captioner | Diffusion training | Medium | Medium |
|
||
| **CogVLM2** | VLM | Detailed descriptions | Slow | High |
|
||
| **WD14 Tagger** | Tagger | Anime tags | Very Fast | Low |
|
||
| **Florence-2** | Multi-task | General captioning | Fast | Low |
|
||
| **Qwen2.5-VL** | VLM | Multilingual, instruction | Medium | Medium |
|
||
|
||
---
|
||
|
||
### Workflow Patterns
|
||
|
||
#### Two-Stage Captioning (Recommended for SD/SDXL)
|
||
```
|
||
Image → WD Tagger (tags) + VLM (description) → LLM combines → Final Prompt
|
||
```
|
||
|
||
#### Direct Captioning (Recommended for Flux)
|
||
```
|
||
Image → Qwen2-VL / JoyCaption → Optional cleanup → Flux
|
||
```
|
||
|
||
#### Hybrid for SDXL
|
||
```
|
||
Image → WD14 (structural tags) + Florence-2 (description) → Merge
|
||
```
|
||
|
||
#### Production Pipeline
|
||
```
|
||
Batch Images → Florence-2 (quick pass) → Filter → JoyCaption (detailed) → Training
|
||
```
|
||
|
||
### ComfyUI Nodes
|
||
|
||
| Node | Model | Purpose |
|
||
|------|-------|---------|
|
||
| `ComfyUI-JoyCaption` | JoyCaption | Diffusion-optimized captions |
|
||
| `ComfyUI-Florence2` | Florence-2 | Multi-task captioning |
|
||
| `ComfyUI-WD14-Tagger` | WD14 | Booru tag extraction |
|
||
| `ComfyUI-LLaVA-Captioner` | LLaVA | General VLM captioning |
|
||
| `ComfyUI-InternVL` | InternVL | Advanced VLM tasks |
|
||
|
||
---
|
||
|
||
## Common Pitfalls
|
||
|
||
### 1. Hallucinations
|
||
VLMs may invent details not present in images. Always verify critical outputs.
|
||
|
||
### 2. Copy-from-Examples
|
||
Small models may copy few-shot examples instead of analyzing the image. Use diverse examples or zero-shot for small models.
|
||
|
||
### 3. Resolution Issues
|
||
- Too small: Missing details
|
||
- Too large: Slow processing, may be resized anyway
|
||
|
||
### 4. Verbosity
|
||
Some models are overly verbose. Use temperature=0 and explicit length instructions.
|
||
|
||
### 5. Format Breaking
|
||
Models may not consistently follow format instructions. Consider post-processing.
|
||
|
||
---
|
||
|
||
## References
|
||
|
||
### General VLM Resources
|
||
- [Vision Language Models Explained - HuggingFace](https://huggingface.co/blog/vlms)
|
||
- [VLMs 2025 - HuggingFace](https://huggingface.co/blog/vlms-2025)
|
||
- [Vision Language Models Guide - Encord](https://encord.com/blog/vision-language-models-guide/)
|
||
- [Awesome VLM Architectures - GitHub](https://github.com/gokayfem/awesome-vlm-architectures)
|
||
|
||
### Model-Specific
|
||
- [Florence-2 - AssemblyAI](https://www.assemblyai.com/blog/florence-2-how-it-works-how-to-use)
|
||
- [JoyCaption - GitHub](https://github.com/fpgaminer/joycaption)
|
||
- [JoyCaption Beta One - Civitai](https://civitai.com/articles/14672/joycaption-beta-one-release)
|
||
- [BLIP - Salesforce](https://www.salesforce.com/blog/blip-bootstrapping-language-image-pretraining/)
|
||
- [Qwen2.5-VL Captioner - HuggingFace](https://huggingface.co/Ertugrul/Qwen2.5-VL-7B-Captioner-Relaxed)
|
||
|
||
### API Providers
|
||
- [Claude Vision Docs](https://docs.claude.com/en/docs/build-with-claude/vision)
|
||
- [Gemini Image Understanding](https://ai.google.dev/gemini-api/docs/image-understanding)
|
||
- [GPT-4 Image Captioning Cookbook](https://cookbook.openai.com/examples/tag_caption_images_with_gpt4v)
|