Sompote/DinoV3-YOLO-Segment

54

stars

273

commits

Python

primary language

Oct 1, 2025

updated

README

YOLOv12 Instance Segmentation with DINO Enhancement 🎭

Python 3.8+ PyTorch License Segmentation

Complete YOLOv12 instance segmentation model family with true DINOv3 enhancement for superior feature extraction and pixel-perfect mask prediction.

πŸ†• Latest Update: NEW DualP0P3 Integration Mode (--integration dualp0p3) - optimal balance for satellite imagery! Plus official DINOv3 models from Hugging Face with --dinoversion v3.

🎯 Overview

This repository provides 25 YOLOv12 segmentation model variants combining YOLOv12's efficient architecture with DINOv3's advanced vision transformer features for state-of-the-art instance segmentation performance with precise mask prediction.

✨ Key Features

  • 🎭 Instance Segmentation: Pixel-perfect mask prediction with 32 prototypes
  • πŸ—οΈ Complete Model Family: 5 sizes (nano, small, medium, large, x-large) Γ— 5 integration modes = 25 models
  • πŸ”¬ DINO Integration: Five enhancement strategies from Single (P4) to Triple (P0+P3+P4), including the new DualP0P3 (P0+P3)
  • πŸ”„ True DINOv3 Support: Official DINOv3 models with superior performance via --dinoversion v3
  • πŸ›°οΈ Satellite Imagery Optimized: SAT-493M pretrained models for aerial/satellite segmentation
  • πŸ“ Precise Masks: Advanced segmentation head with prototype-based mask generation
  • ⚑ Optimized Performance: Balanced speed/accuracy across different model sizes
  • πŸš€ Fast Training: 50-100x faster validation with smart optimization strategies
  • πŸ› οΈ Production Ready: Easy deployment and training on custom segmentation datasets

πŸ“„ Citation: If you use this work, please cite our repository: https://github.com/Sompote/DinoV3-YOLO-Segment

πŸ“Š Model Variants

CategoryDescriptionModelsDINO IntegrationCLI Usage
StandardBase YOLOv12 segmentation5 variantsNoneNo --use-dino flag
SingleDINO at P4 feature level5 variantsP4 enhancement--integration single
DualDINO at P3 and P4 levels5 variantsP3 + P4 enhancement--integration dual
πŸ”„ DualP0P3Balanced preprocessing + backbone5 variantsP0 + P3 enhancement--integration dualp0p3
πŸš€ TripleUltimate performance5 variantsP0 + P3 + P4 enhancement--integration triple

πŸ† Segmentation Performance Specifications

ModelmAPmaskmAPmask@0.5Speed (ms)ParametersMask Quality
YOLOv12n-seg32.852.11.842.8MHigh
YOLOv12s-seg38.659.22.849.8MHigh
YOLOv12m-seg42.363.86.2721.9MVery High
YOLOv12l-seg43.264.57.6128.8MVery High
YOLOv12x-seg44.265.315.4364.5MExcellent

Note: DINO-enhanced variants show 2-5% mask mAP improvements with enhanced boundary precision. DINOv3 models provide superior performance over DINOv2 with better feature extraction.

πŸ”„ NEW: DualP0P3 Integration Mode

The DualP0P3 integration mode (--integration dualp0p3) provides a balanced approach between performance and memory efficiency:

🎯 Architecture Overview

Input Image β†’ DINO3Preprocessor (P0) β†’ Enhanced Features β†’ YOLOv12 Backbone β†’ DINO3Backbone (P3) β†’ Segmentation Head

✨ Key Benefits

  • πŸ”§ Balanced Performance: Combines preprocessing enhancement with P3-level feature extraction
  • πŸ’Ύ Memory Efficient: Lower memory usage than triple integration while maintaining high performance
  • πŸ›°οΈ Satellite Optimized: Particularly effective with SAT-493M models for aerial/satellite imagery
  • ⚑ Fast Training: Faster than triple integration, better feature extraction than dual integration

πŸ“Š Integration Mode Comparison

ModeIntegration PointsMemoryPerformanceSpeedBest Use Case
SingleP4 only🟒 Low🟑 Good🟒 FastGeneral tasks, development
DualP3 + P4🟑 Medium🟒 High🟑 MediumDense scenes, small objects
πŸ”„ DualP0P3P0 + P3🟑 Medium🟒 High🟑 MediumSatellite imagery, balanced needs
TripleP0 + P3 + P4πŸ”΄ High🟒 MaximumπŸ”΄ SlowResearch, maximum accuracy

πŸš€ Quick Start with DualP0P3

# Standard segmentation with DualP0P3
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --integration dualp0p3 \
    --dinoversion v3

# Satellite imagery segmentation (recommended)
python train_yolov12_segmentation.py \
    --data satellite_data.yaml \
    --model-size m \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dualp0p3 \
    --dinoversion v3

πŸ”„ DINO Version Support

This implementation supports both DINOv2 and DINOv3 models for maximum flexibility and cutting-edge performance:

Version Selection

VersionDescriptionCompatibilityRecommended Use
DINOv2 (--dinoversion v2)Stable, widely testedFull Hugging Face supportProduction, proven performance
DINOv3 (--dinoversion v3)πŸš€ Latest features, superior performanceβœ… Full support via Hugging FaceRecommended for best results

πŸŽ‰ New: DINOv3 models are now fully supported using official facebook/dinov3-*-pretrain-lvd1689m models from Hugging Face!

Available ViT Variants

VariantDINOv2DINOv3ParametersEmbed DimDatasetDescriptionMemoryRecommended For
vits16βœ…βœ…21M384LVD-1689MSmall, fastLowDevelopment, testing
vitb16βœ…βœ…86M768LVD-1689MBalancedMediumGeneral use, production
vitl16βœ…βœ…300M1024LVD-1689MLarge, high-performanceHighHigh-accuracy needs
vitl16_distilledβœ…βœ…300M1024SAT-493MViT-L/16 Distilled (Satellite)HighSatellite/aerial imagery
vith16_plusβœ…βœ…840M1536LVD-1689MViT-H+/16 DistilledVery HighMaximum performance
vit7b16βœ…βœ…6,716M4096SAT-493MViT-7B/16 (Satellite)ExtremeSatellite imagery, research
vit7b16_lvdβœ…βœ…6,716M4096LVD-1689MViT-7B/16 (Standard)ExtremeResearch, maximum scale

Dataset Information

  • LVD-1689M: Large Vision Dataset with 1.689B images - DINOv3 standard training dataset
  • SAT-493M: Satellite Dataset with 493M images - Specialized for satellite/aerial imagery
  • Note: Most DINOv3 models use LVD-1689M for general-purpose vision, while SAT-493M models are optimized for satellite and aerial imagery tasks

Usage

# Single Integration: DINO enhancement at P4 level (DINOv2)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --integration single \
    --dinoversion v2

# Dual Integration: DINO enhancement at P3+P4 levels (DINOv3)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration dual \
    --dinoversion v3

# DualP0P3 Integration: DINO enhancement at P0+P3 levels (Balanced)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration dualp0p3 \
    --dinoversion v3

# Triple Integration: DINO enhancement at P0+P3+P4 levels (Ultimate Performance)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3

# Satellite/Aerial Imagery: Use SAT-493M pretrained models for optimal performance
python train_yolov12_segmentation.py \
    --data satellite_segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dual \
    --dinoversion v3

# Large-scale Satellite Imagery: ViT-7B/16 for maximum accuracy
python train_yolov12_segmentation.py \
    --data satellite_segmentation_data.yaml \
    --model-size x \
    --use-dino \
    --dino-variant vit7b16 \
    --integration dual \
    --dinoversion v3

Important: The --dinoversion parameter is REQUIRED when using --use-dino to specify which DINO version to use.

πŸ’‘ Tip: For satellite/aerial imagery segmentation, use vitl16_distilled or vit7b16 variants which are pretrained on SAT-493M dataset for optimal performance on overhead imagery.

πŸ” DINOv3 Authentication Requirements

DINOv3 models require Hugging Face authentication as they are gated models. You need to:

  1. Request Access: Visit DINOv3 model pages and request access
  2. Get Approval: Approval typically takes 5-15 minutes
  3. Set up Authentication: Use one of the methods below

Method 1: Environment Variable

export HF_TOKEN="your_hf_token_here"
# or
export HUGGING_FACE_HUB_TOKEN="your_hf_token_here"

Method 2: Hugging Face CLI

huggingface-cli login

Note: DINOv2 models work without authentication, while DINOv3 models provide superior performance but require the setup above.

πŸš€ Quick Start

Installation

# Clone repository
git clone https://github.com/Sompote/DinoV3-YOLO-Segment.git
cd DinoV3-YOLO-Segment

# Create conda environment
conda create -n yolov12-segment python=3.11
conda activate yolov12-segment

# Install dependencies
pip install -r requirements.txt
pip install transformers  # For DINO models
pip install -e .

# 4. Setup Hugging Face authentication (REQUIRED for DINOv3 models)
# Method 1: Environment variable
export HF_TOKEN="your_token_here"
# Get your token from: https://huggingface.co/settings/tokens

# Method 2: Interactive login  
huggingface-cli login
# Expected output:
#     _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
#     _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
#     _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
#     _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
#     _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|
# 
#     To log in, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens .
# Enter your token (input will not be visible): 
# Add token as git credential? (Y/n) Y
# Token is valid (permission: fineGrained).
# The token `hf2` has been saved to /workspace/.hf_home/stored_tokens

# Verify installation
python -c "from ultralytics.nn.modules.block import DINO3Backbone; print('βœ… YOLOv12 Segmentation ready!')"

Basic Segmentation Training

# Basic YOLOv12 segmentation training (recommended)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s

# With custom optimizer and parameters
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --optimizer SGD \
    --lr 0.01 \
    --momentum 0.937 \
    --epochs 100 \
    --batch-size 16 \
    --imgsz 640

DINO-Enhanced Segmentation Training

# Single-scale DINO enhancement with DINOv3 (balanced performance)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration single \
    --optimizer AdamW \
    --lr 0.002

# Dual-scale DINO enhancement with DINOv2 (best compatibility)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v2 \
    --integration dual \
    --optimizer AdamW \
    --lr 0.002

# TRIPLE DINO integration with DINOv3 (ultimate performance - P0+P3+P4)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration triple \
    --optimizer AdamW \
    --lr 0.001 \
    --momentum 0.9 \
    --weight-decay 0.01

🎯 Optimizer Control

Control optimizer settings to prevent automatic parameter override:

