--- license: apache-2.0 tags: - image-editing - diffusion - flux - multi-instance --- # MICE: Multi-Instance Controlled Editing Code for spatially-controlled multi-instance image editing with FLUX.2-klein (4B). MICE constrains cross-instance attention leakage during inference so that each edit stays within its intended spatial region. ## Requirements ```bash pip install torch diffusers transformers pillow tqdm loguru numpy ``` The model weights are downloaded automatically from HuggingFace on first run: ``` black-forest-labs/FLUX.2-klein-4B ``` ## Quick start — single image ```bash python infer.py \ --image input.jpg \ --edits "Replace the cat with a dog" "Replace the lamp with a vase" \ --masks mask_cat.png mask_lamp.png \ --output result.png ``` Provide one `--edits` string and one `--masks` path per instance you want to edit. Masks are binary images (white = instance region, black = background). If you do not have masks, use normalized bounding boxes instead: ```bash python infer.py \ --image input.jpg \ --edits "Replace the cat with a dog" \ --bboxes "0.1 0.2 0.5 0.8" \ --output result.png ``` ### All options | Flag | Default | Description | |---|---|---| | `--image` | *(required)* | Path to the input image | | `--edits` | *(required)* | Edit instruction per instance | | `--masks` | — | Binary mask image per instance (mutually exclusive with `--bboxes`) | | `--bboxes` | — | Normalized `x1 y1 x2 y2` bbox per instance (mutually exclusive with `--masks`) | | `--output` | `result.png` | Output path | | `--model` | `black-forest-labs/FLUX.2-klein-4B` | HuggingFace model ID or local path | | `--num_inference_steps` | `4` | Number of denoising steps | | `--kernel_size` | `11` | Spatial kernel size for attention falloff | | `--temperature` | `3.0` | Steepness of spatial falloff | | `--double_layers` | `0,5` | Double-stream block range for attention binding | | `--single_layers` | `0,20` | Single-stream block range for attention binding | | `--strict` | flag | Stricter cross-instance isolation | ## Benchmark inference Scripts for running inference over the full MICE-Bench and LoMOE-Bench datasets are also included. ### MICE-Bench (ground-truth masks) ```bash python infer_flux2_mice.py \ --exp_name my_experiment \ --dataset_root ../mice_bench \ --num_inference_steps 4 \ --kernel_size 11 \ --temperature 3.0 \ --hard_image_attribute_binding_list_double 0,5 \ --hard_image_attribute_binding_list_single 0,20 \ --use_masks ``` Results are saved to `results_micebench/mice_flux2_klein_/`. ### MICE-Bench (SAM3 masks) ```bash python infer_flux2_mice_sam3.py \ --exp_name my_experiment \ --dataset_root /path/to/mice_bench_sam3 \ --num_inference_steps 4 \ --kernel_size 11 \ --temperature 3.0 \ --use_masks ``` Results are saved to `results_micebench_sam3/mice_flux2_sam3_/`. ### LoMOE-Bench (ground-truth masks) LoMOE-Bench is expected at `benchmark/data/LoMOE-Bench/` relative to the repository root (path is hardcoded in `lomoe_dataset.py`). ```bash python infer_flux2_lomoe.py \ --exp_name my_experiment \ --num_inference_steps 4 \ --kernel_size 11 \ --temperature 3.0 \ --hard_image_attribute_binding_list_double 0,5 \ --hard_image_attribute_binding_list_single 0,20 \ --use_masks ``` Results are saved to `results/lomoe_flux2_klein_/`. ### LoMOE-Bench (SAM3 masks) ```bash python infer_flux2_lomoe_sam3.py \ --exp_name my_experiment \ --dataset_root /path/to/lomoe_bench_sam3 \ --num_inference_steps 4 \ --kernel_size 11 \ --temperature 3.0 \ --use_masks ``` Results are saved to `results_sam3/lomoe_flux2_sam3_/`. ## Dataset structure **MICE-Bench** (`--dataset_root`): ``` mice_bench/ LoMOE.json images/ masks/ ``` **SAM3 datasets** (`--dataset_root`): ``` / LoMOE_mobius.json # mask paths point to SAM3-generated masks images/ masks/ ``` **LoMOE-Bench** (hardcoded path `benchmark/data/LoMOE-Bench/`): ``` benchmark/data/LoMOE-Bench/ LoMOE.json LoMOE_multi_turn_faithful.json LoMOE_multi_turn_enhanced.json utils/ mask_orig_prompts.txt text_prompts.txt images/ masks/ ```