Fine-tuned Stable Diffusion 2 Model for Time Series Image Inpainting
This directory contains a fine-tuned Stable Diffusion 2 inpainting model specialized for reconstructing mathematical time series visualizations (GAF, MTF, RP, Spectrogram).
📋 Model Overview
Property
Value
Base Model
stabilityai/stable-diffusion-2-inpainting
Specialized For
Mathematical time series image reconstruction
Image Types
GAF, MTF, RP, Spectrogram
Input Size
512×512 pixels
Architecture
UNet2DConditionModel (fine-tuned)
Training Method
Cross-validation with early stopping
Best Validation Loss
0.03623
Training Date
September 2024
🎯 Purpose
This model was fine-tuned to perform inpainting on time series visualizations. It can:
Reconstruct missing regions in GAF (Gramian Angular Field) images
Fill gaps in MTF (Markov Transition Field) images
Complete RP (Recurrence Plot) images
Restore Spectrogram images
The model is specifically trained on synthetic time series data with controlled missing patterns (random, block, periodic, edge).
GPU: NVIDIA GPU with 16+ GB VRAM (RTX 3090, A5000, or better)
CUDA: 11.8+
RAM: 32 GB
Storage: 50 GB (for model + datasets)
Tested On
GPU: NVIDIA TITAN RTX (24 GB GDDR6)
Driver: 525.147.05
CUDA: 12.0
OS: Ubuntu 18.04.1 LTS
🎨 Example Use Cases
1. Recovering Missing Time Series Data
python
1# Load corrupted time series image2corrupted_img = load_corrupted_timeseries_image()3mask = create_missing_data_mask()45# Reconstruct using fine-tuned model6reconstructed = pipeline(7 prompt="high quality gramian angular field mathematical visualization",8 image=corrupted_img,9 mask_image=mask,10 guidance_scale=7.5,11 num_inference_steps=5012).images[0]
2. Batch Processing Multiple Images
python
1import glob
2from pathlib import Path
34# Process all GAF images5for img_path in glob.glob("data/missing/*.png"):6 image = Image.open(img_path).resize((512,512))7 mask = generate_mask_from_image(image)89 result = pipeline(10 prompt="high quality gramian angular field mathematical visualization",11 image=image,12 mask_image=mask
13).images[0]1415 output_path = Path("data/reconstructed")/ Path(img_path).name
16 result.save(output_path)
3. Integration with Forecasting Pipeline
python
1# 1. Time series → Image (GAF/MTF/RP/SPEC)2image = time_series_to_gaf(corrupted_series)34# 2. Create mask for missing regions5mask = create_mask_from_nan(corrupted_series)67# 3. Inpaint image8reconstructed_image = pipeline(9 prompt="high quality gramian angular field mathematical visualization",10 image=image,11 mask_image=mask
12).images[0]1314# 4. Image → Time series15reconstructed_series = gaf_to_time_series(reconstructed_image)1617# 5. Use for forecasting18forecast = xgboost_model.predict(reconstructed_series)
🔧 Advanced Configuration
Inference Parameters
python
1result = pipeline(2 prompt=prompt,3 image=image,4 mask_image=mask,56# Quality settings7 num_inference_steps=50,# 20-100, higher = better quality8 guidance_scale=7.5,# 1-20, higher = closer to prompt910# Generation settings11 num_images_per_prompt=1,12 generator=torch.manual_seed(42),# For reproducibility1314# Advanced15 eta=0.0,# DDIM eta parameter16 output_type="pil"# "pil" or "np"17)
Memory Management
python
1# For limited VRAM2pipeline.enable_attention_slicing()3pipeline.enable_vae_slicing()45# Use CPU offloading6pipeline.enable_sequential_cpu_offload()78# Lower precision9pipeline = pipeline.to(torch_dtype=torch.float16)
1# Reduce batch size, use attention slicing2pipeline.enable_attention_slicing()3pipeline.enable_vae_slicing()45# Or use float166pipeline = pipeline.to(torch_dtype=torch.float16)
Poor Reconstruction Quality
Increase inference steps: 20 → 50 or 100
Adjust guidance scale: Try 5.0 - 10.0
Check prompt: Use correct image type prompt
Mask quality: Ensure mask accurately covers missing regions
Slow Inference
python
1# Use fewer inference steps (trade quality for speed)2result = pipeline(..., num_inference_steps=20)34# Use DPM++ Sampler (faster)5from diffusers import DPMSolverMultistepScheduler
6pipeline.scheduler = DPMSolverMultistepScheduler.from_config(7 pipeline.scheduler.config
8)
📚 Related Files
Training Script:finetune_stable_diffusion.py
Dataset Generator:generate_training_dataset.py
Integration Script:integrate_custom_model.py
Main Experiment:iterative_experiment.py
Image Encoders:ts_image_inpainting.py
📖 References
Base Model
bibtex
1@article{rombach2022high,
2 title={High-resolution image synthesis with latent diffusion models},
3 author={Rombach, Robin and Blattmann, Andreas and Lorenz, Dominik and Esser, Patrick and Ommer, Bj{\"o}rn},
4 journal={CVPR},
5 year={2022}
6}
This model can be used in the main experimental pipeline:
python
1# In iterative_experiment.py or ts_image_inpainting.py2from models.stdiff import StableDiffusion2MathInpainter
34# Initialize inpainter with this model5inpainter = StableDiffusion2MathInpainter(6 model_path="models/stable_diffusion_2_all_4/best_model"7)89# Use for inpainting10reconstructed = inpainter.inpaint(11 image=corrupted_gaf_image,12 mask=missing_mask,13 enc_name="gaf"14)
⚖️ License
This model is a fine-tuned version of Stable Diffusion 2, which is released under the CreativeML OpenRAIL-M license.
Base Model License: CreativeML OpenRAIL-M Fine-tuned Weights: Same as base model
If you use this model in your research, please cite:
bibtex
1@misc{ts_sd2_finetuned_2024,
2 title={Fine-tuned Stable Diffusion 2 for Time Series Image Inpainting},
3 author={[Dariusz Kobiela, Jarosław Kobiela, Adam Kurowski, Agnieszka Landowska]},
4 year={2025},
5 howpublished={Trained on synthetic time series dataset},
6 note={Fine-tuned from stabilityai/stable-diffusion-2-inpainting}
7}
📧 Support
For questions or issues:
Check the troubleshooting section above
Review training logs in ../cross_validation_results.json