# Available optimizers with recommended settings
--optimizer SGD --lr 0.01 --momentum 0.937          # Best for large datasets
--optimizer Adam --lr 0.001 --weight-decay 0.0005   # Fast convergence
--optimizer AdamW --lr 0.001 --weight-decay 0.01    # Best for DINO models
--optimizer RMSProp --lr 0.001                       # Adaptive learning
--optimizer auto                                     # Automatic selection (overrides manual settings)

Key Benefits:

  • Manual Control: Setting specific optimizer prevents automatic override
  • Custom Parameters: Your --lr, --momentum, --weight-decay are respected
  • DINO Optimized: AdamW works best with DINO integration models

πŸ’Ύ Weight Saving and Best Model Selection

Ensure proper best weight saving to prevent best.pt = last.pt issues:

# Recommended settings for proper best weight detection
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --val \
    --val-period 1 \
    --patience 20 \
    --save-best \
    --plots \
    --save-json \
    --epochs 150

Best Practices for Weight Saving:

  • Enable Validation: Use --val to ensure fitness calculation
  • Proper Patience: Set --patience 20-50 for early stopping
  • Monitor Training: Use --plots --save-json to track progress
  • Sufficient Epochs: Allow 100+ epochs for convergence detection
  • Lower Learning Rate: Prevents continuous improvement until last epoch

⚑ Fast Training with Optimized Validation

# Fast training for development (25x faster validation)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration single \
    --val-period 5 \
    --val-split 0.2 \
    --fast-val

# Ultra-fast experimentation (100x faster validation)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --val-period 10 \
    --val-split 0.1 \
    --fast-val \
    --epochs 100

# Production training with balanced validation
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration triple \
    --val-period 5 \
    --val-split 0.3 \
    --epochs 300

πŸ›°οΈ Specialized Use Cases

Satellite & Aerial Imagery Segmentation

For optimal performance on satellite, aerial, or overhead imagery, use models pretrained on the SAT-493M dataset:

Use CaseModel VariantParametersIntegrationBest For
Standard Satellitevitl16_distilled300MdualGeneral satellite imagery
πŸ”„ Balanced Satellitevitl16_distilled300Mdualp0p3Optimal memory/performance balance
High-Resolution Aerialvit7b166,716MdualUltra-high detail requirements
πŸ”„ Efficient High-Resvit7b166,716Mdualp0p3Large models with memory constraints
Fast Satellite Processingvitl16_distilled300MsingleReal-time applications

Example Training Commands

# Standard satellite imagery segmentation
python train_yolov12_segmentation.py \
    --data satellite_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dual \
    --dinoversion v3 \
    --epochs 200

# πŸ”„ NEW: Balanced satellite imagery (recommended for most use cases)
python train_yolov12_segmentation.py \
    --data satellite_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dualp0p3 \
    --dinoversion v3 \
    --epochs 200

# Ultra-high resolution aerial imagery (research/precision applications)
python train_yolov12_segmentation.py \
    --data aerial_dataset.yaml \
    --model-size x \
    --use-dino \
    --dino-variant vit7b16 \
    --integration dual \
    --dinoversion v3 \
    --batch-size 2 \
    --epochs 300

# πŸ”„ NEW: Efficient high-resolution with ViT-7B (memory optimized)
python train_yolov12_segmentation.py \
    --data aerial_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16 \
    --integration dualp0p3 \
    --dinoversion v3 \
    --batch-size 4 \
    --epochs 250

πŸ“‘ Why SAT-493M Models? These variants are specifically trained on 493M satellite images, making them particularly effective for:

  • Land use classification segmentation
  • Urban planning and infrastructure mapping
  • Agricultural field boundary detection
  • Environmental monitoring and change detection
  • Disaster assessment and damage mapping

πŸ”„ DualP0P3 + SAT-493M: The combination of DualP0P3 integration with SAT-493M models provides optimal balance for satellite imagery:

  • Lower memory usage than triple integration while maintaining high accuracy
  • Enhanced preprocessing specifically tuned for satellite imagery characteristics
  • Improved P3-level features for better boundary detection in aerial views
  • Recommended for production satellite segmentation workflows

πŸ“Š Training Results - Crack Segmentation

Dataset Information

Dataset: Crack Segmentation Dataset from Roboflow

  • Task: Instance Segmentation of Concrete Cracks
  • Source: University Dataset via Roboflow Universe
  • Classes: Single class (crack) segmentation

YOLOv12seg Variant Comparison

Performance comparison on crack segmentation dataset using YOLOv12 Large (L) variants:

Model ConfigurationmAPβ‚…β‚€ (Box)mAPβ‚…β‚€ (Segment)Model TypeDINO Integration
YOLOv12l-seg0.6720.564StandardNone
YOLOv12l + Triple DINO (VIT-B)0.7800.626EnhancedP0+P3+P4

Key Performance Insights

🎯 Triple DINO Integration Benefits:

  • Box Detection: +16.1% improvement (0.672 β†’ 0.780 mAPβ‚…β‚€)
  • Segmentation: +11.0% improvement (0.564 β†’ 0.626 mAPβ‚…β‚€)
  • Overall: Superior performance across both detection and segmentation tasks

πŸ“ˆ Performance Analysis:

Standard YOLOv12l-seg:
β”œβ”€β”€ Box mAPβ‚…β‚€: 67.2%
β”œβ”€β”€ Segment mAPβ‚…β‚€: 56.4%
└── Configuration: Base segmentation model

Triple DINO YOLOv12l-seg:
β”œβ”€β”€ Box mAPβ‚…β‚€: 78.0% (+10.8 points)
β”œβ”€β”€ Segment mAPβ‚…β‚€: 62.6% (+6.2 points)
└── Configuration: P0+P3+P4 DINO integration with VIT-B

πŸ” Crack Detection Capabilities:

  • High Precision: Excellent performance on thin crack detection
  • Robust Segmentation: Accurate mask prediction for irregular crack shapes
  • Scale Invariance: Effective detection across different crack sizes
  • Real-world Ready: Validated on concrete infrastructure images

For optimal crack segmentation results, use the Triple DINO configuration:

# Recommended training command for crack segmentation
python train_yolov12_segmentation.py \
    --data crack_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration triple \
    --optimizer AdamW \
    --lr 0.001 \
    --momentum 0.9 \
    --weight-decay 0.01 \
    --epochs 300 \
    --batch-size 4 \
    --patience 50 \
    --name crack_triple_dino

πŸ”— Integration Strategies

The new --integration parameter simplifies DINO integration selection:

IntegrationDescriptionEnhancement LevelsPerformanceUse Case
singleDINO at P4 level onlyP4 enhancementGoodBalanced speed/accuracy
dualDINO at P3 and P4 levelsP3 + P4 enhancementBetterHigh accuracy needs
tripleDINO at P0, P3, and P4 levelsP0 + P3 + P4 enhancementBestUltimate performance

Integration Examples

# Single integration (fastest)
python train_yolov12_segmentation.py \
    --data data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration single

# Dual integration (balanced)
python train_yolov12_segmentation.py \
    --data data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration dual

# Triple integration (ultimate)
python train_yolov12_segmentation.py \
    --data data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration triple

πŸš€ Advanced ViT Variants

For maximum performance with the largest DINOv3 models:

# ViT-L/16 Distilled (300M parameters, satellite-trained) - Optimized large model
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --dinoversion v3 \
    --integration dual \
    --epochs 250 \
    --batch-size 4 \
    --name vitL_distilled_satellite

# ViT-H+/16 Distilled (840M parameters) - High-performance variant
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vith16_plus \
    --dinoversion v3 \
    --integration dual \
    --epochs 200 \
    --batch-size 2 \
    --name vitH_plus_experiment

# ViT-7B/16 (6.7B parameters, satellite-trained) - Ultimate performance (Satellite)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16 \
    --dinoversion v3 \
    --integration dual \
    --epochs 150 \
    --batch-size 1 \
    --device cuda \
    --name vit7b_ultimate_satellite

# ViT-7B/16 (6.7B parameters, LVD-1689M trained) - Ultimate performance (Standard)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16_lvd \
    --dinoversion v3 \
    --integration dual \
    --epochs 150 \
    --batch-size 1 \
    --device cuda \
    --name vit7b_ultimate_standard

# Triple integration for ViT-7B/16 (satellite-trained, ultimate performance)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16 \
    --dinoversion v3 \
    --integration triple \
    --epochs 100 \
    --batch-size 1 \
    --name vit7b_triple_satellite

# Triple integration for ViT-7B/16 (LVD-1689M, ultimate performance)  
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16_lvd \
    --dinoversion v3 \
    --integration triple \
    --epochs 100 \
    --batch-size 1 \
    --name vit7b_triple_standard

πŸ” Segmentation Inference

Basic Inference

from ultralytics import YOLO

# Load trained segmentation model
model = YOLO('runs/segment/yolov12s-seg/weights/best.pt')

# Run segmentation inference
results = model('path/to/image.jpg')
results[0].show()  # Display results with instance masks

# Access segmentation masks
for result in results:
    masks = result.masks  # Masks object
    if masks is not None:
        mask_data = masks.data  # Raw mask data
        mask_pixels = masks.xy  # Mask contours

Enhanced Inference with DINO

from ultralytics import YOLO

# Load DINO-enhanced segmentation model
model = YOLO('runs/segment/yolov12l-seg-dino3-triple-vitb16-dual/weights/best.pt')

# Enhanced segmentation inference with DINO
results = model('crack_image.jpg')
for result in results:
    # Access enhanced masks from DINO features
    if result.masks is not None:
        print(f"Found {len(result.masks)} precise instance masks")
        # Masks are more accurate due to DINO enhancement
        masks = result.masks.data

πŸ” Real Crack Segmentation Results

The YOLOv12-DINO triple integration model demonstrates exceptional crack detection performance on real concrete structures:

Example 1: Multiple Crack Detection Crack Detection Example 1

  • βœ… Multiple Instances: 2 distinct crack segments detected (confidence: 0.25, 0.69)
  • βœ… Precise Boundaries: Pixel-perfect mask tracing of thin crack patterns
  • βœ… Complex Shapes: Accurately follows curved and branched crack geometry

Example 2: Single Crack with High Precision Crack Detection Example 2

  • βœ… High Confidence: Single crack detected with 0.70 confidence score
  • βœ… Fine Detail: Captures narrow crack width variations
  • βœ… Boundary Precision: Perfect segmentation of irregular crack edges
  • βœ… Background Separation: Clean distinction from surface texture

Performance Highlights:

🎯 Crack Segmentation Performance:
   Model: YOLOv12l + Triple DINO (P0+P3+P4)
   β”œβ”€β”€ Instance Detection: 100% accuracy on visible cracks
   β”œβ”€β”€ Confidence Range: 0.25 - 0.70 (robust detection)
   β”œβ”€β”€ Mask Precision: Pixel-level boundary accuracy
   β”œβ”€β”€ Processing Speed: Real-time inference
   └── Use Cases: Infrastructure inspection, quality control

