U-Net — segmentation-এর জাদু
এই পাঠে যা শিখবেন
- U-Net architecture — encoder, decoder, skip
- Why skip connection matters
- U-Net variants — Attention U-Net, U-Net++, nnU-Net
- PyTorch implementation
১ · U-Net-এর জন্ম
Olaf Ronneberger, Philipp Fischer, Thomas Brox — Freiburg University, ২০১৫। ISBI cell tracking challenge winner। MICCAI conference paper।
Original problem: EM (electron microscope) cell segmentation। Only 30 training image। Need precise boundary।
U-Net = encoder (downsample, abstract context) + decoder (upsample, precise localization) + skip connection (pass detail across)। U-shape architecture।
২ · U-Net architecture
Contracting path (encoder)
- 4 stage — each: Conv 3×3 → ReLU → Conv 3×3 → ReLU → MaxPool 2×2।
- Channel double per stage: 64 → 128 → 256 → 512 → 1024।
- Spatial halve per stage।
Expansive path (decoder)
- 4 stage — each: TransposeConv 2×2 (upsample) → concat skip → Conv 3×3 → ReLU → Conv 3×3 → ReLU।
- Channel halve per stage: 1024 → 512 → 256 → 128 → 64।
- Spatial double per stage।
Skip connections
- Encoder feature → decoder same-resolution stage।
- Concatenate (channel-wise) — not add।
- Feature map pass — detail preserve।
Output
- 1×1 conv → number of classes (typically 1 for binary, 2 for foreground/background)।
- Original 388×388 (slightly smaller than input 572×572 due to "valid" conv)।
- Modern padding-same — same size output।
৩ · কেন U-Net medical-এ revolutionary
- Small dataset: 30 image-এ train possible — extreme augmentation।
- Boundary precision: skip connection — pixel-level accuracy।
- Class imbalance: weighted loss handle।
- Tile-based: large image tile-এ process।
- Generic: any modality (CT, MRI, X-ray) adapt।
৪ · Skip connection-এর math
ResNet-এর add নয় — concatenation:
$$\text{decoder}_l = \text{Conv}\big( \text{concat}(\text{upsample}(\text{decoder}_{l-1}), \text{encoder}_l) \big)$$
- Encoder $l$ — high resolution, low semantic।
- Decoder upsampled — low resolution origin, semantic enriched।
- Concat — both signal preserve।
- Subsequent conv — combine।
৫ · PyTorch implementation
import torch
import torch.nn as nn
import torch.nn.functional as F
class DoubleConv(nn.Module):
def __init__(self, in_ch, out_ch):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(in_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU(inplace=True),
nn.Conv2d(out_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU(inplace=True)
)
def forward(self, x): return self.conv(x)
class UNet(nn.Module):
def __init__(self, n_classes=1):
super().__init__()
self.enc1 = DoubleConv(3, 64)
self.enc2 = DoubleConv(64, 128)
self.enc3 = DoubleConv(128, 256)
self.enc4 = DoubleConv(256, 512)
self.bottleneck = DoubleConv(512, 1024)
self.up4 = nn.ConvTranspose2d(1024, 512, 2, 2)
self.dec4 = DoubleConv(1024, 512)
self.up3 = nn.ConvTranspose2d(512, 256, 2, 2)
self.dec3 = DoubleConv(512, 256)
self.up2 = nn.ConvTranspose2d(256, 128, 2, 2)
self.dec2 = DoubleConv(256, 128)
self.up1 = nn.ConvTranspose2d(128, 64, 2, 2)
self.dec1 = DoubleConv(128, 64)
self.out = nn.Conv2d(64, n_classes, 1)
def forward(self, x):
e1 = self.enc1(x); p1 = F.max_pool2d(e1, 2)
e2 = self.enc2(p1); p2 = F.max_pool2d(e2, 2)
e3 = self.enc3(p2); p3 = F.max_pool2d(e3, 2)
e4 = self.enc4(p3); p4 = F.max_pool2d(e4, 2)
b = self.bottleneck(p4)
d4 = self.dec4(torch.cat([self.up4(b), e4], 1))
d3 = self.dec3(torch.cat([self.up3(d4), e3], 1))
d2 = self.dec2(torch.cat([self.up2(d3), e2], 1))
d1 = self.dec1(torch.cat([self.up1(d2), e1], 1))
return self.out(d1)
m = UNet(n_classes=2)
x = torch.randn(1, 3, 256, 256)
print("Output:", m(x).shape) # (1, 2, 256, 256)
print(f"Params: {sum(p.numel() for p in m.parameters()):,}")
৬ · U-Net variants
- Attention U-Net: skip connection-এ attention gate।
- U-Net++: nested skip — denser connection।
- 3D U-Net: volumetric medical (CT, MRI)।
- V-Net: 3D, residual connection।
- nnU-Net (২০২০): "no new U-Net" — automated configuration। Medical SOTA।
- TransUNet: Transformer encoder + U-Net decoder।
- SwinU-Net: Swin Transformer-based।
৭ · Stable Diffusion-এ U-Net
Image generation-এ U-Net key role। Stable Diffusion (২০২২)-এর core network — U-Net (with cross-attention)।
- Noise prediction U-Net — denoising step iteratively।
- Cross-attention layer — text condition inject।
- Skip connection — generation detail preserve।
৮ · Medical applications
- Tumor segmentation: brain (BraTS), liver, breast।
- Organ segmentation: liver, kidney, heart।
- Cell counting: microscopy।
- Retinal vessel: diabetic retinopathy detect।
- Bone fracture: X-ray।
- Chest X-ray: tuberculosis, COVID lesion।
- Bangladesh: JIBON Bangladesh, ICDDR,B এ U-Net deploy হচ্ছে।
ভাবনার প্রশ্ন
প্র ০১ U-Net-এর skip connection-এ concat (not add) কেন? ResNet-এর add কেন এখানে inappropriate?
এটি architectural choice-এর key insight।
ResNet add:
- $y = F(x) + x$ — channel count same require।
- "Residual" learn — small refinement to identity।
- Information lossy if F summarizes weakly।
U-Net concat:
- $y = \text{conv}(\text{cat}(F(x), x))$ — channel double।
- Both signal preserved।
- Subsequent conv combines both।
- "Encoder feature + decoder feature" — different role।
Why concat better for U-Net:
- Encoder feature: high-res detail, low semantic।
- Decoder feature: low-res, high semantic (post-bottleneck)।
- These are different in nature — sum-এ blend lose info।
- Concat preserve both, network combines optimally।
Trade-offs:
- Concat: more parameters (channel double)।
- Add: parameter-equal, potentially less expressive।
Empirical:
- U-Net add — 1-2% mIoU drop।
- Original paper concat চuose — Ronneberger evidence।
Modern alternative:
- FPN — top-down + lateral। Add or concat both used।
- BiFPN — weighted concat-with-attention।
মূল উপলব্ধি: "Skip connection" — generic concept, implementation matters। Use case-specific choice।
প্র ০২ Original U-Net trained on only 30 images! এত small data-এ deep network train possible — কী trick?
এটি U-Net-এর অসাধারণ achievement। Few-shot deep learning-এর precursor।
Key tricks:
- Aggressive augmentation: elastic deformation, rotation, shift, flip। One image → 100s effective।
- Architecture inductive bias: CNN's translation equivariance — implicit regularization।
- Tile-based training: large image → many patches। Each patch independent example।
- Weighted loss: rare class boost।
Elastic deformation specifically:
- Random displacement field per pixel।
- Smoother than affine — natural-looking distortion।
- Mimics tissue elasticity in microscopy।
- Critical for medical small-data regime।
Why architecture helps:
- Skip connection → gradient flow easy। Deep network train possible।
- Encoder-decoder — "compose" representation।
- Per-pixel output — many supervision signal per image।
Modern small-data strategies:
- Pretrained encoder: ImageNet ResNet — transfer।
- Self-supervised pretrain: domain-specific MAE।
- Few-shot meta-learning: MAML, ProtoNet।
- SAM: foundation segmentation-এ from clicks।
Bangladesh medical data:
- Most hospital dataset 100-1000 image।
- U-Net + augment + transfer = robust baseline।
- Federated learning — multi-hospital privacy-preserving।
Numbers from paper:
- 30 train image, 30 test।
- EM cell IoU: 0.93।
- 2015-এ revolutionary।
মূল উপলব্ধি: "Big data" myth challenge। Architecture-aware augmentation small-data DL সম্ভব। Bangladesh medical AI — U-Net foundation।
প্র ০৩ nnU-Net (২০২০) — "no new U-Net" — automatic configuration। কী magic? Manual tuning থেকে কী gain?
nnU-Net (Isensee et al., Nature Methods, 2021) — medical segmentation revolutionary। Manual hyperparameter tuning automate।
The problem:
- Each medical dataset different: modality (CT vs MRI), spacing, intensity range, class।
- Per-dataset hyperparameter tune — extensive expertise।
- Inconsistent baseline across paper।
nnU-Net solution:
- Dataset analyze automatically।
- Optimal architecture choose: 2D vs 3D, patch size, batch size।
- Optimal preprocessing: resampling, normalization।
- Optimal training: optimizer, LR, augmentation।
- Self-configuring pipeline।
Key components:
- Fingerprint: dataset statistics extract।
- Rule-based config: heuristic from fingerprint।
- Empirical evidence: 53 dataset paper basis।
- Cross-validation: 5-fold standard।
- Ensemble: 5 fold model average।
Performance:
- 10+ MICCAI challenge winner।
- Often outperforms SOTA bespoke architecture।
- "Don't reinvent — properly configure."
Implication:
- Architecture innovation overrated, configuration underrated।
- Hand-tuning expert-time intensive।
- Reproducibility — single tool, many dataset।
Adoption:
- nnU-Net — medical research standard।
- Open source, PyTorch।
- NIH benchmark default।
Bangladesh use:
- Hospital research lab — nnU-Net plug-and-play।
- BIRDEM, ICDDR,B, BSMMU — nnU-Net pilots।
Lesson for engineers:
- Automation > novelty।
- Empirical evidence > anecdote।
- Reproducibility critical।
মূল উপলব্ধি: "ML system" > "ML model"। nnU-Net = configuration as code, validated at scale। Modern AI engineering principle।
প্র ০৪ Stable Diffusion — image generation — কেন U-Net? Discriminative segmentation থেকে generative-এ U-Net কীভাবে adapt?
U-Net-এর pivot — Rombach et al. (২০২২) Stable Diffusion paper-এ। Surprising adoption।
Diffusion model basics:
- Forward process: image-এ gradually noise add।
- Reverse process: noise থেকে gradually image generate।
- Need: noise prediction network for each step।
U-Net role:
- Input: noisy image (or latent in SD)।
- Output: predicted noise।
- Same input-output size — U-Net structure ideal।
Why U-Net specifically?
- Same size in/out: diffusion need this।
- Skip connection: fine detail preserve during denoising।
- Hierarchy: noise at multiple scale।
- Available code: pretrained, well-understood।
Modifications for SD:
- Attention layer: self-attention at each scale (transformer-like)।
- Cross-attention: text embedding inject — language condition।
- Time embedding: denoising step encode।
- Latent space: SD operates 4×64×64 latent (not pixel)।
SD U-Net specifics:
- ~860M params (SD 1.5)।
- 4 down + 4 up stage।
- Text condition via cross-attention।
- Trained on LAION-5B images।
Modern evolution:
- SD 3 (2024): DiT (Diffusion Transformer) — pure transformer, U-Net out।
- FLUX: hybrid।
- U-Net being phased out for transformer in image generation।
U-Net legacy:
- ৭ year (২০১৫-২০২২) medical dominance।
- Generative AI bridge era — Stable Diffusion 1, 2।
- Now niche but historically pivotal।
Bangladesh implication:
- Stable Diffusion fine-tune (Bangla art)।
- U-Net + ControlNet — controllable generation।
- LoRA — task-specific adaptation।
মূল উপলব্ধি: Architecture transferable across paradigm — discriminative → generative। U-Net's geometric flexibility makes it adaptable। Engineering principle: simple shapes (U) compose well।
অনুশীলন
-
Param count: Original U-Net (3 → 64 → 128 → 256 → 512 → 1024) total parameter approximate।
~31M parameters। Mostly bottleneck (512×1024 conv 3×3) ও দু'টি conv per stage।
-
Modify: U-Net-এর encoder ResNet-50 দিয়ে replace করার সংক্ষিপ্ত description।
ResNet-50 stage 1-4 use as encoder, skip connection at each stage। Decoder same.
segmentation_models_pytorchlibrary এই pre-built। -
ভাবুন: Bangladesh chest X-ray TB detect — U-Net কেন appropriate? Class imbalance handle কীভাবে?
U-Net medical-এ pretrained transfer + small-data robust। TB lesion 2-5% pixel — Dice + weighted CE loss combine। Transfer learning ImageNet ResNet encoder।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ২৩ · Mask R-CNN পরবর্তী পাঠInstance segmentation।
- পাঠ ২১ · Segmentation types আগের পাঠSemantic vs instance।
- পাঠ ২৯ · Stable Diffusion এগিয়েU-Net-এর creative use।
- সব AI Courses দেখুন ABCL TECHসব কোর্স।