RT-DETR

Um transformer de detecção feito para inferência em tempo real: ele decodifica um conjunto fixo de queries em vez de uma grade densa, então não roda NMS. O LibreYOLO traz três versões dele, diferenciadas pelo checkpoint que você carrega, e a versão 2 também serve caixas orientadas.

Tarefas
detection, oriented boxes
Tamanhos
rtdetr: r18, r34, r50, r50m, r101, l, x at 640 px; rtdetrv2: r18, r34, r50, r50m, r101 at 640 px; rtdetrv4: s, m, l, x at 640 px
Instalação
pip install libreyolo
Nível de suporte
Núcleo, desde a v1.1.0. Detectores treináveis do núcleo: os recursos chegam depois dos carros-chefe na mesma leva de versões.
Origem
RT-DETR, RT-DETRv2 and RT-DETRv4 por Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4), Apache-2.0. Artigo, código-fonte
Licenças
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalação

O RT-DETR não precisa de nenhum extra opcional. Tudo que ele importa já está na instalação base, e o extra rtdetr é um nome estável que não acrescenta nada.

bash
pip install libreyolo

O fine-tuning com adaptadores via lora=True é a exceção, e precisa do extra lora.

bash
pip install "libreyolo[lora]"

Predição

Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache localmente.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTDETRr18.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTDETRr18.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Vídeo
from libreyolo import LibreYOLO # A versão faz parte do nome do arquivo, e a factory decide pelo# checkpoint, então as três carregam do mesmo jeito.model = LibreYOLO("LibreRTDETRv4s.pt") # Qualquer fonte que a biblioteca aceita: arquivo, pasta, URL, índice# de webcam, stream RTSP ou uma lista .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))
Caixas orientadas
from libreyolo import LibreYOLO # Só na versão 2. O sufixo -obb seleciona a tarefa, e o checkpoint é# reconhecido como orientado por seus tensores, então não precisa de# argumento task. Estes pesos são DOTA v1.0, 15 classes aéreas a 1024 px.model = LibreYOLO("LibreRTDETRv2n-obb.pt")result = model("aerial.png", save=True) obb = result.obbprint(obb.xywhr)     # (N, 5): cx, cy, w, h, radianosprint(obb.xyxyxyxy)  # as mesmas linhas como quatro pontos de cantoprint(result.boxes.xyxy)  # caixas envolventes alinhadas aos eixos
Caixas orientadas, CLI
libreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=True

O objeto Results retornado é o mesmo que todas as famílias retornam, então trocar por outro detector é uma mudança de uma linha. conf e max_det filtram uma decodificação top-k sobre queries e classes; não há etapa de NMS para ajustar, e iou é aceito mas não usado. Um checkpoint orientado preenche result.obb nativamente e também preenche result.boxes com os retângulos envolventes alinhados aos eixos. Veja predição para fontes, streaming e tratamento de resultados.

Variantes

Três versões, duas tarefas entre elas, e os códigos de tamanho não seguem uma série única. A versão 1 nomeia seus tamanhos pelo backbone, ResNet ou HGNetv2. A versão 2 reaproveita só os nomes de ResNet: a versão 1 já traz os dois tamanhos HGNetv2, e os resultados da versão 2 ali ficaram próximos o bastante para que o LibreYOLO não publique pesos duplicados para eles. A versão 4 usa uma série de letras simples, que colide com os nomes HGNetv2 da versão 1, então um código de tamanho sozinho não identifica um modelo. A versão está escrita no nome do arquivo do checkpoint.

CheckpointEntrada (px)mAP 50-95Parâmetros (M)
LibreRTDETRl64055.832.93
LibreRTDETRr10164056.876.56
LibreRTDETRr1864049.720.18
LibreRTDETRr3464052.231.44
LibreRTDETRr5064055.942.89
LibreRTDETRr50m64053.836.59
LibreRTDETRx64057.967.37
LibreRTDETRv2r10164056.876.56
LibreRTDETRv2r1864050.820.18
LibreRTDETRv2r3464053.231.44
LibreRTDETRv2r5064055.742.89
LibreRTDETRv2r50m64054.836.59
LibreRTDETRv4l64057.831.24
LibreRTDETRv4m64056.519.59
LibreRTDETRv4s64052.810.32
LibreRTDETRv4x64060.062.62

