Fast R-CNN (2015) directly attacks R-CNN's core inefficiency: instead of running the CNN separately for every proposed region, it runs the CNN just once per image, sharing that single feature map across every region.
Key Innovation: Run the CNN Once, Share the Result
Fast R-CNN passes the entire image through the CNN a single time, producing one feature map for the whole image. Region proposals (still generated externally, e.g. via Selective Search) are then mapped onto this already-computed shared feature map, rather than each region being independently reprocessed from scratch through the full CNN.
Key Innovation: ROI Pooling
Since different proposed regions have different shapes and sizes, but the following classification layers need a fixed-size input, Fast R-CNN introduces ROI (Region of Interest) Pooling โ a pooling operation (conceptually similar to Max Pooling, but with an adaptive window size) that takes each region's corresponding patch of the shared feature map and pools it down to a fixed spatial size, regardless of the region's original shape.
Diagram
One CNN pass produces a shared feature map; every region proposal reuses it via ROI pooling, instead of triggering a fresh CNN pass each time.
Advantages and Limitations
| Advantages | Limitations |
|---|---|
| Dramatically faster than R-CNN โ one CNN pass per image instead of thousands | Still depends on an external, non-learned region proposal algorithm (Selective Search), which is itself a speed bottleneck |
| End-to-end trainable for classification and box regression together | Region proposal generation remains a separate, non-differentiable step |
Common Mistakes
- Assuming Fast R-CNN eliminated the region-proposal bottleneck entirely โ it only fixed the redundant CNN feature extraction; the external proposal algorithm remained a separate step, which is exactly what Faster R-CNN addresses next.
Interview Relevance
Q: "What specific change did Fast R-CNN make to fix R-CNN's slowness, and what problem still remained?" It ran the CNN once per whole image, then used ROI Pooling to extract fixed-size features for each region proposal from that single shared feature map โ eliminating redundant CNN computation. It still relied on an external, separately-computed region proposal algorithm (Selective Search), which remained a speed bottleneck and wasn't learned jointly with the rest of the network.
Practice Question
Why does ROI Pooling need to produce a fixed-size output regardless of each region proposal's original size and aspect ratio?