One-Stage Object Detectors
One-stage object detectors predict every box and class in a single network pass, with no region-proposal step. How they work, key models, and trade-offs.
One-stage object detectors are object detection models that predict the bounding boxes and class labels of all objects in an image in a single forward pass of one network, scoring a dense grid of candidate locations at once. They have no separate region-proposal step: two-stage object detectors first propose regions likely to contain an object and then run a second head on each region. Removing that step made one-stage detectors the basis of real-time detection, from YOLO, whose base model ran at 45 frames per second in 2015, to current models.
How One-Stage Detectors Work#
A backbone turns the image into feature maps, a neck merges them across scales, and a dense detection head predicts class scores and a box at every location of every scale. Early one-stage models such as SSD, YOLOv2, and RetinaNet predicted offsets from several anchor boxes per location; since FCOS in 2019, most predict the distances from each location to the four box edges, the design of anchor-free detectors. The result is thousands of candidate boxes, which a confidence threshold and non-maximum suppression (NMS) reduce to one box per object, or which a head trained with one-to-one matching outputs directly.
Running a one-stage detector takes one call, and its timing breakdown shows a single network pass:
from ultralytics import YOLO
# Load YOLO26n, a one-stage detector pretrained on the 80 COCO classes
model = YOLO("yolo26n.pt")
# One forward pass predicts the box and class of every object in the image
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
print(f"{len(result.boxes)} objects: {[result.names[int(c)] for c in result.boxes.cls]}")
# Milliseconds for resizing the image, the single network pass, and NMS
print(result.speed)result.speed lists three steps, preprocessing, inference, and postprocessing, and the one inference pass covers every object in the image.
One-Stage vs. Two-Stage Detectors#
Both designs share the backbone and neck. A two-stage detector then runs a region proposal network that selects a few hundred candidate regions, crops the features of each region, and passes every crop through a second head that classifies and refines it. A one-stage detector replaces those steps with a single dense head over every grid location.
The R-CNN family led detection accuracy for years: Faster R-CNN refines about 300 proposals per image and ran at 5 FPS with a VGG-16 backbone. One-stage detectors were far faster but trailed in accuracy until RetinaNet in 2017 traced the gap to foreground-background imbalance: a dense detector evaluates about 100,000 candidate locations per image, almost all background, and those easy negatives dominate a standard loss. Its focal loss down-weights them, and RetinaNet matched the speed of earlier one-stage detectors while surpassing the accuracy of the two-stage detectors of its time. Transformer detectors such as DETR and RT-DETR also run as one network, predicting a fixed-size set of boxes with one-to-one matching.
Real-World Applications#
- Traffic and video analytics: Detectors run on every frame of every camera feed to count vehicles, measure flow, and feed object trackers.
- Manufacturing inspection: Line cameras detect defects and missing components on parts that pass the camera in a fraction of a second.
- Drones and embedded devices: A single small network fits the compute and power budget of a drone, phone, or smart camera.
Ideas Behind Modern One-Stage Detectors#
- Feature pyramid networks (FPN): Predicting from several resolutions lets fine maps find small objects and coarse maps find large ones.
- Focal loss: Down-weighting easy background candidates fixed the class imbalance that held back early dense detectors.
- Label assignment: Methods such as SimOTA and task-aligned assignment pick each object's positive locations during training from the predictions themselves.
- NMS-free heads: A head trained with one-to-one matching outputs one box per object, removing a postprocessing step whose cost grows with the number of candidates.
YOLO26 is a one-stage, anchor-free detector with both kinds of head: it applies NMS by default, and nms=False switches to its one-to-one head. YOLO26n reaches 40.9 mAP50-95 on COCO with NMS and 40.1 without it, at 1.7 ms per image on an NVIDIA T4 GPU with TensorRT.










