❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🔍 「别让漏检毁生产线!Transformer把目标检测变成高速扫描仪」
大家好,我是蚝油菜花。这些工业视觉の死亡场景你是否亲历过——
- 👉 质检员盯着传送带看到斗鸡眼,0.1mm的芯片缺陷还是漏检
- 👉 自动驾驶紧急刹车时,模型还在计算上一帧的障碍物
- 👉 部署YOLO时疯狂魔改,换设备又得重新训练一轮...
今天要炸翻CV圈的 RF-DETR ,正在重写检测规则!Roboflow这发王炸:
- ✅ 「精度速度双冠」:60+mAP+25FPS,检测延迟比眨眼还快3倍
- ✅ 视觉通才:DINOv2主干网络让航拍/工业/医疗数据通吃
- ✅ 即插即用:动态分辨率切换像调手机亮度一样简单
已有工厂用它实现瑕疵零漏检,自动驾驶系统靠它实时捕捉鬼探头——你的视觉模型,是时候注射「Transformer强心针」了!
🚀 快速阅读
RF-DETR是Roboflow基于Transformer架构开发的实时目标检测模型。
- 性能:在COCO数据集达到60+ mAP,推理速度25FPS
- 技术:融合DINOv2主干与单尺度特征提取,平衡精度与速度
- 应用:支持多分辨率训练和ONNX导出,适配边缘计算设备
RF-DETR 是什么
RF-DETR是Roboflow推出的新一代实时目标检测模型,属于DETR(Detection Transformer)家族。它首次在COCO数据集上实现了60+的平均精度均值(mAP),同时保持25帧/秒以上的实时性能,打破了传统CNN模型在精度与速度上的权衡困局。
该模型创新性地结合了轻量级Transformer架构与预训练的DINOv2视觉主干网络,通过单尺度特征提取和多分辨率训练策略,在工业检测、自动驾驶等高要求场景中展现出显著优势。开发者可直接使用其预训练检查点,快速适配自定义数据集。
RF-DETR 的主要功能
- 高精度实时检测:在COCO数据集上达到60+ mAP,T4显卡推理延迟仅6ms
- 领域自适应:通过DINOv2主干网络实现跨领域迁移,适用于航拍、工业等复杂场景
- 动态分辨率:支持560-896px多分辨率切换,无需重训练即可调整精度/速度平衡
- 便捷部署:提供PyTorch和ONNX格式模型,支持边缘设备部署
RF-DETR 的技术原理
- Transformer架构:采用DETR的编码器-解码器结构,利用自注意力机制捕捉全局上下文
- DINOv2主干网络:基于大规模自监督预训练的特征提取器,提升小样本适应能力
- 单尺度优化:相比Deformable DETR的多尺度设计,简化特征图处理流程降低计算开销
- 延迟优化:采用TensorRT加速,将NMS处理时间纳入总延迟评估体系
快速体验 RF-DETR
如何运行 RF-DETR:SOTA 实时目标检测模型
下面将指导您如何安装、运行和微调 RF-DETR 模型。
安装 RF-DETR
在使用 RF-DETR 之前,您需要安装 rfdetr
包。确保您的 Python 版本为 3.9 或更高版本。
pip install rfdetr
AI 代码解读
使用 RF-DETR 进行推理
RF-DETR 提供了预训练的 Microsoft COCO 数据集模型检查点,您可以直接加载并用于目标检测任务。
1. 单张图片推理
以下代码展示了如何使用 RF-DETR 对单张图片进行目标检测。
import io
import requests
import supervision as sv
from PIL import Image
from rfdetr import RFDETRBase
from rfdetr.util.coco_classes import COCO_CLASSES
# 加载 RF-DETR 模型
model = RFDETRBase()
# 从 URL 加载图片
url = "https://media.roboflow.com/notebooks/examples/dog-2.jpeg"
image = Image.open(io.BytesIO(requests.get(url).content))
# 进行目标检测
detections = model.predict(image, threshold=0.5)
# 生成标注标签
labels = [
f"{COCO_CLASSES[class_id]} {confidence:.2f}"
for class_id, confidence
in zip(detections.class_id, detections.confidence)
]
# 绘制边界框和标签
annotated_image = image.copy()
annotated_image = sv.BoxAnnotator().annotate(annotated_image, detections)
annotated_image = sv.LabelAnnotator().annotate(annotated_image, detections, labels)
# 显示结果
sv.plot_image(annotated_image)
AI 代码解读
2. 视频推理
如果需要对视频进行推理,可以使用以下代码。
import supervision as sv
from rfdetr import RFDETRBase
from rfdetr.util.coco_classes import COCO_CLASSES
# 加载 RF-DETR 模型
model = RFDETRBase()
def callback(frame, index):
# 对每一帧进行目标检测
detections = model.predict(frame, threshold=0.5)
# 生成标注标签
labels = [
f"{COCO_CLASSES[class_id]} {confidence:.2f}"
for class_id, confidence
in zip(detections.class_id, detections.confidence)
]
# 绘制边界框和标签
annotated_frame = frame.copy()
annotated_frame = sv.BoxAnnotator().annotate(annotated_frame, detections)
annotated_frame = sv.LabelAnnotator().annotate(annotated_frame, detections, labels)
return annotated_frame
# 处理视频文件
process_video(
source_path="input_video.mp4", # 输入视频路径
target_path="output_video.mp4", # 输出视频路径
callback=callback
)
AI 代码解读
3. 摄像头实时推理
您也可以通过摄像头实时进行目标检测。
import cv2
import supervision as sv
from rfdetr import RFDETRBase
from rfdetr.util.coco_classes import COCO_CLASSES
# 加载 RF-DETR 模型
model = RFDETRBase()
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
success, frame = cap.read()
if not success:
break
# 对每一帧进行目标检测
detections = model.predict(frame, threshold=0.5)
# 生成标注标签
labels = [
f"{COCO_CLASSES[class_id]} {confidence:.2f}"
for class_id, confidence
in zip(detections.class_id, detections.confidence)
]
# 绘制边界框和标签
annotated_frame = frame.copy()
annotated_frame = sv.BoxAnnotator().annotate(annotated_frame, detections)
annotated_frame = sv.LabelAnnotator().annotate(annotated_frame, detections, labels)
# 显示结果
cv2.imshow("Webcam", annotated_frame)
# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
AI 代码解读
模型变体与输入分辨率
模型变体
RF-DETR 提供两个变体:
- RF-DETR-B (29M 参数):适合资源受限的场景。
- RF-DETR-L (128M 参数):适合更高精度的需求。
from rfdetr import RFDETRBase, RFDETRLarge
# 加载 RF-DETR-B 模型
model_base = RFDETRBase()
# 加载 RF-DETR-L 模型
model_large = RFDETRLarge()
AI 代码解读
输入分辨率
更高的分辨率通常会提高预测质量,但会减慢推理速度。您可以通过调整 resolution
参数来配置输入分辨率(值必须是 56 的倍数)。
model = RFDETRBase(resolution=560)
AI 代码解读
训练 RF-DETR 模型
数据集结构
RF-DETR 需要数据集以 COCO 格式组织,分为 train
、valid
和 test
三个子目录,每个子目录包含图片和对应的标注文件 _annotations.coco.json
。
dataset/
├── train/
│ ├── _annotations.coco.json
│ ├── image1.jpg
│ ├── image2.jpg
├── valid/
│ ├── _annotations.coco.json
│ ├── image1.jpg
│ ├── image2.jpg
└── test/
├── _annotations.coco.json
├── image1.jpg
├── image2.jpg
AI 代码解读
您可以使用Roboflow
创建或转换数据集,并导出为 COCO 格式。
- Roboflow:https://roboflow.com/
微调模型
您可以从预训练的 COCO 检查点微调 RF-DETR 模型。
from rfdetr import RFDETRBase
# 加载模型
model = RFDETRBase()
# 开始微调
model.train(
dataset_dir="path/to/dataset", # 数据集路径
epochs=10, # 训练轮数
batch_size=4, # 批量大小
grad_accum_steps=4, # 梯度累积步数
lr=1e-4 # 学习率
)
AI 代码解读
批量大小调整
不同的 GPU 拥有不同的显存容量,您可以通过调整 batch_size
和 grad_accum_steps
来适应您的硬件条件,确保两者的乘积为 16。
多 GPU 训练
使用 PyTorch 的 Distributed Data Parallel (DDP) 可以在多 GPU 上训练 RF-DETR。
python -m torch.distributed.launch \ --nproc_per_node=8 \ --use_env \ main.py
AI 代码解读
导出 ONNX 模型
RF-DETR 支持将模型导出为 ONNX 格式,以便在不同的推理框架中使用。
from rfdetr import RFDETRBase
# 加载模型
model = RFDETRBase()
# 导出 ONNX 模型
model.export()
AI 代码解读
导出的 ONNX 模型将保存在 output
目录中。
资源
- 项目主页:https://blog.roboflow.com/rf-detr/
- GitHub 仓库:https://github.com/roboflow/rf-detr
- 在线演示 Demo:https://huggingface.co/spaces/SkalskiP/RF-DETR
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