COCO val2017, 500 images. Medido pelo conjunto de testes de benchmark do LibreYOLO e publicado no Vision Analysis, onde a latência entre hardwares e runtimes é comparada e os registros completos das execuções ficam disponíveis.

A versão 2 mantém a arquitetura e o layout do state dict da versão 1 e muda como a atenção deformável amostra, e é por isso que as duas são diferenciadas pelos metadados do checkpoint em vez de pelo formato. A versão 4 é outra linhagem: ela reaproveita a arquitetura e o trainer do D-FINE, e seus pesos vêm da destilação de um modelo de fundação de visão DINOv3 como professor em um aluno HGNetv2. No LibreYOLO, LibreRTDETRv4 é uma subclasse de LibreDFINE com a cabeça de máscaras fixada em desligado, então ele fica só em detecção.

Caixas orientadas na versão 2

A versão 2 é a única versão que carrega uma segunda tarefa. Suas tarefas suportadas são detect e obb, e as duas não compartilham grafo nem série de tamanhos. A detecção usa os tamanhos ResNet a 640 px; a detecção orientada usa uma série HGNetv2, n, s, m, l e x, a 1024 px, e o tamanho de entrada é resolvido por tarefa, não por família. Um checkpoint é reconhecido como orientado pelos próprios tensores, pelas cabeças de caixa de cinco coordenadas e pelos parâmetros de amostragem da versão 2, então pesos -obb carregam no grafo orientado sem um argumento task, e uma incompatibilidade entre os dois é um erro duro em vez de uma reinterpretação silenciosa.

Os arquivos publicados vão de LibreRTDETRv2n-obb.pt a LibreRTDETRv2x-obb.pt. São os checkpoints oficiais de escala única do DOTA v1.0 convertidos para o formato do LibreYOLO, 15 classes aéreas de avião e navio a porto e helicóptero, e os nomes das classes estão gravados no checkpoint. Diferente do lado da detecção, a tarefa orientada é só de inferência: predição, validação e exportação funcionam, e train() em um modelo orientado levanta erro. Tracking e test-time augmentation também não suportam caixas orientadas. Detecção orientada cobre a tarefa, o formato das labels e as métricas.

Treinamento

O treinamento parte de um checkpoint publicado. pretrained é aceito e depois descartado nas três versões, então pretrained=False não te dá um modelo inicializado aleatoriamente. Tudo nesta seção é sobre detecção: a tarefa orientada da versão 2 é só de inferência, e não há caminho de transferência dos pesos de detecção para ela, porque as duas usam backbones diferentes.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # O coco128.yaml baixa uma amostra de 128 imagens no primeiro uso. Aponte# `data` para o YAML do seu próprio dataset em uma execução de verdade.model.train(data="coco128.yaml", epochs=50, batch=4, lr0=1e-4)
CLI
libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \  epochs=50 batch=4 lr0=1e-4
LoRA
# Precisa do extra lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")model.train(data="coco128.yaml", epochs=50, lora=True)
Multi-GPU
libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \  epochs=50 device=0,1

O learning rate é o argumento que precisa estar certo, e cada versão traz seu próprio padrão em vez do padrão geral da biblioteca. A assinatura de train() no Python lê esse valor da config de treinamento daquela versão, e o CLI resolve o mesmo valor quando lr0 não é passado. As versões 1 e 2 também aceitam lr_backbone e o deixam por padrão em um vigésimo de lr0, seguindo a receita original; a versão 4 roda pelo trainer do D-FINE, que em vez disso escala o grupo de parâmetros do backbone com backbone_lr_mult.

