R-CNN ও Faster R-CNN
এই পাঠে যা শিখবেন
- R-CNN evolution — slow → fast → faster
- RoI pooling ও RoI Align
- Region Proposal Network (RPN)
- PyTorch-এ Faster R-CNN inference
১ · R-CNN (২০১৪) — beginning
Ross Girshick et al. — "Rich feature hierarchies for accurate object detection". AlexNet-এর উপর ভিত্তি করে CNN-এর প্রথম successful detection.
Pipeline:
- Selective Search: classical algorithm — ~2000 region proposal generate.
- Warp: each region 227×227-এ resize.
- CNN feature: each warped region আলাদাভাবে AlexNet-এ feed.
- SVM: per-class linear SVM classify.
- Bbox regression: linear regressor refine box.
সমস্যা: 2000 region × CNN forward = অসম্ভব slow. Train-এ days, inference 47 sec/image.
R-CNN proof — CNN feature SIFT/HOG-এর চেয়ে ভাল detection-এ। কিন্তু compute prohibitive. পরের iteration এই sharing solve করে।
২ · Fast R-CNN (২০১৫)
Girshick alone — "Fast R-CNN". Key insight: পুরো image-কে একবার CNN-এ পাঠাও, তারপর region propose feature map-এ।
Pipeline:
- Image → CNN backbone → feature map (e.g., 14×14×512).
- Selective Search → ~2000 proposal (image space).
- Each proposal → corresponding region in feature map.
- RoI Pooling: each region-কে fixed size 7×7-এ pool.
- FC layers → classification + bbox regression.
Speedup: CNN forward 1 time per image (not 2000 per region). 25x train speed, 213x inference speed (still ~2 sec).
৩ · RoI Pooling
Variable-sized region → fixed-sized output. Algorithm:
- Region in feature map (e.g., 30×40).
- Divide into 7×7 grid (target size).
- Each grid cell — max pool corresponding feature map cells.
- Output 7×7 → flatten → FC.
Issue: integer coordinates → quantization error → misalignment.
৪ · Faster R-CNN (২০১৫)
Ren et al. — "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks".
Key innovation: Selective Search-এর বদলে neural Region Proposal Network (RPN). Fully neural pipeline.
Pipeline:
- Image → CNN backbone → feature map.
- RPN: per-pixel anchor (multi-scale, multi-ratio) → objectness + box refine.
- Top-N proposal (~300).
- RoI Pooling → FC heads: class + bbox.
Speed: ~5 FPS (VGG backbone). ~17 FPS (ResNet). Realtime threshold-এ approach.
৫ · Region Proposal Network (RPN)
- 3×3 conv on feature map → intermediate feature.
- Two parallel 1×1 conv head:
- Cls: per anchor — object/background score.
- Reg: per anchor — bbox refinement (dx, dy, dw, dh).
- Anchor: 9 per pixel (3 scale × 3 aspect ratio).
- Trained jointly with main detector.
৬ · Anchor box concept
- Pre-defined boxes at each spatial location.
- Standard: 3 scales (128, 256, 512 px) × 3 aspect ratios (1:1, 1:2, 2:1) = 9.
- Each anchor predict offset from base — easier than absolute box.
- Match with ground-truth via IoU > 0.7 (positive), <0.3 (negative).
৭ · Mask R-CNN (২০১৭)
Faster R-CNN-এর extension — instance segmentation. He et al. ICCV 2017 best paper.
- RoI Pooling → RoI Align: bilinear interpolation, quantization free.
- Mask head: RoI feature → small FCN → per-class binary mask.
- Multi-task: classification + bbox + mask.
- Mask R-CNN — instance segmentation-এর gold standard.
৮ · PyTorch-এ Faster R-CNN
import torch
from torchvision.models.detection import fasterrcnn_resnet50_fpn
from torchvision.models.detection import FasterRCNN_ResNet50_FPN_Weights
w = FasterRCNN_ResNet50_FPN_Weights.COCO_V1
model = fasterrcnn_resnet50_fpn(weights=w)
model.eval()
# Inference
img = torch.rand(3, 800, 800) # any size, FPN handles
with torch.no_grad():
out = model([img])
# Output: list of dict per image
det = out[0]
print("Boxes:", det['boxes'].shape) # (N, 4) — xyxy
print("Labels:", det['labels'].shape) # (N,) — class index
print("Scores:", det['scores'].shape) # (N,) — confidence
# Filter confidence > 0.5
keep = det['scores'] > 0.5
print(f"\n{keep.sum()} confident detections")
৯ · Two-stage variants
- Cascade R-CNN (২০১৮): multi-stage classifier with increasing IoU threshold.
- Mask R-CNN: + segmentation.
- Sparse R-CNN: learnable proposal — DETR-like end-to-end.
- HTC (Hybrid Task Cascade): multiple task interleave.
১০ · Two-stage modern uses
- Maximum accuracy benchmarks.
- Medical imaging — high precision matters.
- Custom annotation type (keypoint + mask + bbox).
- Mask R-CNN — instance segmentation production.
ভাবনার প্রশ্ন
প্র ০১ RoI Pooling ও RoI Align-এর পার্থক্য কী? Mask R-CNN-এ pooling থেকে align-এ switch কেন?
এটি subtle কিন্তু segmentation accuracy-তে বিরাট impact.
RoI Pooling-এর problem:
- Region coordinate continuous (e.g., 18.6).
- Feature map integer index.
- Step 1 quantization: round to nearest integer (18.6 → 19).
- Step 2 quantization: bin division integer.
- Total — sub-pixel shift accumulate.
Effect:
- Classification — minor (pool over region).
- Bbox refine — minor.
- Mask prediction — major! Pixel-level accuracy needed.
RoI Align solution:
- No integer rounding.
- Bin boundary continuous.
- Bilinear interpolation — sample at exact continuous coordinate.
- 4 sample point per bin → average.
Mathematical:
- RoI Pooling: $\text{out}[i,j] = \max_{x,y \in \text{quantized bin}} F[\lfloor x \rfloor, \lfloor y \rfloor]$।
- RoI Align: $\text{out}[i,j] = \frac{1}{4} \sum \text{bilinear}(F, x_k, y_k)$।
Mask R-CNN paper-এর result:
- RoI Pool: AP_mask 24.5.
- RoI Align: AP_mask 30.3.
- +5.8% — substantial.
Computational cost:
- RoI Align — slightly more (4 sample per bin, bilinear).
- Trade-off worth it.
Used elsewhere:
- Mask R-CNN, Cascade Mask R-CNN.
- Detection-এ Faster R-CNN-ও modern implementation-এ।
- Anywhere precise feature extraction — keypoint detection.
মূল উপলব্ধি: "Implementation detail" architecture decision-এর সমান impact. Sub-pixel accuracy — segmentation, fine-grained detection-এর key.
প্র ০২ RPN-এ anchor box-এর choice (3 scale × 3 ratio) — domain-specific tune করা দরকার? Bangla street sign detect-এ কী anchor?
Anchor design — Faster R-CNN-এর underrated tunable. Default ImageNet-COCO-এর জন্য optimal, custom-এর জন্য না।
Default anchor:
- Scales: 128, 256, 512 px.
- Ratios: 1:1, 1:2, 2:1.
- 9 anchor per spatial location.
- FPN-এ — scale per pyramid level.
Why this matters:
- Anchor — "guess" — closest match-এ gradient flow.
- Bad anchor → slow convergence, missed object.
- Right anchor → fast train, high recall.
Bangla street sign analysis:
- Sign typically square (1:1).
- Street view — usually 30-150 px (camera dist).
- Vertical signs (parking restriction) — 1:3.
- Horizontal banner — 3:1.
Custom anchor:
- Scales: 32, 64, 128 (smaller — sign typically distant).
- Ratios: 1:1, 1:3, 3:1 (vertical/horizontal banner).
- 9 anchor still.
K-means anchor (YOLOv2-style):
- Training set bbox-এ k-means clustering.
- Cluster center = optimal anchor.
- Domain-specific automatic.
YOLO modern (v3-v8):
- Auto-anchor tool — dataset analyze, suggest anchor.
- Training-time auto-tune.
Anchor-free alternatives:
- FCOS, CenterNet — no anchor concept.
- DETR — set prediction.
- Modern trend — anchor-free easier.
Practical recommendation:
- Stage 1: COCO default — quick baseline.
- Stage 2: dataset analyze — k-means anchor.
- Stage 3: anchor-free try (FCOS, RT-DETR).
মূল উপলব্ধি: Anchor — historical hack, but tunable. Domain-specific design — accuracy bump. Modern anchor-free — simpler design-এর direction.
প্র ০৩ Faster R-CNN-এ FPN (Feature Pyramid Network) integration. Multi-scale feature কেন important? ছোট object detect-এর কী secret?
FPN (Lin et al., 2017) — detection-এর underrated breakthrough. Small object detection-এ revolution.
Problem before FPN:
- Faster R-CNN — final feature map (high-level, 32× downsample).
- Small object — final map-এ খুবই ছোট spatial extent.
- Large object — captured ভাল।
- Small object detection mAP < 25%.
Single-scale problem:
- Image pyramid (multi-scale input) — slow.
- Feature pyramid (different layer) — early shallow features semantic poor.
FPN insight:
- Use different stage feature map (P2, P3, P4, P5).
- Top-down pathway — high-level semantic propagate down.
- Lateral connection — combine high & low-level.
- Result: each level — semantically rich + spatially precise.
FPN structure:
P5 = lateral(C5)
P4 = lateral(C4) + upsample(P5)
P3 = lateral(C3) + upsample(P4)
P2 = lateral(C2) + upsample(P3)
Detection per level:
- Small object → P2 (high resolution).
- Medium → P3, P4.
- Large → P5.
- Anchor scale per level.
Result on COCO:
- Faster R-CNN: 35.0 mAP.
- Faster R-CNN + FPN: 39.4 mAP.
- Small object AP: 17 → 24 (+41%).
FPN modern adoption:
- Almost all detection backbone.
- YOLO v3+ uses FPN-like (PANet).
- RetinaNet — FPN baseline.
- Mask R-CNN — FPN essential.
Variants:
- PANet: bottom-up addition over FPN.
- BiFPN (EfficientDet): bidirectional.
- NAS-FPN: architecture searched.
- Recursive FPN: multi-pass.
Bangladesh use case:
- Crowded street — pedestrian distance variable.
- Far pedestrian small in pixel — FPN essential.
- Drone aerial photo — small object dominant.
- Default detector + FPN strongly recommended.
মূল উপলব্ধি: Single-scale CNN insufficient real-world detection. FPN — neck design-এর foundational pattern. Backbone alone যথেষ্ট না।
প্র ০৪ Faster R-CNN ২০১৫-র। ১১ বছর পর — DETR, YOLOv8 আছে। Faster R-CNN আজও কোথায় কেন ব্যবহার?
Honest assessment — niche কিন্তু important.
Where Faster R-CNN still wins:
- Custom heads: Mask R-CNN, keypoint, dense pose.
- Small object accuracy: RoI alignment fine-grained.
- Custom annotation: non-standard task — adapt easy.
- Research baselines: well-understood, tunable.
- Production legacy: 2017-2020 systems still running.
Where YOLO/DETR wins:
- Realtime: mobile, embedded.
- Single-task standard detection: no need for heads.
- Modern accuracy: DINO-DETR > Faster R-CNN.
- Simplicity: single loss, easier debug.
Specific scenarios:
- Mask R-CNN — instance segmentation: still strong choice.
- HTC, Cascade Mask R-CNN: highest mAP achievable.
- Detectron2 (Meta library): Faster R-CNN central.
- Medical (FDA-validated): regulatory acceptance.
Modern alternatives for two-stage role:
- Sparse R-CNN: two-stage with learnable proposal.
- Cascade DINO: DETR-based cascade.
- Mask2Former: universal segmentation.
Bangladesh deployment:
- Realtime traffic app: YOLOv8.
- Medical research: Mask R-CNN.
- Document analysis: Faster R-CNN custom head.
- Industrial inspection: Faster R-CNN — accuracy critical.
Skill recommendation:
- Master Faster R-CNN concept — foundational.
- Use Mask R-CNN — segmentation-এ default.
- Try DETR/RT-DETR — future direction.
- YOLO — realtime mainstream.
মূল উপলব্ধি: Faster R-CNN — like email (1971) or HTTP (1991) — old, still essential foundation. Modern alternatives flashier, but core concept everywhere.
অনুশীলন
-
RPN output: 800×600 image, ResNet backbone (32x downsample), 9 anchor — RPN total proposal candidate?
Feature map: $25 \times 19$। Per location 9 anchor → $25 \times 19 \times 9 = 4275$ candidate. Top-N (~300-1000) keep.
-
Custom dataset: Faster R-CNN-এ COCO 80-class থেকে 5-class (Bangla traffic) shift — কোডটি লিখুন।
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor m = fasterrcnn_resnet50_fpn(weights='DEFAULT') in_features = m.roi_heads.box_predictor.cls_score.in_features m.roi_heads.box_predictor = FastRCNNPredictor(in_features, 5+1) # +1 background -
ভাবুন: Faster R-CNN-এ feature share-এর সবচেয়ে বড় benefit কোথায় — single image-এ inference, না training-এ?
Both. Inference — 2000 region per-region forward এড়ায় (200x speedup). Training — gradient share করে backbone joint train. R-CNN multi-stage train ছিল।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ১৯ · YOLO পরবর্তী পাঠ One-stage detector-এর champion.
- পাঠ ১৭ · Detection intro আগের পাঠ Detection basics.
- পাঠ ২৩ · Mask R-CNN এগিয়ে Faster R-CNN-এর extension — instance segmentation.
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।