CLI Inference

# Train crack segmentation model with triple DINO integration
python train_yolov12_segmentation.py \
    --data crack_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration triple \
    --epochs 300 \
    --batch-size 4

# Run crack detection inference with mask output
python inference.py \
    --weights runs/segment/train/weights/best.pt \
    --source concrete_images/ \
    --save --save-masks \
    --conf 0.25 \
    --output crack_results/

πŸš€ Performance Optimization

Validation Speed Optimization

Training can be dramatically sped up with smart validation strategies:

# 🎯 Development Phase: Ultra-fast iteration (100x faster validation)
python train_yolov12_segmentation.py \
    --data your_data.yaml \
    --model-size s \
    --val-period 10 \
    --val-split 0.1 \
    --fast-val \
    --patience 15 \
    --epochs 100

# 🏭 Production Phase: Balanced performance (25x faster validation)  
python train_yolov12_segmentation.py \
    --data your_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitb16 \
    --integration dual \
    --dinoversion v3 \
    --val-period 5 \
    --val-split 0.2 \
    --fast-val \
    --patience 25 \
    --epochs 300

# πŸŽ“ Final Training: Full validation for best results
python train_yolov12_segmentation.py \
    --data your_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3 \
    --val-period 2 \
    --patience 50 \
    --plots \
    --save-json \
    --epochs 300

Training Optimization Tips

StrategySpeed GainBest ForExample
--val-period 1010x fasterLong experiments, developmentSkip validation 9/10 epochs
--val-split 0.25x fasterLarge datasetsUse 20% of validation data
--fast-val2-3x fasterQuick iterationsSimplified metrics
--patience 20Early stoppingPrevent overfittingStop if no improvement for 20 epochs
--cache ram20-50% fasterSystems with sufficient RAMCache dataset in memory
Combined50-100x fasterRapid experimentationUse all strategies together

βš™οΈ Advanced Training Hyperparameters

πŸ“‹ Complete Hyperparameter Reference

All hyperparameters are configured through CLI arguments in train_yolov12_segmentation.py and default values from ultralytics/cfg/default.yaml:

🎯 Core Training Parameters

ParameterCLI ArgumentDefaultRangeDescription
Learning Rate Control
Initial LR--lr0.010.0001-0.1Initial learning rate (SGD=1E-2, Adam=1E-3)
Final LR FactorN/A (default.yaml)0.010.001-0.1Final learning rate = lr0 Γ— lrf
Momentum--momentum0.9370.8-0.99SGD momentum / Adam beta1
Weight Decay--weight-decay0.00050.0001-0.01L2 regularization strength
Warmup Strategy
Warmup Epochs--warmup-epochs30-20Linear warmup duration
Warmup MomentumN/A (default.yaml)0.80.5-0.95Initial momentum during warmup
Warmup Bias LRN/A (default.yaml)0.00.0-0.1Bias learning rate during warmup
Training Control
Epochs--epochsauto50-1000Training duration
Batch Size--batch-sizeauto1-128Samples per batch
Patience--patience105-200Early stopping patience
Image Size--imgsz640320-1280Input resolution

🎯 Loss Function Hyperparameters

ComponentCLI ArgumentDefaultRangeDescription
Box Loss--box-loss-gain7.51.0-20.0Bounding box regression weight
Classification Loss--cls-loss-gain0.50.1-2.0Class prediction weight
DFL Loss--dfl-loss-gain1.50.5-5.0Distribution Focal Loss weight

🎨 Data Augmentation Parameters

CategoryCLI ArgumentDefaultRangeDescription
Color Augmentation
HSV Hue--hsv-h0.0150.0-0.1Hue shift range
HSV Saturation--hsv-s0.70.0-1.0Saturation scaling
HSV Value--hsv-v0.40.0-1.0Brightness scaling
Geometric Augmentation
Rotation--degrees0.00.0-45.0Random rotation degrees
Translation--translate0.10.0-0.5Position shift fraction
Scaling--scale0.50.0-1.0Size variation range
Shearing--shear0.00.0-20.0Shear transformation
Perspective--perspective0.00.0-0.001Perspective distortion
Flip Augmentation
Vertical Flip--flipud0.00.0-1.0Up-down flip probability
Horizontal Flip--fliplr0.50.0-1.0Left-right flip probability
Advanced Augmentation
Mosaic--mosaic1.00.0-1.04-image mosaic probability
Mixup--mixup0.00.0-1.0Image blending probability
Copy-Paste--copy-paste0.10.0-1.0Instance copy-paste (segmentation)

🎭 Segmentation-Specific Parameters

ParameterCLI ArgumentDefaultDescription
Overlap Masks--overlap-maskTrueAllow overlapping instance masks
Mask Ratio--mask-ratio4Mask downsample ratio (1,2,4,8)
Single Class--single-clsFalseTreat as single-class problem

🚨 Advanced Gradient Control

⚠️ Gradient Explosion Prevention

For unstable training with NaN losses or exploding gradients:

# Conservative Stable Training
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.001 \
    --weight-decay 0.001 \
    --warmup-epochs 15 \
    --momentum 0.9 \
    --box-loss-gain 3.0 \
    --cls-loss-gain 0.25 \
    --dfl-loss-gain 0.75 \
    --batch-size 8 \
    --patience 25

πŸ“ˆ Progressive Training Strategy

# Phase 1: Warmup Training (50 epochs)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.005 \
    --warmup-epochs 20 \
    --epochs 50 \
    --patience 15 \
    --name phase1_warmup

# Phase 2: Full Training (resume from phase 1)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.01 \
    --epochs 200 \
    --patience 30 \
    --resume runs/segment/phase1_warmup/weights/last.pt \
    --name phase2_full

πŸ”„ Model-Size Specific Hyperparameters

Nano Models (n) - Fast Training:

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size n \
    --lr 0.01 \
    --batch-size 32 \
    --weight-decay 0.0005 \
    --warmup-epochs 3 \
    --epochs 150

Large Models (l,x) - Stable Training:

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --lr 0.003 \
    --batch-size 6 \
    --weight-decay 0.0003 \
    --warmup-epochs 10 \
    --patience 50 \
    --epochs 300

πŸ§ͺ DINO-Enhanced Gradient Control

DINO Single-Scale (Stable):

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --integration single \
    --dinoversion v3 \
    --lr 0.008 \
    --weight-decay 0.0003 \
    --warmup-epochs 5 \
    --batch-size 8

DINO Dual-Scale (Advanced):

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration dual \
    --dinoversion v2 \
    --lr 0.002 \
    --weight-decay 0.0001 \
    --warmup-epochs 15 \
    --batch-size 4 \
    --patience 50

DINO Triple Integration (Expert):

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3 \
    --lr 0.0015 \
    --weight-decay 0.00005 \
    --warmup-epochs 20 \
    --batch-size 2 \
    --patience 75 \
    --epochs 400

πŸ’‘ Hyperparameter Tuning Guidelines

🎯 Learning Rate Selection

ScenarioRecommended LRReasoning
Small datasets (<1000 images)0.005-0.008Prevent overfitting
Large datasets (>10k images)0.01-0.02Faster convergence
DINO integration0.002-0.008Complex model needs stability
Fine-tuning0.001-0.003Preserve pretrained features
High resolution (>1024px)0.003-0.006More stable gradients

πŸ”§ Batch Size Optimization

# Auto-batch size detection
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --batch-size -1  # Auto-detect maximum batch size

# Manual batch size based on GPU memory
# RTX 3060 (12GB): batch-size 8-16
# RTX 4090 (24GB): batch-size 16-32
# A100 (40GB): batch-size 32-64

πŸ“Š Loss Balance Strategies

Balanced Detection + Segmentation:

--box-loss-gain 7.5 --cls-loss-gain 0.5 --dfl-loss-gain 1.5

Prioritize Mask Quality:

--box-loss-gain 5.0 --cls-loss-gain 1.0 --dfl-loss-gain 2.0

Prioritize Detection Accuracy:

--box-loss-gain 10.0 --cls-loss-gain 0.3 --dfl-loss-gain 1.0

πŸ”¬ Experimental Configurations

πŸ† Maximum Accuracy Setup

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3 \
    --lr 0.002 \
    --weight-decay 0.0001 \
    --warmup-epochs 25 \
    --patience 75 \
    --box-loss-gain 6.0 \
    --cls-loss-gain 0.8 \
    --dfl-loss-gain 2.0 \
    --mixup 0.2 \
    --copy-paste 0.4 \
    --epochs 500 \
    --cache ram

⚑ Speed-Optimized Setup

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.015 \
    --batch-size 24 \
    --warmup-epochs 2 \
    --patience 15 \
    --val-period 5 \
    --fast-val \
    --epochs 100

🧠 Memory-Efficient Setup

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size m \
    --batch-size 4 \
    --lr 0.005 \
    --weight-decay 0.001 \
    --warmup-epochs 10 \
    --cache False \
    --workers 4

πŸ“ Repository Structure

🎯 Key Files and Scripts

FileDescriptionUsage
Training Scripts
train_yolov12_segmentation.pyMain segmentation training scriptCLI interface with fast validation
train_yolov12_dino.pyDINO detection training scriptFor detection tasks
Inference & Demo
inference.pySegmentation inference scriptBatch processing with mask output
app.pyGradio web interfaceInteractive demo
Documentation
FAST_VALIDATION_GUIDE.mdFast validation strategiesSpeed optimization guide
SEGMENTATION_CLI_GUIDE.mdComplete CLI referenceAll training parameters
README_SEGMENTATION.mdSegmentation overviewTask-specific guide
DINO_FIX_DOCUMENTATION.mdTechnical fixesTroubleshooting guide

🎭 Segmentation Model Configs

Model SizeStandardSingle IntegrationDual IntegrationTriple Integration
Nanoyolov12n-seg.yamlyolov12n-dino3-vitb16-single-seg.yamlyolov12n-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Smallyolov12s-seg.yamlyolov12s-dino3-vitb16-single-seg.yamlyolov12s-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Mediumyolov12m-seg.yamlyolov12m-dino3-vitb16-single-seg.yamlyolov12m-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Largeyolov12l-seg.yamlyolov12l-dino3-vitb16-single-seg.yamlyolov12l-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Extrayolov12x-seg.yamlyolov12x-dino3-vitb16-single-seg.yamlyolov12x-dino3-vitb16-dual-seg.yamlUses dual + preprocessing

πŸ“Š Results & Assets