Deixe imgsz no tamanho nativo do checkpoint a menos que você tenha um motivo para mudar. Validação e predição em outros tamanhos funcionam, com um resíduo: um tamanho retangular cuja contagem de tokens bate com a do tamanho nativo ainda reaproveita um embedding construído para a proporção errada.

Veja treinamento para datasets, data augmentation, multi-GPU e loggers.

RT-DETRv4 ativa amp=True com amp_dtype="float16" por padrão. Passe amp=False para FP32.

Validação

val() retorna um dicionário de chaves metrics/ cobrindo precisão, recall, mAP 50 e mAP 50-95, medidos contra qualquer dataset no formato em que você treinou.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # val() retorna um dict simples, não um objetometrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])
CLI
libreyolo val model=LibreRTDETRr18.pt data=coco128.yaml
Contra o COCO
# O coco-val-only.yaml busca as 5000 imagens de val2017 e pula o conjunto# de treinamento. Ele traz um script de download embutido, então precisa# de permissão explícita a menos que o dataset já esteja local.libreyolo val model=LibreRTDETRr18.pt data=coco-val-only.yaml \  allow_download_scripts=True
Caixas orientadas
from libreyolo import LibreYOLO # A validação orientada faz o matching com IoU rotacionado, então uma# predição no lugar certo com o ângulo errado conta como erro.model = LibreYOLO("LibreRTDETRv2n-obb.pt")metrics = model.val(data="my-obb-dataset.yaml") print(metrics["metrics/mAP50-95(OBB)"])print(metrics["metrics/mAP50(OBB)"])

As linhas da tabela de benchmark acima vêm do harness de benchmark do LibreYOLO; a nota abaixo daquela tabela registra qual dataset as produziu e traz os links dos registros de execução.

A validação orientada passa pela mesma chamada e reporta as mesmas chaves, mais quatro repetidas sob um sufixo (OBB). O matching usa IoU rotacionado em vez do IoU dos retângulos envolventes, então um erro de ângulo é uma falha. augment=True é rejeitado nesta tarefa.

Exportação

TarefaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatívelDetection to TorchScript: compatívelDetection to ExecuTorch: compatívelDetection to TensorRT: compatívelDetection to OpenVINO: compatívelDetection to Paddle: incompatívelDetection to MNN: compatívelDetection to RKNN: incompatívelDetection to ncnn: incompatívelDetection to TFLite: incompatívelDetection to CoreML: incompatívelDetection to Core AI: compatível
Oriented boxesOriented boxes to ONNX: compatívelOriented boxes to TorchScript: compatívelOriented boxes to ExecuTorch: compatívelOriented boxes to TensorRT: compatívelOriented boxes to OpenVINO: compatívelOriented boxes to Paddle: incompatívelOriented boxes to MNN: incompatívelOriented boxes to RKNN: incompatívelOriented boxes to ncnn: incompatívelOriented boxes to TFLite: incompatívelOriented boxes to CoreML: incompatívelOriented boxes to Core AI: incompatível

A matriz cobre a linhagem como uma página só: onde as três versões discordam sobre um formato, a célula mostra a mais fraca das três, então nada aqui é prometido a mais para a versão que você carregar. A linha orientada pertence só à versão 2. ONNX e TorchScript são validados ali, em FP32, batch 1 e um canvas fixo de 1024 por 1024; OpenVINO, TensorRT e ExecuTorch convertem e recarregam, mas não atingiram paridade de saída bruta em todo o conjunto de queries, então as caixas do topo batem a uma fração de pixel enquanto a cauda desvia.

Um artefato exportado é recarregado pelo LibreYOLO() a partir do sufixo do arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e devolve o mesmo Results.

Python
# Precisa do extra onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreRTDETRr18.pt format=onnx
Caixas orientadas
# ONNX e TorchScript são os alvos validados para a tarefa orientada, em# FP32, batch 1, num canvas fixo de 1024 por 1024.libreyolo export model=LibreRTDETRv2n-obb.pt format=onnx imgsz=1024libreyolo export model=LibreRTDETRv2n-obb.pt format=torchscript imgsz=1024
Usar o arquivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory decide pelo sufixo do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibreRTDETRr18.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Entradas e saídas ONNX

