Image Artifacts Pipeline
A modular pipeline for generating synthetic image artifacts using GSAM (Grounded Segment Anything Model) for part detection and FLUX diffusion model for artifact generation.
Overview
This pipeline provides clean, modular Python components for the two-stage artifact generation workflow:
π¦ pipeline/
βββ π __init__.py # Package initialization
βββ π data_loader.py # Dataset handling (COCO, ImageNet, Custom)
βββ π gsam_detector.py # GSAM model integration (GroundingDINO + SAM)
βββ π instance_processor.py # Instance filtering and bbox operations
βββ π flux_generator.py # FLUX model operations
βββ π visualization.py # Image visualization utilities
βββ π prompts.py # OpenAI API utilities for vocabulary generation
βββ π README.md # This file
Architecture
βββββββββββββββββββ
β COCO/ImageNet β
β Custom Dataset β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Data Loader β
β (data_loader) β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ ββββββββββββββββ
β GSAM Detector βββββββ€ OpenAI API β
β (GroundingDINO β β (Vocabulary)β
β + SAM/SAM-HQ) β ββββββββββββββββ
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
βInstance Processorβ
β (Filter, Sample,β
β Create Patches)β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β FLUX Generator β
β (Diffusion with β
β Patch Guidance) β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Visualizer β
β (Results/Masks) β
βββββββββββββββββββ
Components
1. Data Loaders
Handles dataset loading and image sampling for COCO, ImageNet, and custom directories.
from pipeline import COCODataLoader, ImageNetDataLoader, CustomDirectoryDataLoader
# COCO Dataset
coco_loader = COCODataLoader(
dataset_path="/path/to/coco/annotations",
image_path="/path/to/coco/images"
)
cat_ids = coco_loader.get_category_ids(['person'])
img_info, img_array, caption = coco_loader.sample_image_by_category(cat_ids)
# ImageNet Dataset
imagenet_loader = ImageNetDataLoader(
dataset_path="/path/to/imagenet",
split="train"
)
# Custom Directory
custom_loader = CustomDirectoryDataLoader(
directory_path="/path/to/images"
)
2. GSAMDetector
Integrates GroundingDINO and SAM/SAM-HQ for part detection with OpenAI-generated vocabulary.
from pipeline import GSAMDetector
detector = GSAMDetector(
grounding_config="GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py",
grounding_checkpoint="weight/groundingdino_swint_ogc.pth",
sam_checkpoint="weight/sam_vit_h_4b8939.pth",
sam_version="vit_h",
use_sam_hq=False,
box_threshold=0.3,
text_threshold=0.25,
device='cuda'
)
# Detect parts in image
entity_predictions, subentity_predictions, vis_output = detector.detect_parts(
image=img_array,
entities=['person'],
subentities=['person head', 'person arm', 'person leg'],
entity_subentity_mapping={'person': ['person head', 'person arm', 'person leg']},
min_area_ratio=0.005,
max_area_ratio=0.5
)
3. InstanceProcessor
Handles instance filtering, sampling, bounding box operations, and patch annotation creation.
from pipeline import InstanceProcessor
# Sample instance by confidence score
sampled_instance = InstanceProcessor.sample_instance_by_score(
predictions,
min_area_ratio=0.01,
max_area_ratio=0.5
)
# Generate bbox suggestions for addition artifacts
suggested_bbox = InstanceProcessor.generate_bbox_suggestion(
predictions=predictions,
reference_bbox=reference_bbox,
class_name=class_name,
vocab=vocab,
max_ref_overlap=0.3,
min_entity_overlap=0.1
)
# Create annotation with patch indices
annotation_data = InstanceProcessor.create_annotation_dict(
instance=sampled_instance,
img_shape=image.shape,
artifact_type='distortion',
patch_size=16
)
4. FluxGenerator
Manages FLUX diffusion model operations for artifact generation with patch-based guidance.
from pipeline import FluxGenerator, FluxConfig
# Configure FLUX model
config = FluxConfig(
name='flux-dev',
guidance=5.0,
num_steps=25,
pe_step=0.5, # Position encoding step
seed=42
)
# Artifact-type-specific PE steps
config_advanced = FluxConfig(
name='flux-dev',
guidance=5.0,
num_steps=25,
pe_step={
'addition': 0.3,
'removal': 0.3,
'distortion': 0.5
},
seed=42
)
generator = FluxGenerator(device='cuda', config=config_advanced)
# Generate artifact image
generated_image = generator.generate_with_artifacts(
source_prompt="a photo of a person",
target_prompt="a photo of a person",
bbox=target_bbox,
bbox_ref=reference_bbox,
artifact_type='distortion',
source_img=image
)
5. ImageVisualizer
Provides visualization utilities for debugging and quality assurance.
from pipeline import ImageVisualizer
visualizer = ImageVisualizer()
# Show single image with caption
visualizer.show_image(image, caption, title="Original", base_dir="output/")
# Show comparison
visualizer.show_comparison(
original_image,
generated_image,
artifact_data,
caption="Distortion Artifact",
base_dir="output/"
)
# Show bounding box overlay
visualizer.show_bbox_overlay(
image,
target_bbox,
base_dir="output/",
filename="bbox_overlay.png"
)
# Show patch masks
visualizer.show_patch_masks(
image,
reference_patches,
target_patches,
base_dir="output/"
)
Artifact Types
The pipeline supports three types of image artifacts:
1. Distortion
Modifies the appearance of existing parts while keeping them in place.
- Uses reference patches to guide where distortion is applied
- Configurable distortion kernels (jitter, swirl, voronoi)
2. Removal
Removes detected parts from images naturally.
- Uses reference patches to identify removal areas
- FLUX inpainting fills removed areas contextually
3. Addition
Adds new instances of detected parts in suitable locations.
- Uses reference patches as source templates
- Generates target patches using IoU-based intelligent placement
- Maintains visual consistency with surrounding context
Configuration
Detection Parameters
| Parameter | Default | Description |
|---|---|---|
box_threshold |
0.3 |
Detection confidence threshold |
text_threshold |
0.25 |
Text-image matching threshold |
min_area_ratio |
0.005 |
Minimum part size (0.5% of image) |
max_area_ratio |
0.5 |
Maximum part size (50% of image) |
nms_threshold |
0.5 |
Non-maximum suppression threshold |
Generation Parameters
| Parameter | Default | Description |
|---|---|---|
guidance |
5.0 |
Guidance scale for FLUX |
num_steps |
25 |
Number of diffusion steps |
pe_step |
0.5 |
Position encoding step size |
inject |
25 |
Injection step in diffusion |
seed |
42 |
Random seed for reproducibility |
Dependencies
torch- PyTorch for deep learningopenai- For vocabulary generationpycocotools- For COCO dataset handlingsupervision- For detection utilitiesgroundingdino- For grounded detectionsegment_anything- For segmentationmatplotlib- For visualizationPIL- For image processingnumpy- For numerical operations
Installation
- Install GroundingDINO and SAM following their respective installation guides
- Download model weights and place them in
src/weight/directory - Set up OpenAI API key:
export OPENAI_API_KEY='your-key' - Install required dependencies
See the main README for detailed installation instructions.
Usage
See batch_gsam_segmentation.py and batch_flux_generation.py for complete batch processing examples.
Performance Tips
- GPU Memory: Use SAM
vit_bfor limited GPU memory,vit_hfor best quality - Filtering: Adjust area ratios to balance quality vs. quantity
- Speed: Lower
num_steps(15-20) for faster generation - Quality: Higher
num_steps(25-35) for better results
Troubleshooting
Common Issues
- GSAM setup issues: Ensure GroundingDINO and SAM weights are downloaded
- OpenAI API errors: Check API key and rate limits
- COCO dataset errors: Verify dataset paths and structure
- GPU memory issues: Use smaller SAM model or reduce batch size
License
This pipeline integrates multiple open-source components, each with their own licenses. See the main repository LICENSE and model_licenses/ directory for details.