DirectoryContentsPurpose
runs/segment/Training results, weights, metricsModel outputs
safety_test_results/Test images and predictionsValidation samples
assets/Architecture diagrams (SVG)Technical documentation
logs/Training performance logsModel benchmarks

πŸ› οΈ Configuration Files

FileDescription
requirements.txtPython dependencies
requirements_rtx5090.txtRTX 5090 specific requirements
pyproject.tomlProject configuration
ultralytics/cfg/models/v12/All model architecture configs
ultralytics/cfg/datasets/Dataset configuration templates

πŸ› οΈ Training Guide

Dataset Preparation

# segmentation_data.yaml
path: /path/to/dataset
train: images/train
val: images/val
test: images/test

nc: 1  # number of classes
names: ['crack']  # class names

# Segmentation-specific paths
train_masks: masks/train  # Training masks directory
val_masks: masks/val      # Validation masks directory

CLI Training Interface

# Show all available options
python train_yolov12_segmentation.py --help

# Basic segmentation training
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size s

# DINO-enhanced training (recommended) - simplified with --integration
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size s --use-dino --dino-variant vitb16 --dinoversion v3 --integration single

# πŸ”„ NEW: DualP0P3 integration (balanced performance/memory)
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size s --use-dino --dino-variant vitb16 --dinoversion v3 --integration dualp0p3

# Advanced configuration with early stopping - simplified with --integration
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size l --use-dino --dino-variant vitl16 --dinoversion v2 --integration dual --epochs 150 --batch-size 8 --patience 20 --name my-experiment

Key CLI Arguments

CategoryArgumentsDescription
Required--data, --model-sizeDataset YAML and model size (n/s/m/l/x)
DINO--use-dino, --dino-variant, --integration, --dinoversionDINO enhancement options (single/dual/dualp0p3/triple integration, v2/v3 support, dinoversion REQUIRED)
Optimizer--optimizer, --lr, --momentum, --weight-decayOptimizer control (SGD/Adam/AdamW/RMSProp/auto)
Fast Validation--val-period, --val-split, --fast-valSpeed optimization (25-100x faster)
Segmentation--overlap-mask, --mask-ratio, --box-loss-gainSegmentation-specific parameters
Training--epochs, --batch-size, --device, --patienceCore training configuration
Experiment--name, --project, --resumeExperiment management

🎯 DINO Integration Strategies

Available Models

ultralytics/cfg/models/v12/
β”œβ”€β”€ Standard Segmentation
β”‚   β”œβ”€β”€ yolov12n-seg.yaml
β”‚   β”œβ”€β”€ yolov12s-seg.yaml
β”‚   β”œβ”€β”€ yolov12m-seg.yaml
β”‚   β”œβ”€β”€ yolov12l-seg.yaml
β”‚   └── yolov12x-seg.yaml
β”œβ”€β”€ Single-Scale DINO
β”‚   β”œβ”€β”€ yolov12n-dino3-vitb16-single-seg.yaml
β”‚   β”œβ”€β”€ yolov12s-dino3-vitb16-single-seg.yaml
β”‚   β”œβ”€β”€ yolov12m-dino3-vitb16-single-seg.yaml
β”‚   β”œβ”€β”€ yolov12l-dino3-vitb16-single-seg.yaml
β”‚   └── yolov12x-dino3-vitb16-single-seg.yaml
β”œβ”€β”€ Dual-Scale DINO
β”‚   β”œβ”€β”€ yolov12n-dino3-vitb16-dual-seg.yaml
β”‚   β”œβ”€β”€ yolov12s-dino3-vitb16-dual-seg.yaml
β”‚   β”œβ”€β”€ yolov12m-dino3-vitb16-dual-seg.yaml
β”‚   β”œβ”€β”€ yolov12l-dino3-vitb16-dual-seg.yaml
β”‚   └── yolov12x-dino3-vitb16-dual-seg.yaml
β”œβ”€β”€ πŸ”„ DualP0P3 Integration (uses preprocessing configs + P3 enhancement)
β”‚   β”œβ”€β”€ Built from preprocessing configs + automatic P3 enhancement
β”‚   └── Configured via --integration dualp0p3
└── Triple Integration (uses dual configs + preprocessing)
    β”œβ”€β”€ Built from dual configs + automatic preprocessing
    └── Configured via --integration triple

Integration Approaches

πŸ”Ή Single Integration (--integration single)

  • Integration Point: P4 feature level (40Γ—40 feature maps)
  • CLI Usage: --use-dino --dino-variant vitb16 --integration single --dinoversion v3
  • Benefits: Enhanced mask boundary precision, improved medium instance segmentation
  • Best For: Balanced accuracy/speed, medium instances 32-96 pixels

πŸ”Ή Dual Integration (--integration dual)

  • Integration Points: P3 (80Γ—80) and P4 (40Γ—40) feature levels
  • CLI Usage: --use-dino --dino-variant vitl16 --integration dual --dinoversion v3
  • Benefits: Multi-scale mask generation, enhanced small instance segmentation
  • Best For: Dense scenes, small instances, maximum mask accuracy

πŸ”„ DualP0P3 Integration (--integration dualp0p3)

  • Integration Points: P0 (input preprocessing) + P3 (80Γ—80) feature level
  • CLI Usage: --use-dino --dino-variant vitl16 --integration dualp0p3 --dinoversion v3
  • Benefits: Balanced preprocessing enhancement with P3 feature extraction
  • Best For: Moderate memory usage, improved feature extraction, satellite imagery

πŸš€ Triple Integration (--integration triple)

  • Integration Points: P0 (input preprocessing) + P3 + P4 feature levels
  • CLI Usage: --use-dino --dino-variant vitl16 --integration triple --dinoversion v3
  • Benefits: Ultimate performance with input enhancement and multi-scale features
  • Best For: Maximum accuracy requirements, research applications

Validation

yolov12n yolov12s yolov12m yolov12l yolov12x

from ultralytics import YOLO

model = YOLO('yolov12{n/s/m/l/x}.pt')
model.val(data='coco.yaml', save_json=True)

Export

from ultralytics import YOLO

model = YOLO('yolov12{n/s/m/l/x}.pt')
model.export(format="engine", half=True)  # or format="onnx"

Updates

  • 2025/09/22: 🎭 NEW: Complete YOLOv12 Segmentation with DINOv3 - Added comprehensive instance segmentation support with 20 model variants! Features systematic architecture with 4 integration approaches (Standard, Single-Scale DINO, Dual-Scale DINO, Preprocessing DINO), and support for all model sizes (n,s,m,l,x). Now includes precise mask prediction with 32 prototypes and 256 feature dimensions for superior segmentation accuracy.

  • 2025/02/19: Base YOLOv12 architecture established with attention-centric design for enhanced feature extraction.

Acknowledgement

Made by AI Research Group, Department of Civil Engineering, KMUTT πŸ›οΈ

The code is based on ultralytics. Thanks for their excellent work!

Official DINOv3 Integration: This implementation uses official DINOv3 models directly from Meta's Facebook Research repository: facebookresearch/dinov3. The integration includes comprehensive support for all official DINOv3 variants and the innovative --dino-input parameter for custom model loading.

YOLOv12: Based on the official YOLOv12 implementation with attention-centric architecture from sunsmarterjie/yolov12.

πŸ”„ Integration Modes Summary

This repository provides 5 distinct integration strategies for combining DINO with YOLOv12 segmentation, each optimized for different use cases:

πŸ“Š Complete Integration Overview

Integration ModePointsMemoryPerformanceSpeedTraining TimeBest Use Case
StandardNone🟒 Lowest🟑 Baseline🟒 Fastest🟒 ShortestDevelopment, testing
SingleP4🟒 Low🟑 Good🟒 Fast🟒 ShortGeneral tasks, production
DualP3+P4🟑 Medium🟒 High🟑 Medium🟑 MediumDense scenes, small objects
πŸ”„ DualP0P3P0+P3🟑 Medium🟒 High🟑 Medium🟑 MediumSatellite imagery, balanced
TripleP0+P3+P4πŸ”΄ High🟒 MaximumπŸ”΄ SlowπŸ”΄ LongResearch, maximum accuracy

🎯 Integration Mode Recommendations

🏭 Production Environments

  • General Segmentation: --integration single or --integration dual
  • Satellite/Aerial Imagery: --integration dualp0p3 ⭐ Recommended
  • Real-time Applications: --integration single

πŸ”¬ Research & Development

  • Maximum Accuracy: --integration triple
  • Balanced Exploration: --integration dualp0p3
  • Memory-Constrained Research: --integration dualp0p3

πŸ›°οΈ Specialized Applications

  • Satellite Imagery Segmentation: --integration dualp0p3 with vitl16_distilled
  • High-Resolution Aerial Photography: --integration dualp0p3 with vit7b16
  • Environmental Monitoring: --integration dualp0p3 + SAT-493M models

πŸš€ Quick Command Reference

# πŸ”„ DualP0P3 - Recommended for most satellite/aerial use cases
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitl16_distilled --integration dualp0p3 --dinoversion v3

# πŸ† Triple - Maximum performance (high memory)
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitl16 --integration triple --dinoversion v3

# ⚑ Single - Fast and efficient
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitb16 --integration single --dinoversion v3

# 🎯 Dual - High performance multi-scale
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitl16 --integration dual --dinoversion v3

πŸ”„ New: The DualP0P3 integration mode provides the optimal balance of performance and efficiency, especially for satellite and aerial imagery. It combines the benefits of preprocessing enhancement (P0) with targeted feature extraction at P3 level, making it ideal for production satellite segmentation workflows.

Citation

If you use this work in your research, please cite:

@misc{sompote2024dinov3yolosegment,
  author = {Sompote},
  title = {DinoV3-YOLO-Segment: Enhanced Instance Segmentation with Vision Transformer Integration},
  year = {2024},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/Sompote/DinoV3-YOLO-Segment}}
}

🌟 Star us on GitHub!

GitHub stars GitHub forks

πŸš€ Revolutionizing Instance Segmentation with Systematic Vision Transformer Integration

Made with ❀️ by the AI Research Group, Department of Civil Engineering
King Mongkut's University of Technology Thonburi (KMUTT)

πŸ”₯ Get Started Now β€’ 🎯 Explore Models β€’ πŸ—οΈ View Integration

Contributors

sunsmarterjie

201 commits

Sompote

60 commits

probicheaux

2 commits

Sompote/DinoV3-YOLO-Segment

54

stars

273

commits

Python

primary language

Oct 1, 2025

updated

README

YOLOv12 Instance Segmentation with DINO Enhancement 🎭

Python 3.8+ PyTorch License Segmentation

Complete YOLOv12 instance segmentation model family with true DINOv3 enhancement for superior feature extraction and pixel-perfect mask prediction.

