Ultralytics YOLO27:

RT-DETR da Baidu: um detetor de objetos em tempo real baseado em Transformer de Visão#

Visão geral#

O Transformer de Deteção em Tempo Real (RT-DETR), desenvolvido pela Baidu, é um detetor de objetos de ponta, de ponta a ponta, que oferece desempenho em tempo real e mantém uma elevada precisão. Baseia-se na ideia do DETR (a estrutura sem NMS), introduzindo simultaneamente um backbone baseado em convoluções e um codificador híbrido eficiente para alcançar velocidade em tempo real. O RT-DETR processa eficientemente funcionalidades multiescala ao desacoplar a interação intr a escala e a fusão entre escalas. O modelo é altamente adaptável, permitindo ajustar de forma flexível a velocidade de inferência através de diferentes camadas do descodificador, sem novo treino. O RT-DETR destaca-se em backends acelerados, como CUDA com TensorRT, superando muitos outros detetores de objetos em tempo real.



Watch: How to Use Baidu's RT-DETR for Object Detection | Inference and Benchmarking with Ultralytics 🚀

Visão geral da arquitetura do modelo RT-DETR da Baidu Visão geral do RT-DETR da Baidu. O diagrama da arquitetura do modelo RT-DETR mostra as três últimas etapas do backbone {S3, S4, S5} como entrada do codificador. O codificador híbrido eficiente transforma funcionalidades multiescala numa sequência de funcionalidades da imagem através da interação de funcionalidades intr a escala (AIFI) e do módulo de fusão de funcionalidades entre escalas (CCFM). A seleção de consultas baseada em IoU é utilizada para selecionar um número fixo de funcionalidades da imagem que servirão como consultas iniciais de objetos para o descodificador. Por fim, o descodificador, com cabeças de previsão auxiliares, otimiza iterativamente as consultas de objetos para gerar caixas e pontuações de confiança (fonte).

Principais funcionalidades#

  • Codificador Híbrido Eficiente: O RT-DETR da Baidu utiliza um codificador híbrido eficiente que processa funcionalidades multiescala ao desacoplar a interação intr a escala e a fusão entre escalas. Este design exclusivo baseado em Vision Transformers reduz os custos computacionais e permite a deteção de objetos em tempo real.
  • Seleção de Consultas Baseada em IoU: O RT-DETR da Baidu melhora a inicialização das consultas de objetos através da seleção de consultas baseada em IoU. Isto permite que o modelo se concentre nos objetos mais relevantes da cena, aumentando a precisão da deteção.
  • Velocidade de Inferência Adaptável: O RT-DETR da Baidu permite ajustar flexivelmente a velocidade de inferência através de diferentes camadas do descodificador, sem necessidade de novo treino. Esta adaptabilidade facilita a aplicação prática em vários cenários de deteção de objetos em tempo real.
  • Estrutura sem NMS: Baseado no DETR, o RT-DETR elimina a necessidade de pós-processamento de supressão não máxima, simplificando o pipeline de deteção e podendo melhorar a eficiência.
  • Deteção sem Âncoras: Enquanto detetor sem âncoras, o RT-DETR simplifica o processo de deteção e pode melhorar a generalização entre diferentes conjuntos de dados.

Modelos pré-treinados#

A API Python da Ultralytics fornece modelos RT-DETR pré-treinados em PaddlePaddle com diferentes escalas:

  • RT-DETR-L: 53,0% AP no COCO val2017, 114 FPS numa GPU T4
  • RT-DETR-X: 54,8% AP no COCO val2017, 74 FPS numa GPU T4

Além disso, a Baidu lançou o RTDETRv2 em julho de 2024, que melhora ainda mais a arquitetura original com métricas de desempenho superiores.

Exemplos de utilização#

Este exemplo fornece exemplos simples de treino e inferência do RT-DETR. Para consultar a documentação completa sobre estes e outros modos, vê as páginas de documentação de Previsão, Treino, Validação e Exportação. Os modelos também podem ser treinados em GPUs na cloud através da Ultralytics Platform.