LibreRTDETR and LibreRTDETRv2

Tensorimages float32 [batch, 3, height, width]
CorRGB
Escalapixel / 255
Normalizaçãonenhuma
Redimensionamentoesticar para largura x altura (sem preenchimento, a proporção não é mantida), bilinear

Square input only. Export rejects a non-square imgsz, and height equals width, 640 by default.

LibreRTDETR also exports at other square sizes, such as 512. LibreRTDETRv2 exports at 640 only: any other imgsz fails during export with a tensor size mismatch.

Stretch the whole image to width x height with cv2.resize and INTER_LINEAR on the 8-bit RGB image. There is no letterbox and no padding, so the aspect ratio is not kept.

Then divide by 255. There is no mean or std normalization.

Detection, exportação padrão
SaídaFormaSignificado
pred_logits[batch, queries, nc]Raw class logits per query, sigmoid not applied. 300 queries and 80 classes for the COCO checkpoints.
pred_boxes[batch, queries, 4]Boxes as cx, cy, w, h, normalized 0 to 1 of the input.

Pós-processamento

  1. Apply sigmoid to pred_logits.
  2. Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
  3. Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, so the IoU threshold is not used.
  4. Convert the query's box to x1, y1, x2, y2 with x1 = cx - w / 2, y1 = cy - h / 2, x2 = cx + w / 2, y2 = cy + h / 2.
  5. Map boxes back to the original image: multiply x by the original width and y by the original height. The input was stretched, so no pad offset applies. LibreYOLO does not clip these boxes.
  6. nms=True is not available for this family: export raises NotImplementedError.

LibreRTDETRv2 OBB

Tensorimages float32 [batch, 3, height, width]
CorRGB
Escalapixel / 255
Normalizaçãonenhuma
Redimensionamentocustom, Pillow bilinear
Como reproduzir o redimensionamento bilinear do Pillow

O LibreYOLO redimensiona com o filtro BILINEAR do Pillow (Image.resize). Não é OpenCV INTER_LINEAR nem INTER_AREA: ao reduzir, o Pillow alarga o filtro pelo fator de redução, e os redimensionamentos do OpenCV mudam as detecções e deslocam as caixas em vários pixels. Para reproduzi-lo sem o Pillow, redimensione um eixo, arredonde para 8 bits, depois redimensione o outro eixo e arredonde de novo. Por eixo, seja s = in_size / out_size e f = max(s, 1). O pixel de saída i tem centro c = (i + 0.5) * s e lê os pixels de origem j de int(c - f + 0.5) até int(c + f + 0.5) - 1, limitados à imagem, cada um com peso max(0, 1 - |j + 0.5 - c| / f), dividido pela soma dos pesos. O Pillow calcula em ponto fixo e escolhe a ordem dos eixos pela forma da imagem, então pesos em ponto flutuante podem diferir em um nível em alguns pixels. Isso não muda os resultados nas nossas verificações.

Square input only, 1024 x 1024. Export rejects a non-square imgsz, and any other square size fails during export with a tensor size mismatch.

Scale by r = min(height / h, width / w) and resize to (round(w * r), round(h * r)). This rounds to the nearest integer instead of truncating. An exact half goes to the even integer, as Python round does.

Paste the resized image in the top-left corner of a canvas filled with 0. The padding is on the right and bottom only.

On the test image, cv2.resize with INTER_LINEAR or INTER_AREA changes the detection count and moves boxes by more than 2 px.

Pillow computes each pass in fixed point: it rounds every weight to an integer with 22 fractional bits (round half away from zero), sums weight x pixel in integers, adds 2^21, shifts right by 22 and clips to 0 to 255.

Use that integer arithmetic for this model. Float weights differ from Pillow by a level on a few pixels, and on the test image that turns one box by 0.2 rad.

