SarcasmDiffusion / README.md
Ricardouchub's picture
Update README.md
c6939ae verified
---
license: mit
base_model:
- stabilityai/stable-diffusion-xl-base-1.0
pipeline_tag: text-to-image
---
# SarcasmDiffusion — SDXL Fused Meme Generator
**Model type:** Stable Diffusion XL (Base 1.0) fine‑tuned via **LoRA** (merged/fused) to learn the *visual* style of sarcastic/ironic memes.
**Author:** Ricardo Urdaneta (github.com/Ricardouchub)
---
## Overview
SarcasmDiffusion is a diffusion-based generative model focused on producing **clean meme-style photographs** that are suitable for **caption overlays** (text is added *after* generation). The model was LoRA‑fine‑tuned on a filtered and enriched subset of the *Hateful Memes* dataset to capture stylistic cues of humorous/ironic memes while **avoiding offensive content**.
- **Base:** `stabilityai/stable-diffusion-xl-base-1.0`
- **Fine‑tuning:** LoRA on the **UNet** only; **VAE** and **text encoders** are frozen.
- **Exported artifact:** **Fused SDXL** (no external LoRA required at inference).
> This model focuses on **style transfer for meme aesthetics** (composition, lighting, “stock-photo vibe”), *not* on rendering text inside images. Add titles/subtitles with your own overlay function or editor.
---
## Intended Use
- Generating **meme-ready images** with space at the top/bottom for captions.
- Creative exploration of humorous/ironic visual setups controlled by prompts.
- Educational/portfolio use for **LoRA fine‑tuning workflows** with SDXL.
### Out of Scope / Limitations
- **No text rendering inside the image** (explicitly discouraged via negative prompts).
- May produce **stock-like** aesthetics by design.
- Not suitable for generating or amplifying **harmful, hateful, or NSFW** content.
- As with all text-to-image systems, prompts with ambiguous semantics can yield unpredictable outputs.
---
## Training Summary
- **Base model:** SDXL Base 1.0
- **LoRA rank / alpha / dropout:** `r=8`, `alpha=16`, `dropout=0.05`
- **Resolution:** 1024 (training); common inference at 768–896 for speed
- **Batch:** 1 (gradient accumulation = 4)
- **Steps:** ~9k (≈2 epoch on ~5k images)
- **Learning Rate:** 0.0001
- **Precision:** fp16 (LoRA params kept in fp32 during training)
- **Optimizer:** AdamW
- **Scheduler:** cosine with warmup (recommended)
- **Frozen:** VAE, text_encoder, text_encoder_2
### Data
- Source: *Hateful Memes* (Facebook AI).
- We **excluded** labeled hateful samples and applied **NLP enrichment**:
- Emotion scoring (GoEmotions distilled) and irony scoring (RoBERTa‑irony).
- Heuristics + percentiles → tones: `humor / irony / neutral`.
- Final training CSV: prompts balanced by tone; **negative prompts** to avoid text overlays, low‑quality artifacts, watermarks/logos, and unsafe content.
> The dataset is **not** included here. Please obtain *Hateful Memes* under its original terms and reproduce the preprocessing if needed.
---
## Safety, Ethics & Mitigations
- Hateful labels were filtered out **negative prompts** is used to avoid NSFW/hate/text overlays.
- Despite mitigations, **misuse is possible**. Users are responsible for **prompting responsibly** and complying with local laws and platform policies.
- Do not use the model to create defamatory, harassing, discriminatory, or otherwise harmful imagery.
**Known risks:** dataset biases may remain; aesthetic biases (stock-photo look); occasional failure to respect negative prompts.
---
## How to Use
```python
from diffusers import AutoPipelineForText2Image
import torch
pipe = AutoPipelineForText2Image.from_pretrained(
"Ricardouchub/SarcasmDiffusion",
torch_dtype=torch.float16
).to("cuda") # use "cpu" if no GPU
prompt = (
"sarcastic meme about checking the fridge for the third time, "
"centered subject, plain background, high-contrast photo, stock photo style"
)
negative = "nsfw, hate speech, slur, watermark, logo, low quality, blurry, busy background, text overlay"
g = torch.Generator(device=pipe.device).manual_seed(123)
image = pipe(prompt,
negative_prompt=negative,
num_inference_steps=22,
guidance_scale=6.3,
width=896, height=896,
generator=g).images[0]
image.save("sample.png")
```
### Prompting Tips
- Add **layout hints**: “centered subject”, “plain background”, “space at top and bottom”.
- Keep **negative prompts** to avoid logos/text/NSFW.
- Use seeds for reproducibility; `steps=18–28`, `guidance=5.5–7.5`, `size=768–1024`.
---
## Environment & Compatibility
To ensure full compatibility when loading this model (fused SDXL with LoRA merged), use the following library versions:
| Library | Recommended Version | Notes |
|----------|--------------------|-------|
| **Python** | 3.10 – 3.12 | Tested on Colab (Python 3.12) |
| **PyTorch** | 2.6.0 + CUDA 12.4 | Any CUDA ≥ 12 works |
| **diffusers** | **0.35.1** | Core inference & model loading |
| **transformers** | **4.45.2** | Required for SDXL CLIPTextEncoder compatibility |
| **accelerate** | **1.10.1** | Device and fp16 inference management |
| **huggingface_hub** | **0.23.5** | Compatible with diffusers 0.35.x |
| **safetensors** | ≥ 0.4.5 | For secure model weights loading |
**Install in Colab or local environment:**
```bash
pip install "diffusers==0.35.1" "transformers==4.45.2" "accelerate==1.10.1" "huggingface_hub==0.23.5" safetensors
```
> **Important:**
> Using newer versions (e.g., `transformers ≥ 4.56`) may break compatibility due to API changes in `CLIPTextModel` (`offload_state_dict` argument).
> Always match the versions above for smooth loading.
---
## License
- **Code:** MIT
- **Model weights:** follow the base model’s license (Stability AI / SDXL Base 1.0).
- **Data:** Users must obtain *Hateful Memes* from its source and agree to its terms.
> By using this model, you agree not to generate content that is illegal, harmful, or violates rights of others.
---
## Evaluation
Qualitative assessment via fixed prompt sheets (humor/irony/neutral). Suggested automatic metrics for future work: CLIP‑score vs. caption, aesthetic predictors, and human preference studies.
---
## Acknowledgments
- Stability AI — SDXL Base 1.0
- Hugging Face — Diffusers, Accelerate, PEFT
- Facebook AI — Hateful Memes dataset