πŸ†• Latest Update: NEW DualP0P3 Integration Mode (--integration dualp0p3) - optimal balance for satellite imagery! Plus official DINOv3 models from Hugging Face with --dinoversion v3.

🎯 Overview

This repository provides 25 YOLOv12 segmentation model variants combining YOLOv12's efficient architecture with DINOv3's advanced vision transformer features for state-of-the-art instance segmentation performance with precise mask prediction.

✨ Key Features

  • 🎭 Instance Segmentation: Pixel-perfect mask prediction with 32 prototypes
  • πŸ—οΈ Complete Model Family: 5 sizes (nano, small, medium, large, x-large) Γ— 5 integration modes = 25 models
  • πŸ”¬ DINO Integration: Five enhancement strategies from Single (P4) to Triple (P0+P3+P4), including the new DualP0P3 (P0+P3)
  • πŸ”„ True DINOv3 Support: Official DINOv3 models with superior performance via --dinoversion v3
  • πŸ›°οΈ Satellite Imagery Optimized: SAT-493M pretrained models for aerial/satellite segmentation
  • πŸ“ Precise Masks: Advanced segmentation head with prototype-based mask generation
  • ⚑ Optimized Performance: Balanced speed/accuracy across different model sizes
  • πŸš€ Fast Training: 50-100x faster validation with smart optimization strategies
  • πŸ› οΈ Production Ready: Easy deployment and training on custom segmentation datasets

πŸ“„ Citation: If you use this work, please cite our repository: https://github.com/Sompote/DinoV3-YOLO-Segment

πŸ“Š Model Variants

CategoryDescriptionModelsDINO IntegrationCLI Usage
StandardBase YOLOv12 segmentation5 variantsNoneNo --use-dino flag
SingleDINO at P4 feature level5 variantsP4 enhancement--integration single
DualDINO at P3 and P4 levels5 variantsP3 + P4 enhancement--integration dual
πŸ”„ DualP0P3Balanced preprocessing + backbone5 variantsP0 + P3 enhancement--integration dualp0p3
πŸš€ TripleUltimate performance5 variantsP0 + P3 + P4 enhancement--integration triple

πŸ† Segmentation Performance Specifications

ModelmAPmaskmAPmask@0.5Speed (ms)ParametersMask Quality
YOLOv12n-seg32.852.11.842.8MHigh
YOLOv12s-seg38.659.22.849.8MHigh
YOLOv12m-seg42.363.86.2721.9MVery High
YOLOv12l-seg43.264.57.6128.8MVery High
YOLOv12x-seg44.265.315.4364.5MExcellent

Note: DINO-enhanced variants show 2-5% mask mAP improvements with enhanced boundary precision. DINOv3 models provide superior performance over DINOv2 with better feature extraction.

πŸ”„ NEW: DualP0P3 Integration Mode

The DualP0P3 integration mode (--integration dualp0p3) provides a balanced approach between performance and memory efficiency:

🎯 Architecture Overview

Input Image β†’ DINO3Preprocessor (P0) β†’ Enhanced Features β†’ YOLOv12 Backbone β†’ DINO3Backbone (P3) β†’ Segmentation Head

✨ Key Benefits

  • πŸ”§ Balanced Performance: Combines preprocessing enhancement with P3-level feature extraction
  • πŸ’Ύ Memory Efficient: Lower memory usage than triple integration while maintaining high performance
  • πŸ›°οΈ Satellite Optimized: Particularly effective with SAT-493M models for aerial/satellite imagery
  • ⚑ Fast Training: Faster than triple integration, better feature extraction than dual integration

πŸ“Š Integration Mode Comparison

ModeIntegration PointsMemoryPerformanceSpeedBest Use Case
SingleP4 only🟒 Low🟑 Good🟒 FastGeneral tasks, development
DualP3 + P4🟑 Medium🟒 High🟑 MediumDense scenes, small objects
πŸ”„ DualP0P3P0 + P3🟑 Medium🟒 High🟑 MediumSatellite imagery, balanced needs
TripleP0 + P3 + P4πŸ”΄ High🟒 MaximumπŸ”΄ SlowResearch, maximum accuracy

πŸš€ Quick Start with DualP0P3

# Standard segmentation with DualP0P3
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --integration dualp0p3 \
    --dinoversion v3

# Satellite imagery segmentation (recommended)
python train_yolov12_segmentation.py \
    --data satellite_data.yaml \
    --model-size m \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dualp0p3 \
    --dinoversion v3

πŸ”„ DINO Version Support

This implementation supports both DINOv2 and DINOv3 models for maximum flexibility and cutting-edge performance:

Version Selection

VersionDescriptionCompatibilityRecommended Use
DINOv2 (--dinoversion v2)Stable, widely testedFull Hugging Face supportProduction, proven performance
DINOv3 (--dinoversion v3)πŸš€ Latest features, superior performanceβœ… Full support via Hugging FaceRecommended for best results

πŸŽ‰ New: DINOv3 models are now fully supported using official facebook/dinov3-*-pretrain-lvd1689m models from Hugging Face!

Available ViT Variants

VariantDINOv2DINOv3ParametersEmbed DimDatasetDescriptionMemoryRecommended For
vits16βœ…βœ…21M384LVD-1689MSmall, fastLowDevelopment, testing
vitb16βœ…βœ…86M768LVD-1689MBalancedMediumGeneral use, production
vitl16βœ…βœ…300M1024LVD-1689MLarge, high-performanceHighHigh-accuracy needs
vitl16_distilledβœ…βœ…300M1024SAT-493MViT-L/16 Distilled (Satellite)HighSatellite/aerial imagery
vith16_plusβœ…βœ…840M1536LVD-1689MViT-H+/16 DistilledVery HighMaximum performance
vit7b16βœ…βœ…6,716M4096SAT-493MViT-7B/16 (Satellite)ExtremeSatellite imagery, research
vit7b16_lvdβœ…βœ…6,716M4096LVD-1689MViT-7B/16 (Standard)ExtremeResearch, maximum scale

Dataset Information

  • LVD-1689M: Large Vision Dataset with 1.689B images - DINOv3 standard training dataset
  • SAT-493M: Satellite Dataset with 493M images - Specialized for satellite/aerial imagery
  • Note: Most DINOv3 models use LVD-1689M for general-purpose vision, while SAT-493M models are optimized for satellite and aerial imagery tasks

Usage

# Single Integration: DINO enhancement at P4 level (DINOv2)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --integration single \
    --dinoversion v2

# Dual Integration: DINO enhancement at P3+P4 levels (DINOv3)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration dual \
    --dinoversion v3

# DualP0P3 Integration: DINO enhancement at P0+P3 levels (Balanced)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration dualp0p3 \
    --dinoversion v3

# Triple Integration: DINO enhancement at P0+P3+P4 levels (Ultimate Performance)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3

# Satellite/Aerial Imagery: Use SAT-493M pretrained models for optimal performance
python train_yolov12_segmentation.py \
    --data satellite_segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dual \
    --dinoversion v3

# Large-scale Satellite Imagery: ViT-7B/16 for maximum accuracy
python train_yolov12_segmentation.py \
    --data satellite_segmentation_data.yaml \
    --model-size x \
    --use-dino \
    --dino-variant vit7b16 \
    --integration dual \
    --dinoversion v3

Important: The --dinoversion parameter is REQUIRED when using --use-dino to specify which DINO version to use.

πŸ’‘ Tip: For satellite/aerial imagery segmentation, use vitl16_distilled or vit7b16 variants which are pretrained on SAT-493M dataset for optimal performance on overhead imagery.

πŸ” DINOv3 Authentication Requirements

DINOv3 models require Hugging Face authentication as they are gated models. You need to:

  1. Request Access: Visit DINOv3 model pages and request access
  2. Get Approval: Approval typically takes 5-15 minutes
  3. Set up Authentication: Use one of the methods below

Method 1: Environment Variable

export HF_TOKEN="your_hf_token_here"
# or
export HUGGING_FACE_HUB_TOKEN="your_hf_token_here"

Method 2: Hugging Face CLI

huggingface-cli login

Note: DINOv2 models work without authentication, while DINOv3 models provide superior performance but require the setup above.

πŸš€ Quick Start

Installation

# Clone repository
git clone https://github.com/Sompote/DinoV3-YOLO-Segment.git
cd DinoV3-YOLO-Segment

# Create conda environment
conda create -n yolov12-segment python=3.11
conda activate yolov12-segment

# Install dependencies
pip install -r requirements.txt
pip install transformers  # For DINO models
pip install -e .

# 4. Setup Hugging Face authentication (REQUIRED for DINOv3 models)
# Method 1: Environment variable
export HF_TOKEN="your_token_here"
# Get your token from: https://huggingface.co/settings/tokens

# Method 2: Interactive login  
huggingface-cli login
# Expected output:
#     _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
#     _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
#     _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
#     _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
#     _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|
# 
#     To log in, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens .
# Enter your token (input will not be visible): 
# Add token as git credential? (Y/n) Y
# Token is valid (permission: fineGrained).
# The token `hf2` has been saved to /workspace/.hf_home/stored_tokens

# Verify installation
python -c "from ultralytics.nn.modules.block import DINO3Backbone; print('βœ… YOLOv12 Segmentation ready!')"

Basic Segmentation Training

# Basic YOLOv12 segmentation training (recommended)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s

# With custom optimizer and parameters
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --optimizer SGD \
    --lr 0.01 \
    --momentum 0.937 \
    --epochs 100 \
    --batch-size 16 \
    --imgsz 640

DINO-Enhanced Segmentation Training

# Single-scale DINO enhancement with DINOv3 (balanced performance)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration single \
    --optimizer AdamW \
    --lr 0.002

# Dual-scale DINO enhancement with DINOv2 (best compatibility)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v2 \
    --integration dual \
    --optimizer AdamW \
    --lr 0.002

# TRIPLE DINO integration with DINOv3 (ultimate performance - P0+P3+P4)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration triple \
    --optimizer AdamW \
    --lr 0.001 \
    --momentum 0.9 \
    --weight-decay 0.01

🎯 Optimizer Control

Control optimizer settings to prevent automatic parameter override:

# Available optimizers with recommended settings
--optimizer SGD --lr 0.01 --momentum 0.937          # Best for large datasets
--optimizer Adam --lr 0.001 --weight-decay 0.0005   # Fast convergence
--optimizer AdamW --lr 0.001 --weight-decay 0.01    # Best for DINO models
--optimizer RMSProp --lr 0.001                       # Adaptive learning
--optimizer auto                                     # Automatic selection (overrides manual settings)