Divide the whole canvas by 255 after the resize. There is no mean or std normalization.

Oriented boxes, exportação padrão
SaídaFormaSignificado
pred_logits[batch, queries, nc]Raw class logits per query, sigmoid not applied. 300 queries and 15 DOTA classes for the released checkpoints.
pred_boxes[batch, queries, 5]Rotated boxes as cx, cy, w, h, a. cx and w are normalized 0 to 1 of the input width, cy and h of the input height, both on the padded canvas. a is the angle divided by pi, 0 to 1.

Pós-processamento

  1. Apply sigmoid to pred_logits.
  2. Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
  3. Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, rotated or axis-aligned, so the IoU threshold is not used.
  4. Map boxes back to the original image: multiply cx and w by the input width, cy and h by the input height, then divide all four by r. The padding is on the right and bottom, so no offset applies. LibreYOLO does not clip these boxes.
  5. The angle in radians is a x pi. LibreYOLO reports each box as cx, cy, w, h, angle in original-image pixels and radians.
  6. The corners are (cx + dx cos(angle) - dy sin(angle), cy + dx sin(angle) + dy cos(angle)) for (dx, dy) = (-w / 2, -h / 2), (w / 2, -h / 2), (w / 2, h / 2), (-w / 2, h / 2). With y pointing down, a positive angle turns the box clockwise on screen.
  7. LibreYOLO's axis-aligned box for a detection is the smallest box that encloses its four corners.
  8. nms=True is not available for this family: export raises NotImplementedError.

LibreRTDETRv4

Tensorimages float32 [batch, 3, height, width]
CorRGB
Escalapixel / 255
Normalizaçãonenhuma
Redimensionamentoesticar para largura x altura (sem preenchimento, a proporção não é mantida), Pillow bilinear
Como reproduzir o redimensionamento bilinear do Pillow

O LibreYOLO redimensiona com o filtro BILINEAR do Pillow (Image.resize). Não é OpenCV INTER_LINEAR nem INTER_AREA: ao reduzir, o Pillow alarga o filtro pelo fator de redução, e os redimensionamentos do OpenCV mudam as detecções e deslocam as caixas em vários pixels. Para reproduzi-lo sem o Pillow, redimensione um eixo, arredonde para 8 bits, depois redimensione o outro eixo e arredonde de novo. Por eixo, seja s = in_size / out_size e f = max(s, 1). O pixel de saída i tem centro c = (i + 0.5) * s e lê os pixels de origem j de int(c - f + 0.5) até int(c + f + 0.5) - 1, limitados à imagem, cada um com peso max(0, 1 - |j + 0.5 - c| / f), dividido pela soma dos pesos. O Pillow calcula em ponto fixo e escolhe a ordem dos eixos pela forma da imagem, então pesos em ponto flutuante podem diferir em um nível em alguns pixels. Isso não muda os resultados nas nossas verificações.

Square input only. Export rejects a non-square imgsz, and height equals width, 640 by default. Other square sizes, such as 512, also export.

Batch size 1 only. The graph declares a dynamic batch axis, but batches of 2 or more fail in 1.7.0.

Divide by 255 after the resize. There is no mean or std normalization.

Detection, exportação padrão
SaídaFormaSignificado
pred_logits[batch, queries, nc]Raw class logits per query, sigmoid not applied. 300 queries and 80 classes for the COCO checkpoints.
pred_boxes[batch, queries, 4]Boxes as cx, cy, w, h, normalized 0 to 1 of the input.

Pós-processamento

  1. Apply sigmoid to pred_logits.
  2. Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
  3. Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, so the IoU threshold is not used.
  4. Convert the query's box to x1, y1, x2, y2 with x1 = cx - w / 2, y1 = cy - h / 2, x2 = cx + w / 2, y2 = cy + h / 2.
  5. Map boxes back to the original image: multiply x by the original width and y by the original height. The input was stretched, so no pad offset applies. LibreYOLO does not clip these boxes.
  6. nms=True is not available for this family: export raises NotImplementedError.

