Two-Stage Object Detectors
Detectores de objetos de dois estágios propõem regiões candidatas e, em seguida, classificam e refinam cada uma. Veja como funciona o Faster R-CNN, a família R-CNN e as compensações.
Os detectores de objetos de dois estágios são modelos de detecção de objetos que dividem o trabalho em duas etapas: a primeira propõe regiões da imagem que podem conter um objeto, e a segunda classifica cada região e refina sua caixa delimitadora. A família R-CNN definiu esse projeto entre 2014 e 2018 e liderou por anos os benchmarks de detecção e segmentação de instâncias. Os detectores de objetos de estágio único ignoram a etapa de propostas e predizem todas as caixas a partir de uma grade densa em uma única passagem, por isso a maioria dos sistemas de tempo real os utiliza.
Como funcionam os detectores de dois estágios#
Uma rede backbone, uma rede neural convolucional, calcula mapas de características para a imagem inteira uma vez, geralmente com uma rede de pirâmide de características (FPN) na parte superior. O primeiro estágio, uma rede de propostas de regiões (RPN), atribui pontuações a um conjunto de caixas-âncora em cada posição do mapa de características quanto à presença de objetos e regride deslocamentos que as redimensionam; o Faster R-CNN usa nove âncoras por posição, três tamanhos vezes três proporções. A supressão não máxima (NMS) remove propostas sobrepostas, e as regiões com as maiores pontuações — 300 por imagem durante o teste no artigo original — seguem para o segundo estágio. Ali, o RoI pooling ou seu sucessor mais preciso, o RoIAlign, recorta uma grade de características de tamanho fixo para cada proposta, e uma pequena cabeça prediz uma classe, incluindo uma classe de fundo, e deslocamentos de caixa específicos para cada classe em cada recorte.
Um hook de encaminhamento na RPN do Faster R-CNN da torchvision mostra quanto trabalho o segundo estágio recebe:
import urllib.request
from PIL import Image
from torchvision.models.detection import FasterRCNN_ResNet50_FPN_V2_Weights, fasterrcnn_resnet50_fpn_v2
# Load Faster R-CNN with a ResNet-50 FPN backbone, pretrained on COCO
weights = FasterRCNN_ResNet50_FPN_V2_Weights.DEFAULT
model = fasterrcnn_resnet50_fpn_v2(weights=weights).eval()
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg"))
# Report how many regions the first stage, the region proposal network, passes on
model.rpn.register_forward_hook(lambda module, inputs, output: print(f"Stage 1: {len(output[0][0])} proposals"))
# The second stage classifies and refines every proposal
detections = model([weights.transforms()(image)])[0]
labels = detections["labels"][detections["scores"] > 0.5]
print(f"Stage 2: {len(labels)} objects {[weights.meta['categories'][i] for i in labels]}")Ele imprime Stage 1: 1000 proposals e Stage 2: 6 objects ['person', 'bus', 'person', 'person', 'person', 'tie']: a torchvision mantém 1.000 propostas por imagem durante a inferência, e o segundo estágio as transforma em seis detecções confiáveis.
A família R-CNN#
- R-CNN (2014): A busca seletiva propunha cerca de 2.000 regiões; cada região era redimensionada para um tamanho fixo e processada separadamente pela CNN, e máquinas de vetores de suporte classificavam as características. Por isso, a detecção com uma rede backbone VGG-16 levava 47 segundos por imagem em uma GPU.
- Fast R-CNN (2015): Calcular o mapa de características uma única vez e extrair as características de cada proposta a partir dele com RoI pooling permitiu treinar o VGG-16 9 vezes mais rápido que o R-CNN e testá-lo 213 vezes mais rápido.
- Faster R-CNN (2015): A RPN substituiu a busca seletiva e compartilha as características da rede backbone, então o custo das propostas é praticamente nulo e o detector completo funcionava a 5 quadros por segundo.
- Mask R-CNN (2017): Uma terceira ramificação prediz uma máscara de pixels para cada região, transformando o detector em um modelo de segmentação de instâncias; o RoIAlign amostra características em posições fracionárias exatas, onde o RoI pooling fazia arredondamentos.
- Cascade R-CNN (2018): Três cabeças do segundo estágio, treinadas com limiares de IoU crescentes de 0.5, 0.6 e 0.7, refinam cada uma as caixas da cabeça anterior, tornando a localização mais precisa.
Detectores de dois estágios versus detectores de estágio único#
A RPN descarta a maior parte do fundo antes que o classificador o veja; assim, o segundo estágio é treinado com regiões amostradas nas quais os objetos representam uma proporção fixa — 25% no Fast R-CNN — e classifica cada região com características extraídas na localização exata. Os detectores de estágio único pontuam todas as posições de uma grade densa, cerca de 100.000 candidatos por imagem no RetinaNet, e ficaram atrás da precisão dos detectores de dois estágios até que a perda focal reduzisse o peso dos candidatos fáceis de fundo em 2017. Os modelos atuais de estágio único igualam ou superam a precisão dos modelos de dois estágios com uma fração da latência, e é mais simples exportar uma única rede para hardware de borda, por isso os modelos de dois estágios agora aparecem sobretudo como referências de pesquisa e em bibliotecas como o Detectron2. O auto_annotate da Ultralytics aplica a mesma divisão de propor-para-refinar entre dois modelos para a anotação de dados: um detector YOLO26 propõe caixas, e o Segment Anything Model (SAM) da Meta, orientado por cada caixa, segmenta o objeto dentro dela para gerar rótulos de segmentação.
Aplicações no mundo real#
- Imagens médicas: Variantes do Mask R-CNN detectam e delimitam células, núcleos e lesões individuais em imagens de microscopia e tomografias computadorizadas, nas quais cada instância precisa de sua própria máscara para ser contada e medida.
- Análise de layout de documentos: O benchmark PubLayNet, com mais de 360.000 imagens de páginas, foi usado para treinar modelos Faster R-CNN e Mask R-CNN que localizam blocos de texto, títulos, listas, tabelas e figuras antes do reconhecimento de texto.
- Imagens aéreas: O Oriented R-CNN amplia o RPN para propor regiões rotacionadas, de modo que a segunda etapa produza caixas delimitadoras orientadas para navios, aviões e veículos no conjunto de dados DOTA.