Key Benefits:

  • Manual Control: Setting specific optimizer prevents automatic override
  • Custom Parameters: Your --lr, --momentum, --weight-decay are respected
  • DINO Optimized: AdamW works best with DINO integration models

πŸ’Ύ Weight Saving and Best Model Selection

Ensure proper best weight saving to prevent best.pt = last.pt issues:

# Recommended settings for proper best weight detection
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --val \
    --val-period 1 \
    --patience 20 \
    --save-best \
    --plots \
    --save-json \
    --epochs 150

Best Practices for Weight Saving:

  • Enable Validation: Use --val to ensure fitness calculation
  • Proper Patience: Set --patience 20-50 for early stopping
  • Monitor Training: Use --plots --save-json to track progress
  • Sufficient Epochs: Allow 100+ epochs for convergence detection
  • Lower Learning Rate: Prevents continuous improvement until last epoch

⚑ Fast Training with Optimized Validation

# Fast training for development (25x faster validation)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration single \
    --val-period 5 \
    --val-split 0.2 \
    --fast-val

# Ultra-fast experimentation (100x faster validation)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --val-period 10 \
    --val-split 0.1 \
    --fast-val \
    --epochs 100

# Production training with balanced validation
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration triple \
    --val-period 5 \
    --val-split 0.3 \
    --epochs 300

πŸ›°οΈ Specialized Use Cases

Satellite & Aerial Imagery Segmentation

For optimal performance on satellite, aerial, or overhead imagery, use models pretrained on the SAT-493M dataset:

Use CaseModel VariantParametersIntegrationBest For
Standard Satellitevitl16_distilled300MdualGeneral satellite imagery
πŸ”„ Balanced Satellitevitl16_distilled300Mdualp0p3Optimal memory/performance balance
High-Resolution Aerialvit7b166,716MdualUltra-high detail requirements
πŸ”„ Efficient High-Resvit7b166,716Mdualp0p3Large models with memory constraints
Fast Satellite Processingvitl16_distilled300MsingleReal-time applications

Example Training Commands

# Standard satellite imagery segmentation
python train_yolov12_segmentation.py \
    --data satellite_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dual \
    --dinoversion v3 \
    --epochs 200

# πŸ”„ NEW: Balanced satellite imagery (recommended for most use cases)
python train_yolov12_segmentation.py \
    --data satellite_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --integration dualp0p3 \
    --dinoversion v3 \
    --epochs 200

# Ultra-high resolution aerial imagery (research/precision applications)
python train_yolov12_segmentation.py \
    --data aerial_dataset.yaml \
    --model-size x \
    --use-dino \
    --dino-variant vit7b16 \
    --integration dual \
    --dinoversion v3 \
    --batch-size 2 \
    --epochs 300

# πŸ”„ NEW: Efficient high-resolution with ViT-7B (memory optimized)
python train_yolov12_segmentation.py \
    --data aerial_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16 \
    --integration dualp0p3 \
    --dinoversion v3 \
    --batch-size 4 \
    --epochs 250

πŸ“‘ Why SAT-493M Models? These variants are specifically trained on 493M satellite images, making them particularly effective for:

  • Land use classification segmentation
  • Urban planning and infrastructure mapping
  • Agricultural field boundary detection
  • Environmental monitoring and change detection
  • Disaster assessment and damage mapping

πŸ”„ DualP0P3 + SAT-493M: The combination of DualP0P3 integration with SAT-493M models provides optimal balance for satellite imagery:

  • Lower memory usage than triple integration while maintaining high accuracy
  • Enhanced preprocessing specifically tuned for satellite imagery characteristics
  • Improved P3-level features for better boundary detection in aerial views
  • Recommended for production satellite segmentation workflows

πŸ“Š Training Results - Crack Segmentation

Dataset Information

Dataset: Crack Segmentation Dataset from Roboflow

  • Task: Instance Segmentation of Concrete Cracks
  • Source: University Dataset via Roboflow Universe
  • Classes: Single class (crack) segmentation

YOLOv12seg Variant Comparison

Performance comparison on crack segmentation dataset using YOLOv12 Large (L) variants:

Model ConfigurationmAPβ‚…β‚€ (Box)mAPβ‚…β‚€ (Segment)Model TypeDINO Integration
YOLOv12l-seg0.6720.564StandardNone
YOLOv12l + Triple DINO (VIT-B)0.7800.626EnhancedP0+P3+P4

Key Performance Insights

🎯 Triple DINO Integration Benefits:

  • Box Detection: +16.1% improvement (0.672 β†’ 0.780 mAPβ‚…β‚€)
  • Segmentation: +11.0% improvement (0.564 β†’ 0.626 mAPβ‚…β‚€)
  • Overall: Superior performance across both detection and segmentation tasks

πŸ“ˆ Performance Analysis:

Standard YOLOv12l-seg:
β”œβ”€β”€ Box mAPβ‚…β‚€: 67.2%
β”œβ”€β”€ Segment mAPβ‚…β‚€: 56.4%
└── Configuration: Base segmentation model

Triple DINO YOLOv12l-seg:
β”œβ”€β”€ Box mAPβ‚…β‚€: 78.0% (+10.8 points)
β”œβ”€β”€ Segment mAPβ‚…β‚€: 62.6% (+6.2 points)
└── Configuration: P0+P3+P4 DINO integration with VIT-B

πŸ” Crack Detection Capabilities:

  • High Precision: Excellent performance on thin crack detection
  • Robust Segmentation: Accurate mask prediction for irregular crack shapes
  • Scale Invariance: Effective detection across different crack sizes
  • Real-world Ready: Validated on concrete infrastructure images

For optimal crack segmentation results, use the Triple DINO configuration:

# Recommended training command for crack segmentation
python train_yolov12_segmentation.py \
    --data crack_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration triple \
    --optimizer AdamW \
    --lr 0.001 \
    --momentum 0.9 \
    --weight-decay 0.01 \
    --epochs 300 \
    --batch-size 4 \
    --patience 50 \
    --name crack_triple_dino

πŸ”— Integration Strategies

The new --integration parameter simplifies DINO integration selection:

IntegrationDescriptionEnhancement LevelsPerformanceUse Case
singleDINO at P4 level onlyP4 enhancementGoodBalanced speed/accuracy
dualDINO at P3 and P4 levelsP3 + P4 enhancementBetterHigh accuracy needs
tripleDINO at P0, P3, and P4 levelsP0 + P3 + P4 enhancementBestUltimate performance

Integration Examples

# Single integration (fastest)
python train_yolov12_segmentation.py \
    --data data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration single

# Dual integration (balanced)
python train_yolov12_segmentation.py \
    --data data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration dual

# Triple integration (ultimate)
python train_yolov12_segmentation.py \
    --data data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --dinoversion v3 \
    --integration triple

πŸš€ Advanced ViT Variants

For maximum performance with the largest DINOv3 models:

# ViT-L/16 Distilled (300M parameters, satellite-trained) - Optimized large model
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16_distilled \
    --dinoversion v3 \
    --integration dual \
    --epochs 250 \
    --batch-size 4 \
    --name vitL_distilled_satellite

# ViT-H+/16 Distilled (840M parameters) - High-performance variant
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vith16_plus \
    --dinoversion v3 \
    --integration dual \
    --epochs 200 \
    --batch-size 2 \
    --name vitH_plus_experiment

# ViT-7B/16 (6.7B parameters, satellite-trained) - Ultimate performance (Satellite)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16 \
    --dinoversion v3 \
    --integration dual \
    --epochs 150 \
    --batch-size 1 \
    --device cuda \
    --name vit7b_ultimate_satellite

# ViT-7B/16 (6.7B parameters, LVD-1689M trained) - Ultimate performance (Standard)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16_lvd \
    --dinoversion v3 \
    --integration dual \
    --epochs 150 \
    --batch-size 1 \
    --device cuda \
    --name vit7b_ultimate_standard

# Triple integration for ViT-7B/16 (satellite-trained, ultimate performance)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16 \
    --dinoversion v3 \
    --integration triple \
    --epochs 100 \
    --batch-size 1 \
    --name vit7b_triple_satellite

# Triple integration for ViT-7B/16 (LVD-1689M, ultimate performance)  
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vit7b16_lvd \
    --dinoversion v3 \
    --integration triple \
    --epochs 100 \
    --batch-size 1 \
    --name vit7b_triple_standard

πŸ” Segmentation Inference

Basic Inference

from ultralytics import YOLO

# Load trained segmentation model
model = YOLO('runs/segment/yolov12s-seg/weights/best.pt')

# Run segmentation inference
results = model('path/to/image.jpg')
results[0].show()  # Display results with instance masks

# Access segmentation masks
for result in results:
    masks = result.masks  # Masks object
    if masks is not None:
        mask_data = masks.data  # Raw mask data
        mask_pixels = masks.xy  # Mask contours

Enhanced Inference with DINO

from ultralytics import YOLO

# Load DINO-enhanced segmentation model
model = YOLO('runs/segment/yolov12l-seg-dino3-triple-vitb16-dual/weights/best.pt')

# Enhanced segmentation inference with DINO
results = model('crack_image.jpg')
for result in results:
    # Access enhanced masks from DINO features
    if result.masks is not None:
        print(f"Found {len(result.masks)} precise instance masks")
        # Masks are more accurate due to DINO enhancement
        masks = result.masks.data

πŸ” Real Crack Segmentation Results

The YOLOv12-DINO triple integration model demonstrates exceptional crack detection performance on real concrete structures:

Example 1: Multiple Crack Detection Crack Detection Example 1

  • βœ… Multiple Instances: 2 distinct crack segments detected (confidence: 0.25, 0.69)
  • βœ… Precise Boundaries: Pixel-perfect mask tracing of thin crack patterns
  • βœ… Complex Shapes: Accurately follows curved and branched crack geometry

Example 2: Single Crack with High Precision Crack Detection Example 2

  • βœ… High Confidence: Single crack detected with 0.70 confidence score
  • βœ… Fine Detail: Captures narrow crack width variations
  • βœ… Boundary Precision: Perfect segmentation of irregular crack edges
  • βœ… Background Separation: Clean distinction from surface texture

Performance Highlights:

🎯 Crack Segmentation Performance:
   Model: YOLOv12l + Triple DINO (P0+P3+P4)
   β”œβ”€β”€ Instance Detection: 100% accuracy on visible cracks
   β”œβ”€β”€ Confidence Range: 0.25 - 0.70 (robust detection)
   β”œβ”€β”€ Mask Precision: Pixel-level boundary accuracy
   β”œβ”€β”€ Processing Speed: Real-time inference
   └── Use Cases: Infrastructure inspection, quality control

CLI Inference