Para conferir a sua própria implementação, passe o mesmo arquivo pelo LibreYOLO: LibreYOLO("model.onnx").predict("image.jpg") devolve os resultados de referência. Verificado com o LibreYOLO 1.7.0.

Checkpoints

Todos os arquivos de pesos publicados desta família.

ArquivoEntrada (px)Licença dos pesos
Detection
LibreRTDETRr34.pt640apache-2.0
LibreRTDETRr18.pt640apache-2.0
LibreRTDETRr50.pt640apache-2.0
LibreRTDETRr50m.pt640apache-2.0
LibreRTDETRr101.pt640apache-2.0
LibreRTDETRl.pt640apache-2.0
LibreRTDETRx.pt640apache-2.0
LibreRTDETRv2r18.pt640apache-2.0
LibreRTDETRv2r34.pt640apache-2.0
LibreRTDETRv2r50m.pt640apache-2.0
LibreRTDETRv2r50.pt640apache-2.0
LibreRTDETRv2r101.pt640apache-2.0
LibreRTDETRv4s.pt640apache-2.0
LibreRTDETRv4m.pt640apache-2.0
LibreRTDETRv4l.pt640apache-2.0
LibreRTDETRv4x.pt640apache-2.0
Oriented boxes
LibreRTDETRv2n-obb.ptapache-2.0
LibreRTDETRv2s-obb.pt640apache-2.0
LibreRTDETRv2m-obb.pt640apache-2.0
LibreRTDETRv2l-obb.pt640apache-2.0
LibreRTDETRv2x-obb.pt640apache-2.0

Todos os arquivos acima existem hoje na organização LibreYOLO e são baixados no primeiro uso.

O nome do arquivo carrega a versão, depois o tamanho, depois a tarefa. Os pesos de detecção são LibreRTDETR<size>.pt, LibreRTDETRv2<size>.pt e LibreRTDETRv4<size>.pt, todos a 640 px. Pesos orientados existem só para a versão 2 e acrescentam o sufixo da tarefa, de LibreRTDETRv2n-obb.pt a LibreRTDETRv2x-obb.pt, todos a 1024 px e treinados no DOTA v1.0 em vez do COCO.

Licenciamento

Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.

Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.

Trabalho original
RT-DETR, RT-DETRv2 and RT-DETRv4, Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4)
Licença original
Apache-2.0
Código-fonte original
github.com/lyuwenyu/RT-DETR
Código do LibreYOLO
MIT
Pesos
Apache-2.0, republicado em huggingface.co/LibreYOLO
Interpretação
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. All three versions carry it, across two repositories and three papers: RT-DETR and RT-DETRv2 at github.com/lyuwenyu/RT-DETR, and RT-DETRv4 at github.com/RT-DETRs/RT-DETRv4, which is cited separately (arXiv 2510.25257). RT-DETRv4 distills from a DINOv3 teacher while training only; the released student weights hold no DINOv3 parameters, and the tensors that fed the teacher are dropped when a checkpoint is converted, so Meta's DINOv3 license does not reach them.

Citação

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

@misc{lv2024rtdetrv2improvedbaselinebagoffreebies,
      title={RT-DETRv2: Improved Baseline with Bag-of-Freebies for Real-Time Detection Transformer}, 
      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},
      url={https://arxiv.org/abs/2407.17140}, 
}

Copiado do bloco de citação dos autores em github.com/lyuwenyu/RT-DETR#citation.

O bloco acima é o que os autores publicam para a detecção das versões 1 e 2. Os pesos orientados da versão 2 têm um terceiro upstream, o repositório RiO-DETR sob Apache-2.0 em github.com/RicePasteM/RiO-DETR, que é de onde vêm os checkpoints do DOTA; cite esse projeto se você usou um deles. A versão 4 é um artigo separado de um grupo diferente e tem seu próprio bloco de citação em github.com/RT-DETRs/RT-DETRv4; cite esse se você usou um checkpoint da versão 4.

Verificado com o LibreYOLO v1.6.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.