Exemplo
from ultralytics import RTDETR

# Load a COCO-pretrained RT-DETR-l model
model = RTDETR("rtdetr-l.pt")

# Display model information (optional)
model.info()

# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Run inference with the RT-DETR-l model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
Treino Determinístico

Define deterministic=False ao treinar o RT-DETR em CUDA com PyTorch 2.0 ou posterior. A atenção deformável utiliza F.grid_sample, que não tem retropropagação determinística em CUDA, pelo que deterministic=True não consegue tornar a execução reprodutível e pode reduzir o débito de treino. seed continua a controlar a inicialização dos pesos, a ordem dos dados e a amostragem das ampliações.

Compromissos para uma Inferência Mais Rápida

Os pesos pré-treinados do RT-DETR suportam duas definições em tempo de inferência para reduzir a latência sem novo treino:

  • eval_idx: Interrompe a descodificação mais cedo. Para o descodificador predefinido de 6 camadas, utiliza um índice baseado em zero (05). eval_idx=5 utiliza todas as camadas; eval_idx=3 utiliza 4 camadas. Numa GPU T4 com TensorRT v10.11, o RT-DETR-L melhora de 8,0 ms / 52,7 mAP para 7,4 ms / 52,5 mAP com 4 camadas.
  • num_queries: Reduz as consultas de objetos (predefinição: 300). Reduzir para 100 pode atingir 7,4 ms / 51,7 mAP no COCO na mesma configuração. Em conjuntos de dados com menos objetos por imagem, a redução de mAP é normalmente menor, mas mantém o valor acima do número máximo esperado de objetos por imagem.

Ambas as definições podem reduzir o mAP — valida este compromisso no teu conjunto de dados antes da implementação.

from ultralytics import RTDETR

rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]

# Choose one or both settings after validating the speed/accuracy trade-off.
head.decoder.eval_idx = 3  # Use 4 of 6 decoder layers.
head.num_queries = 100  # Use fewer object queries.

results = rtdetr("path/to/image.jpg")

# Export uses the same decoder and query settings, including TensorRT exports.
rtdetr.export(format="engine", device=0, quantize=16)

Tarefas e modos suportados#

Esta tabela apresenta os tipos de modelo, os pesos pré-treinados específicos, as tarefas suportadas por cada modelo e os vários modos (Train, Val, Predict, Export) que são suportados, indicados por emojis ✅.

Tipo de modeloPesos pré-treinadosTarefas suportadasTreinoValidaçãoInferênciaExportação
RT-DETR Grandertdetr-l.ptDeteção de objetos
RT-DETR Extra Grandertdetr-x.ptDeteção de objetos
Variantes apenas de arquitetura

rtdetr-resnet50.yaml e rtdetr-resnet101.yaml são fornecidos apenas como arquiteturas YAML. A Ultralytics lança pesos pré-treinados apenas para rtdetr-l e rtdetr-x. Instancia as variantes ResNet a partir de YAML (por exemplo, RTDETR("rtdetr-resnet50.yaml")) e treina-as ou ajusta-as conforme necessário.

Casos de Utilização Ideais#

O RT-DETR é particularmente adequado para aplicações que exigem elevada precisão e desempenho em tempo real:

Citações e agradecimentos#

Se utilizares o RT-DETR da Baidu no teu trabalho de investigação ou desenvolvimento, cita o artigo original:

Citação
@misc{lv2023detrs,
      title={DETRs Beat YOLOs on Real-time Object Detection},
      author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
      year={2023},
      eprint={2304.08069},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Para o RTDETRv2, podes citar o artigo de 2024:

Citação
@misc{lv2024rtdetrv2,
      title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
      author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
      year={2024},
      eprint={2407.17140},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Gostaríamos de agradecer à Baidu e à equipa do PaddlePaddle por criarem e manterem este recurso valioso para a comunidade de visão computacional. A sua contribuição para a área, através do desenvolvimento do detetor de objetos em tempo real baseado em Vision Transformers, RT-DETR, é muito apreciada.

Perguntas frequentes#

  • O RT-DETR da Baidu (Transformer de Deteção em Tempo Real) é um detetor de objetos avançado em tempo real, baseado na arquitetura Vision Transformer. Processa eficientemente funcionalidades multiescala ao desacoplar a interação intr a escala e a fusão entre escalas através do seu codificador híbrido eficiente. Ao utilizar a seleção de consultas baseada em IoU, o modelo concentra-se nos objetos mais relevantes, aumentando a precisão da deteção. A sua velocidade de inferência adaptável, obtida através do ajuste das camadas do descodificador sem novo treino, torna o RT-DETR adequado para vários cenários de deteção de objetos em tempo real. Sabe mais sobre as funcionalidades do RT-DETR no artigo do RT-DETR no Arxiv.

  • Podes utilizar a API Python da Ultralytics para usar modelos RT-DETR pré-treinados em PaddlePaddle. Por exemplo, para carregar um modelo RT-DETR-l pré-treinado no COCO val2017 e obter um FPS elevado numa GPU T4, podes utilizar o seguinte exemplo:

    Exemplo
    from ultralytics import RTDETR
    
    # Load a COCO-pretrained RT-DETR-l model
    model = RTDETR("rtdetr-l.pt")
    
    # Display model information (optional)
    model.info()
    
    # Train the model on the COCO8 example dataset for 100 epochs
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
    
    # Run inference with the RT-DETR-l model on the 'bus.jpg' image
    results = model("path/to/bus.jpg")
  • O RT-DETR da Baidu destaca-se pelo seu codificador híbrido eficiente e pela seleção de consultas baseada em IoU, que reduzem significativamente os custos computacionais e mantêm uma elevada precisão. A sua capacidade exclusiva de ajustar a velocidade de inferência através de diferentes camadas do descodificador, sem novo treino, acrescenta uma flexibilidade significativa. Isto torna-o particularmente vantajoso para aplicações que exigem desempenho em tempo real em backends acelerados, como CUDA com TensorRT, superando muitos outros detetores de objetos em tempo real. A arquitetura transformer também proporciona uma melhor compreensão do contexto global em comparação com detetores tradicionais baseados em CNN.

  • O RT-DETR da Baidu permite ajustar flexivelmente a velocidade de inferência através de diferentes camadas do descodificador, sem exigir novo treino. Esta adaptabilidade é crucial para dimensionar o desempenho em várias tarefas de deteção de objetos em tempo real. Quer precises de um processamento mais rápido para necessidades de precisão inferior, quer de deteções mais lentas e precisas, o RT-DETR pode ser ajustado para cumprir os teus requisitos específicos. Esta funcionalidade é particularmente valiosa ao implementar modelos em dispositivos com diferentes capacidades computacionais.

  • Não. No RT-DETR, max_det limita o número de previsões devolvidas após a inferência, mas não aumenta o número de consultas de objetos produzidas pelo descodificador. Os pontos de controlo pré-treinados do RT-DETR da Ultralytics utilizam 300 consultas de objetos, pelo que não podem devolver mais de 300 deteções por imagem, mesmo que definas max_det com um valor superior.

    Utiliza max_det para reduzir as deteções devolvidas, por exemplo, para max_det=100, quando só precisares de menos previsões com elevada confiança. Se o teu conjunto de dados puder conter mais de 300 objetos por imagem, treina um modelo RT-DETR personalizado com um número superior de consultas do descodificador (nq) no YAML do modelo; alterar este valor num ponto de controlo pré-treinado após o treino não é equivalente e exige novo treino para aprender as consultas adicionais.

  • Sim, os modelos RT-DETR são compatíveis com vários modos da Ultralytics, incluindo treino, validação, previsão e exportação. Consulta a documentação correspondente para obter instruções detalhadas sobre como utilizar estes modos: Treino, Validação, Previsão e Exportação. Isto garante um fluxo de trabalho abrangente para desenvolver e implementar as tuas soluções de deteção de objetos. A estrutura da Ultralytics fornece uma API consistente entre diferentes arquiteturas de modelos, facilitando o trabalho com modelos RT-DETR.

Comentários