# Train crack segmentation model with triple DINO integration
python train_yolov12_segmentation.py \
    --data crack_dataset.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitb16 \
    --dinoversion v3 \
    --integration triple \
    --epochs 300 \
    --batch-size 4

# Run crack detection inference with mask output
python inference.py \
    --weights runs/segment/train/weights/best.pt \
    --source concrete_images/ \
    --save --save-masks \
    --conf 0.25 \
    --output crack_results/

πŸš€ Performance Optimization

Validation Speed Optimization

Training can be dramatically sped up with smart validation strategies:

# 🎯 Development Phase: Ultra-fast iteration (100x faster validation)
python train_yolov12_segmentation.py \
    --data your_data.yaml \
    --model-size s \
    --val-period 10 \
    --val-split 0.1 \
    --fast-val \
    --patience 15 \
    --epochs 100

# 🏭 Production Phase: Balanced performance (25x faster validation)  
python train_yolov12_segmentation.py \
    --data your_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitb16 \
    --integration dual \
    --dinoversion v3 \
    --val-period 5 \
    --val-split 0.2 \
    --fast-val \
    --patience 25 \
    --epochs 300

# πŸŽ“ Final Training: Full validation for best results
python train_yolov12_segmentation.py \
    --data your_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3 \
    --val-period 2 \
    --patience 50 \
    --plots \
    --save-json \
    --epochs 300

Training Optimization Tips

StrategySpeed GainBest ForExample
--val-period 1010x fasterLong experiments, developmentSkip validation 9/10 epochs
--val-split 0.25x fasterLarge datasetsUse 20% of validation data
--fast-val2-3x fasterQuick iterationsSimplified metrics
--patience 20Early stoppingPrevent overfittingStop if no improvement for 20 epochs
--cache ram20-50% fasterSystems with sufficient RAMCache dataset in memory
Combined50-100x fasterRapid experimentationUse all strategies together

βš™οΈ Advanced Training Hyperparameters

πŸ“‹ Complete Hyperparameter Reference

All hyperparameters are configured through CLI arguments in train_yolov12_segmentation.py and default values from ultralytics/cfg/default.yaml:

🎯 Core Training Parameters

ParameterCLI ArgumentDefaultRangeDescription
Learning Rate Control
Initial LR--lr0.010.0001-0.1Initial learning rate (SGD=1E-2, Adam=1E-3)
Final LR FactorN/A (default.yaml)0.010.001-0.1Final learning rate = lr0 Γ— lrf
Momentum--momentum0.9370.8-0.99SGD momentum / Adam beta1
Weight Decay--weight-decay0.00050.0001-0.01L2 regularization strength
Warmup Strategy
Warmup Epochs--warmup-epochs30-20Linear warmup duration
Warmup MomentumN/A (default.yaml)0.80.5-0.95Initial momentum during warmup
Warmup Bias LRN/A (default.yaml)0.00.0-0.1Bias learning rate during warmup
Training Control
Epochs--epochsauto50-1000Training duration
Batch Size--batch-sizeauto1-128Samples per batch
Patience--patience105-200Early stopping patience
Image Size--imgsz640320-1280Input resolution

🎯 Loss Function Hyperparameters

ComponentCLI ArgumentDefaultRangeDescription
Box Loss--box-loss-gain7.51.0-20.0Bounding box regression weight
Classification Loss--cls-loss-gain0.50.1-2.0Class prediction weight
DFL Loss--dfl-loss-gain1.50.5-5.0Distribution Focal Loss weight

🎨 Data Augmentation Parameters

CategoryCLI ArgumentDefaultRangeDescription
Color Augmentation
HSV Hue--hsv-h0.0150.0-0.1Hue shift range
HSV Saturation--hsv-s0.70.0-1.0Saturation scaling
HSV Value--hsv-v0.40.0-1.0Brightness scaling
Geometric Augmentation
Rotation--degrees0.00.0-45.0Random rotation degrees
Translation--translate0.10.0-0.5Position shift fraction
Scaling--scale0.50.0-1.0Size variation range
Shearing--shear0.00.0-20.0Shear transformation
Perspective--perspective0.00.0-0.001Perspective distortion
Flip Augmentation
Vertical Flip--flipud0.00.0-1.0Up-down flip probability
Horizontal Flip--fliplr0.50.0-1.0Left-right flip probability
Advanced Augmentation
Mosaic--mosaic1.00.0-1.04-image mosaic probability
Mixup--mixup0.00.0-1.0Image blending probability
Copy-Paste--copy-paste0.10.0-1.0Instance copy-paste (segmentation)

🎭 Segmentation-Specific Parameters

ParameterCLI ArgumentDefaultDescription
Overlap Masks--overlap-maskTrueAllow overlapping instance masks
Mask Ratio--mask-ratio4Mask downsample ratio (1,2,4,8)
Single Class--single-clsFalseTreat as single-class problem

🚨 Advanced Gradient Control

⚠️ Gradient Explosion Prevention

For unstable training with NaN losses or exploding gradients:

# Conservative Stable Training
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.001 \
    --weight-decay 0.001 \
    --warmup-epochs 15 \
    --momentum 0.9 \
    --box-loss-gain 3.0 \
    --cls-loss-gain 0.25 \
    --dfl-loss-gain 0.75 \
    --batch-size 8 \
    --patience 25

πŸ“ˆ Progressive Training Strategy

# Phase 1: Warmup Training (50 epochs)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.005 \
    --warmup-epochs 20 \
    --epochs 50 \
    --patience 15 \
    --name phase1_warmup

# Phase 2: Full Training (resume from phase 1)
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.01 \
    --epochs 200 \
    --patience 30 \
    --resume runs/segment/phase1_warmup/weights/last.pt \
    --name phase2_full

πŸ”„ Model-Size Specific Hyperparameters

Nano Models (n) - Fast Training:

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size n \
    --lr 0.01 \
    --batch-size 32 \
    --weight-decay 0.0005 \
    --warmup-epochs 3 \
    --epochs 150

Large Models (l,x) - Stable Training:

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --lr 0.003 \
    --batch-size 6 \
    --weight-decay 0.0003 \
    --warmup-epochs 10 \
    --patience 50 \
    --epochs 300

πŸ§ͺ DINO-Enhanced Gradient Control

DINO Single-Scale (Stable):

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --use-dino \
    --dino-variant vitb16 \
    --integration single \
    --dinoversion v3 \
    --lr 0.008 \
    --weight-decay 0.0003 \
    --warmup-epochs 5 \
    --batch-size 8

DINO Dual-Scale (Advanced):

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration dual \
    --dinoversion v2 \
    --lr 0.002 \
    --weight-decay 0.0001 \
    --warmup-epochs 15 \
    --batch-size 4 \
    --patience 50

DINO Triple Integration (Expert):

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3 \
    --lr 0.0015 \
    --weight-decay 0.00005 \
    --warmup-epochs 20 \
    --batch-size 2 \
    --patience 75 \
    --epochs 400

πŸ’‘ Hyperparameter Tuning Guidelines

🎯 Learning Rate Selection

ScenarioRecommended LRReasoning
Small datasets (<1000 images)0.005-0.008Prevent overfitting
Large datasets (>10k images)0.01-0.02Faster convergence
DINO integration0.002-0.008Complex model needs stability
Fine-tuning0.001-0.003Preserve pretrained features
High resolution (>1024px)0.003-0.006More stable gradients

πŸ”§ Batch Size Optimization

# Auto-batch size detection
python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --batch-size -1  # Auto-detect maximum batch size

# Manual batch size based on GPU memory
# RTX 3060 (12GB): batch-size 8-16
# RTX 4090 (24GB): batch-size 16-32
# A100 (40GB): batch-size 32-64

πŸ“Š Loss Balance Strategies

Balanced Detection + Segmentation:

--box-loss-gain 7.5 --cls-loss-gain 0.5 --dfl-loss-gain 1.5

Prioritize Mask Quality:

--box-loss-gain 5.0 --cls-loss-gain 1.0 --dfl-loss-gain 2.0

Prioritize Detection Accuracy:

--box-loss-gain 10.0 --cls-loss-gain 0.3 --dfl-loss-gain 1.0

πŸ”¬ Experimental Configurations

πŸ† Maximum Accuracy Setup

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size l \
    --use-dino \
    --dino-variant vitl16 \
    --integration triple \
    --dinoversion v3 \
    --lr 0.002 \
    --weight-decay 0.0001 \
    --warmup-epochs 25 \
    --patience 75 \
    --box-loss-gain 6.0 \
    --cls-loss-gain 0.8 \
    --dfl-loss-gain 2.0 \
    --mixup 0.2 \
    --copy-paste 0.4 \
    --epochs 500 \
    --cache ram

⚑ Speed-Optimized Setup

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size s \
    --lr 0.015 \
    --batch-size 24 \
    --warmup-epochs 2 \
    --patience 15 \
    --val-period 5 \
    --fast-val \
    --epochs 100

🧠 Memory-Efficient Setup

python train_yolov12_segmentation.py \
    --data segmentation_data.yaml \
    --model-size m \
    --batch-size 4 \
    --lr 0.005 \
    --weight-decay 0.001 \
    --warmup-epochs 10 \
    --cache False \
    --workers 4

πŸ“ Repository Structure

🎯 Key Files and Scripts

FileDescriptionUsage
Training Scripts
train_yolov12_segmentation.pyMain segmentation training scriptCLI interface with fast validation
train_yolov12_dino.pyDINO detection training scriptFor detection tasks
Inference & Demo
inference.pySegmentation inference scriptBatch processing with mask output
app.pyGradio web interfaceInteractive demo
Documentation
FAST_VALIDATION_GUIDE.mdFast validation strategiesSpeed optimization guide
SEGMENTATION_CLI_GUIDE.mdComplete CLI referenceAll training parameters
README_SEGMENTATION.mdSegmentation overviewTask-specific guide
DINO_FIX_DOCUMENTATION.mdTechnical fixesTroubleshooting guide

🎭 Segmentation Model Configs

Model SizeStandardSingle IntegrationDual IntegrationTriple Integration
Nanoyolov12n-seg.yamlyolov12n-dino3-vitb16-single-seg.yamlyolov12n-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Smallyolov12s-seg.yamlyolov12s-dino3-vitb16-single-seg.yamlyolov12s-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Mediumyolov12m-seg.yamlyolov12m-dino3-vitb16-single-seg.yamlyolov12m-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Largeyolov12l-seg.yamlyolov12l-dino3-vitb16-single-seg.yamlyolov12l-dino3-vitb16-dual-seg.yamlUses dual + preprocessing
Extrayolov12x-seg.yamlyolov12x-dino3-vitb16-single-seg.yamlyolov12x-dino3-vitb16-dual-seg.yamlUses dual + preprocessing

