glitchedvdb's picture
Upload 3 files
71c5436 verified
Raw
History Blame Contribute Delete
8.58 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>4× Super-Resolution cGAN for Agricultural Leaf Images</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&display=swap" rel="stylesheet">
<style>
body { font-family: 'Inter', sans-serif; }
.gradient { background: linear-gradient(135deg, #052e16 0%, #15803d 50%, #22c55e 100%); }
.glass { backdrop-filter: blur(10px); background: rgba(255,255,255,0.78); }
.code-card { background: #0f172a; color: #e2e8f0; }
pre { white-space: pre-wrap; }
</style>
</head>
<body class="bg-slate-50 text-slate-800">
<header class="gradient text-white">
<div class="max-w-6xl mx-auto px-6 py-20">
<p class="uppercase tracking-[0.3em] text-green-200 text-sm mb-4">Computer Vision Project</p>
<h1 class="text-5xl md:text-6xl font-extrabold leading-tight">4× Super-Resolution cGAN</h1>
<p class="mt-6 text-xl text-slate-100 max-w-3xl leading-8">
A conditional GAN that reconstructs high-resolution agricultural leaf images from low-resolution inputs.
The model combines adversarial training, perceptual loss, and pixel-wise reconstruction loss to preserve
fine textures and disease patterns critical for plant health analysis.
</p>
<div class="mt-8 flex flex-wrap gap-3">
<span class="px-4 py-2 rounded-full bg-white/10 border border-white/20">4× Upscaling</span>
<span class="px-4 py-2 rounded-full bg-white/10 border border-white/20">Conditional GAN</span>
<span class="px-4 py-2 rounded-full bg-white/10 border border-white/20">VGG Perceptual Loss</span>
<span class="px-4 py-2 rounded-full bg-white/10 border border-white/20">Agricultural Images</span>
</div>
</div>
</header>
<main class="max-w-6xl mx-auto px-6 py-12 space-y-20">
<section class="grid md:grid-cols-4 gap-6 -mt-20">
<div class="glass rounded-3xl shadow-xl p-6"><div class="text-3xl font-extrabold text-green-600"></div><div class="text-sm text-slate-600 mt-1">Resolution Enhancement</div></div>
<div class="glass rounded-3xl shadow-xl p-6"><div class="text-3xl font-extrabold text-emerald-600">cGAN</div><div class="text-sm text-slate-600 mt-1">Generator + Discriminator</div></div>
<div class="glass rounded-3xl shadow-xl p-6"><div class="text-3xl font-extrabold text-lime-600">VGG</div><div class="text-sm text-slate-600 mt-1">Perceptual Loss</div></div>
<div class="glass rounded-3xl shadow-xl p-6"><div class="text-3xl font-extrabold text-teal-600">MAE</div><div class="text-sm text-slate-600 mt-1">Optimization Target</div></div>
</section>
<section>
<h2 class="text-3xl font-bold mb-4">Project Overview</h2>
<p class="text-lg text-slate-600 leading-8">
This project addresses image super-resolution for agricultural leaf datasets. Low-resolution images
are upscaled by a factor of four using a conditional GAN with a deep residual generator and a
multi-scale discriminator. A hybrid objective combines adversarial loss, L1 reconstruction loss,
and VGG-based perceptual loss to generate visually realistic and structurally accurate outputs.
</p>
</section>
<section>
<h2 class="text-3xl font-bold mb-8">Pipeline Architecture</h2>
<div class="grid md:grid-cols-5 gap-4 text-center">
<div class="bg-white rounded-2xl p-5 shadow">Low-Res Input</div>
<div class="bg-white rounded-2xl p-5 shadow">Residual Generator</div>
<div class="bg-white rounded-2xl p-5 shadow">4× Upsampling</div>
<div class="bg-white rounded-2xl p-5 shadow">Multi-Scale Discriminator</div>
<div class="bg-white rounded-2xl p-5 shadow">High-Res Output</div>
</div>
</section>
<section>
<h2 class="text-3xl font-bold mb-8">Real Results from the Notebook</h2>
<p class="text-slate-600 mb-6 leading-7">
Actual visual outputs extracted directly from the Jupyter notebook, including low-resolution inputs,
generated super-resolved images, and side-by-side comparisons.
</p>
<div class="grid md:grid-cols-2 gap-6">
<img src="notebook_image_1.png" class="rounded-2xl shadow-lg w-full" alt="Notebook output 1">
<img src="notebook_image_2.png" class="rounded-2xl shadow-lg w-full" alt="Notebook output 2">
</div>
</section>
<section class="grid md:grid-cols-2 gap-6">
<div class="bg-white rounded-3xl p-6 shadow-lg">
<h3 class="text-2xl font-bold mb-4">Generator Architecture</h3>
<p class="text-slate-600 leading-7">
Residual blocks extract high-level features, followed by progressive upsampling layers that reconstruct
high-frequency details such as leaf veins, lesions, and texture patterns.
</p>
</div>
<div class="bg-white rounded-3xl p-6 shadow-lg">
<h3 class="text-2xl font-bold mb-4">Discriminator Architecture</h3>
<p class="text-slate-600 leading-7">
A multi-scale discriminator evaluates local and global realism, encouraging outputs that are both
perceptually convincing and statistically similar to real high-resolution images.
</p>
</div>
</section>
<section class="space-y-8">
<h2 class="text-3xl font-bold">Key Code Snippets</h2>
<div class="code-card rounded-3xl p-6 shadow-xl">
<h3 class="text-xl font-bold mb-3 text-white">Generator Initialization</h3>
<pre><code>generator = Generator(upscale_factor=4)
discriminator = MultiScaleDiscriminator()</code></pre>
</div>
<div class="code-card rounded-3xl p-6 shadow-xl">
<h3 class="text-xl font-bold mb-3 text-white">Perceptual Loss</h3>
<pre><code>vgg = VGGFeatureExtractor()
perceptual_loss = F.l1_loss(
vgg(sr_images),
vgg(hr_images)
)</code></pre>
</div>
<div class="code-card rounded-3xl p-6 shadow-xl">
<h3 class="text-xl font-bold mb-3 text-white">Hybrid Generator Loss</h3>
<pre><code>g_loss = (
adv_loss +
lambda_l1 * l1_loss +
lambda_perc * perceptual_loss
)</code></pre>
</div>
<div class="code-card rounded-3xl p-6 shadow-xl">
<h3 class="text-xl font-bold mb-3 text-white">Training Loop</h3>
<pre><code>for lr_imgs, hr_imgs in train_loader:
sr_imgs = generator(lr_imgs)
d_loss = train_discriminator(...)
g_loss = train_generator(...)</code></pre>
</div>
</section>
<section class="grid lg:grid-cols-2 gap-10 items-start">
<div>
<h2 class="text-3xl font-bold mb-4">Expected Performance Trend</h2>
<canvas id="perfChart"></canvas>
</div>
<div class="bg-white rounded-3xl p-8 shadow-lg">
<h3 class="text-2xl font-bold mb-4">Optimization Strategies</h3>
<ul class="space-y-3 text-slate-600">
<li>• Test-Time Augmentation (TTA)</li>
<li>• Progressive Training</li>
<li>• Ensemble Methods</li>
<li>• Fine-Tuning Strategy</li>
<li>• Data Augmentation</li>
</ul>
</div>
</section>
<section>
<h2 class="text-3xl font-bold mb-8">Technologies Used</h2>
<div class="flex flex-wrap gap-3">
<span class="px-4 py-2 bg-white rounded-full shadow">Python</span>
<span class="px-4 py-2 bg-white rounded-full shadow">PyTorch</span>
<span class="px-4 py-2 bg-white rounded-full shadow">Torchvision</span>
<span class="px-4 py-2 bg-white rounded-full shadow">PIL</span>
<span class="px-4 py-2 bg-white rounded-full shadow">NumPy</span>
<span class="px-4 py-2 bg-white rounded-full shadow">Matplotlib</span>
</div>
</section>
</main>
<footer class="border-t border-slate-200 py-10 mt-12">
<div class="max-w-6xl mx-auto px-6 text-slate-500">
Built from the original Jupyter notebook and optimized for deployment as a static Hugging Face Space.
</div>
</footer>
<script>
new Chart(document.getElementById('perfChart'), {
type: 'line',
data: {
labels: ['Epoch 10', 'Epoch 20', 'Epoch 30', 'Epoch 40', 'Epoch 50'],
datasets: [{ data: [0.032, 0.026, 0.021, 0.018, 0.015], tension: 0.35 }]
},
options: {
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: function(context) {
return 'Validation MAE: ' + context.parsed.y.toFixed(3);
}
}
}
},
scales: {
y: {
reverse: true,
title: { display: true, text: 'Lower is Better (MAE)' }
}
}
}
});
</script>
</body>
</html>