tahamajs's picture
Upload ComplexUNet for CIFAR-10 inpainting
a647c67 verified
|
Raw
History Blame Contribute Delete
2.92 kB
---
license: mit
language: en
library_name: pytorch
tags:
- image-inpainting
- computer-vision
- pytorch
- unet
- cifar-10
datasets:
- cifar10
---
# U-Net for Image Inpainting on CIFAR-10
This repository contains a PyTorch implementation of a deep U-Net with Residual Blocks, trained to perform image inpainting on the CIFAR-10 dataset. The model takes an image with a masked (blacked-out) region and reconstructs the missing part.
## Model Description
The model is a `ComplexUNet` architecture, a variant of the standard U-Net. It features:
- **Deeper Architecture**: 4 downsampling and 4 upsampling stages.
- **Residual Blocks**: Each stage uses residual blocks instead of simple convolutional layers.
- **Increased Width**: The model was trained with `base_channels=96`.
- **Total Parameters**: 73,148,259
## How to Use
First, install the required libraries:
```bash
pip install torch torchvision numpy Pillow
```
Then, you can load the model and perform inpainting on an image tensor.
```python
import torch
from torchvision import transforms as T
from PIL import Image
from model import ComplexUNet # Import the class from model.py
# --- Setup ---
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Download the .pth file from the 'Files and versions' tab of this repo
MODEL_PATH = "inpainting_model_larger.pth"
# --- Load Model ---
model = ComplexUNet(base_channels=96)
model.load_state_dict(torch.load(MODEL_PATH, map_location=DEVICE))
model.to(DEVICE)
model.eval()
# --- Load and Preprocess Image ---
# image = Image.open("your_image.png").convert("RGB")
# For demonstration, let's create a dummy tensor
transform = T.Compose([T.Resize((32, 32)), T.ToTensor()])
# image_tensor = transform(image)
image_tensor = torch.rand(3, 32, 32)
# --- Create a Mask ---
masked_tensor = image_tensor.clone()
masked_tensor[:, 8:24, 8:24] = 0 # Example mask in the center
# --- Perform Inpainting ---
with torch.no_grad():
input_tensor = masked_tensor.unsqueeze(0).to(DEVICE)
reconstructed_tensor = model(input_tensor).squeeze(0).cpu()
# 'reconstructed_tensor' now holds the inpainted image.
from torchvision.transforms.functional import to_pil_image
reconstructed_image = to_pil_image(reconstructed_tensor)
reconstructed_image.save("reconstructed_image.png")
print("Saved reconstructed_image.png")
```
## Training Data
The model was trained on the **CIFAR-10** dataset.
- **Preprocessing**: Images were used at their original **32x32 pixels** resolution.
- **Augmentation**: For each training image, a random rectangular mask was applied.
## Training Procedure
- **Framework**: PyTorch
- **Optimizer**: Adam
- **Learning Rate**: 0.001
- **Epochs**: 50
- **Batch Size**: 128
- **Loss Function**: Mean Squared Error (MSE)
## Evaluation
Evaluation metrics were not saved by the training script. To get PSNR and SSIM, please run the `evaluate_model` function from the training script.