πŸ“Š Results & Assets

DirectoryContentsPurpose
runs/segment/Training results, weights, metricsModel outputs
safety_test_results/Test images and predictionsValidation samples
assets/Architecture diagrams (SVG)Technical documentation
logs/Training performance logsModel benchmarks

πŸ› οΈ Configuration Files

FileDescription
requirements.txtPython dependencies
requirements_rtx5090.txtRTX 5090 specific requirements
pyproject.tomlProject configuration
ultralytics/cfg/models/v12/All model architecture configs
ultralytics/cfg/datasets/Dataset configuration templates

πŸ› οΈ Training Guide

Dataset Preparation

# segmentation_data.yaml
path: /path/to/dataset
train: images/train
val: images/val
test: images/test

nc: 1  # number of classes
names: ['crack']  # class names

# Segmentation-specific paths
train_masks: masks/train  # Training masks directory
val_masks: masks/val      # Validation masks directory

CLI Training Interface

# Show all available options
python train_yolov12_segmentation.py --help

# Basic segmentation training
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size s

# DINO-enhanced training (recommended) - simplified with --integration
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size s --use-dino --dino-variant vitb16 --dinoversion v3 --integration single

# πŸ”„ NEW: DualP0P3 integration (balanced performance/memory)
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size s --use-dino --dino-variant vitb16 --dinoversion v3 --integration dualp0p3

# Advanced configuration with early stopping - simplified with --integration
python train_yolov12_segmentation.py --data segmentation_data.yaml --model-size l --use-dino --dino-variant vitl16 --dinoversion v2 --integration dual --epochs 150 --batch-size 8 --patience 20 --name my-experiment

Key CLI Arguments

CategoryArgumentsDescription
Required--data, --model-sizeDataset YAML and model size (n/s/m/l/x)
DINO--use-dino, --dino-variant, --integration, --dinoversionDINO enhancement options (single/dual/dualp0p3/triple integration, v2/v3 support, dinoversion REQUIRED)
Optimizer--optimizer, --lr, --momentum, --weight-decayOptimizer control (SGD/Adam/AdamW/RMSProp/auto)
Fast Validation--val-period, --val-split, --fast-valSpeed optimization (25-100x faster)
Segmentation--overlap-mask, --mask-ratio, --box-loss-gainSegmentation-specific parameters
Training--epochs, --batch-size, --device, --patienceCore training configuration
Experiment--name, --project, --resumeExperiment management

🎯 DINO Integration Strategies

Available Models

ultralytics/cfg/models/v12/
β”œβ”€β”€ Standard Segmentation
β”‚   β”œβ”€β”€ yolov12n-seg.yaml
β”‚   β”œβ”€β”€ yolov12s-seg.yaml
β”‚   β”œβ”€β”€ yolov12m-seg.yaml
β”‚   β”œβ”€β”€ yolov12l-seg.yaml
β”‚   └── yolov12x-seg.yaml
β”œβ”€β”€ Single-Scale DINO
β”‚   β”œβ”€β”€ yolov12n-dino3-vitb16-single-seg.yaml
β”‚   β”œβ”€β”€ yolov12s-dino3-vitb16-single-seg.yaml
β”‚   β”œβ”€β”€ yolov12m-dino3-vitb16-single-seg.yaml
β”‚   β”œβ”€β”€ yolov12l-dino3-vitb16-single-seg.yaml
β”‚   └── yolov12x-dino3-vitb16-single-seg.yaml
β”œβ”€β”€ Dual-Scale DINO
β”‚   β”œβ”€β”€ yolov12n-dino3-vitb16-dual-seg.yaml
β”‚   β”œβ”€β”€ yolov12s-dino3-vitb16-dual-seg.yaml
β”‚   β”œβ”€β”€ yolov12m-dino3-vitb16-dual-seg.yaml
β”‚   β”œβ”€β”€ yolov12l-dino3-vitb16-dual-seg.yaml
β”‚   └── yolov12x-dino3-vitb16-dual-seg.yaml
β”œβ”€β”€ πŸ”„ DualP0P3 Integration (uses preprocessing configs + P3 enhancement)
β”‚   β”œβ”€β”€ Built from preprocessing configs + automatic P3 enhancement
β”‚   └── Configured via --integration dualp0p3
└── Triple Integration (uses dual configs + preprocessing)
    β”œβ”€β”€ Built from dual configs + automatic preprocessing
    └── Configured via --integration triple

Integration Approaches

πŸ”Ή Single Integration (--integration single)

  • Integration Point: P4 feature level (40Γ—40 feature maps)
  • CLI Usage: --use-dino --dino-variant vitb16 --integration single --dinoversion v3
  • Benefits: Enhanced mask boundary precision, improved medium instance segmentation
  • Best For: Balanced accuracy/speed, medium instances 32-96 pixels

πŸ”Ή Dual Integration (--integration dual)

  • Integration Points: P3 (80Γ—80) and P4 (40Γ—40) feature levels
  • CLI Usage: --use-dino --dino-variant vitl16 --integration dual --dinoversion v3
  • Benefits: Multi-scale mask generation, enhanced small instance segmentation
  • Best For: Dense scenes, small instances, maximum mask accuracy

πŸ”„ DualP0P3 Integration (--integration dualp0p3)

  • Integration Points: P0 (input preprocessing) + P3 (80Γ—80) feature level
  • CLI Usage: --use-dino --dino-variant vitl16 --integration dualp0p3 --dinoversion v3
  • Benefits: Balanced preprocessing enhancement with P3 feature extraction
  • Best For: Moderate memory usage, improved feature extraction, satellite imagery

πŸš€ Triple Integration (--integration triple)

  • Integration Points: P0 (input preprocessing) + P3 + P4 feature levels
  • CLI Usage: --use-dino --dino-variant vitl16 --integration triple --dinoversion v3
  • Benefits: Ultimate performance with input enhancement and multi-scale features
  • Best For: Maximum accuracy requirements, research applications

Validation

yolov12n yolov12s yolov12m yolov12l yolov12x

from ultralytics import YOLO

model = YOLO('yolov12{n/s/m/l/x}.pt')
model.val(data='coco.yaml', save_json=True)

Export

from ultralytics import YOLO

model = YOLO('yolov12{n/s/m/l/x}.pt')
model.export(format="engine", half=True)  # or format="onnx"

Updates

  • 2025/09/22: 🎭 NEW: Complete YOLOv12 Segmentation with DINOv3 - Added comprehensive instance segmentation support with 20 model variants! Features systematic architecture with 4 integration approaches (Standard, Single-Scale DINO, Dual-Scale DINO, Preprocessing DINO), and support for all model sizes (n,s,m,l,x). Now includes precise mask prediction with 32 prototypes and 256 feature dimensions for superior segmentation accuracy.

  • 2025/02/19: Base YOLOv12 architecture established with attention-centric design for enhanced feature extraction.

Acknowledgement

Made by AI Research Group, Department of Civil Engineering, KMUTT πŸ›οΈ

The code is based on ultralytics. Thanks for their excellent work!

Official DINOv3 Integration: This implementation uses official DINOv3 models directly from Meta's Facebook Research repository: facebookresearch/dinov3. The integration includes comprehensive support for all official DINOv3 variants and the innovative --dino-input parameter for custom model loading.

YOLOv12: Based on the official YOLOv12 implementation with attention-centric architecture from sunsmarterjie/yolov12.

πŸ”„ Integration Modes Summary

This repository provides 5 distinct integration strategies for combining DINO with YOLOv12 segmentation, each optimized for different use cases:

πŸ“Š Complete Integration Overview

Integration ModePointsMemoryPerformanceSpeedTraining TimeBest Use Case
StandardNone🟒 Lowest🟑 Baseline🟒 Fastest🟒 ShortestDevelopment, testing
SingleP4🟒 Low🟑 Good🟒 Fast🟒 ShortGeneral tasks, production
DualP3+P4🟑 Medium🟒 High🟑 Medium🟑 MediumDense scenes, small objects
πŸ”„ DualP0P3P0+P3🟑 Medium🟒 High🟑 Medium🟑 MediumSatellite imagery, balanced
TripleP0+P3+P4πŸ”΄ High🟒 MaximumπŸ”΄ SlowπŸ”΄ LongResearch, maximum accuracy

🎯 Integration Mode Recommendations

🏭 Production Environments

  • General Segmentation: --integration single or --integration dual
  • Satellite/Aerial Imagery: --integration dualp0p3 ⭐ Recommended
  • Real-time Applications: --integration single

πŸ”¬ Research & Development

  • Maximum Accuracy: --integration triple
  • Balanced Exploration: --integration dualp0p3
  • Memory-Constrained Research: --integration dualp0p3

πŸ›°οΈ Specialized Applications

  • Satellite Imagery Segmentation: --integration dualp0p3 with vitl16_distilled
  • High-Resolution Aerial Photography: --integration dualp0p3 with vit7b16
  • Environmental Monitoring: --integration dualp0p3 + SAT-493M models

πŸš€ Quick Command Reference

# πŸ”„ DualP0P3 - Recommended for most satellite/aerial use cases
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitl16_distilled --integration dualp0p3 --dinoversion v3

# πŸ† Triple - Maximum performance (high memory)
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitl16 --integration triple --dinoversion v3

# ⚑ Single - Fast and efficient
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitb16 --integration single --dinoversion v3

# 🎯 Dual - High performance multi-scale
python train_yolov12_segmentation.py --data your_data.yaml --model-size s --use-dino --dino-variant vitl16 --integration dual --dinoversion v3

πŸ”„ New: The DualP0P3 integration mode provides the optimal balance of performance and efficiency, especially for satellite and aerial imagery. It combines the benefits of preprocessing enhancement (P0) with targeted feature extraction at P3 level, making it ideal for production satellite segmentation workflows.

Citation

If you use this work in your research, please cite:

@misc{sompote2024dinov3yolosegment,
  author = {Sompote},
  title = {DinoV3-YOLO-Segment: Enhanced Instance Segmentation with Vision Transformer Integration},
  year = {2024},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/Sompote/DinoV3-YOLO-Segment}}
}

🌟 Star us on GitHub!

GitHub stars GitHub forks

πŸš€ Revolutionizing Instance Segmentation with Systematic Vision Transformer Integration

Made with ❀️ by the AI Research Group, Department of Civil Engineering
King Mongkut's University of Technology Thonburi (KMUTT)

πŸ”₯ Get Started Now β€’ 🎯 Explore Models β€’ πŸ—οΈ View Integration

Contributors

sunsmarterjie

201 commits

Sompote

60 commits

probicheaux

2 commits

Languages

Python

99.6%