《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于深度学习的行人跌倒检测系统】
9.【基于深度学习的PCB板缺陷检测系统】10.【基于深度学习的生活垃圾分类目标检测系统】
11.【基于深度学习的安全帽目标检测系统】12.【基于深度学习的120种犬类检测与识别系统】
13.【基于深度学习的路面坑洞检测系统】14.【基于深度学习的火焰烟雾检测系统】
15.【基于深度学习的钢材表面缺陷检测系统】16.【基于深度学习的舰船目标分类检测系统】
17.【基于深度学习的西红柿成熟度检测系统】18.【基于深度学习的血细胞检测与计数系统】
19.【基于深度学习的吸烟/抽烟行为检测系统】20.【基于深度学习的水稻害虫检测与识别系统】
21.【基于深度学习的高精度车辆行人检测与计数系统】22.【基于深度学习的路面标志线检测与识别系统】
23.【基于深度学习的智能小麦害虫检测识别系统】24.【基于深度学习的智能玉米害虫检测识别系统】
25.【基于深度学习的200种鸟类智能检测与识别系统】26.【基于深度学习的45种交通标志智能检测与识别系统】
27.【基于深度学习的人脸面部表情识别系统】28.【基于深度学习的苹果叶片病害智能诊断系统】
29.【基于深度学习的智能肺炎诊断系统】30.【基于深度学习的葡萄簇目标检测系统】
31.【基于深度学习的100种中草药智能识别系统】32.【基于深度学习的102种花卉智能识别系统】
33.【基于深度学习的100种蝴蝶智能识别系统】34.【基于深度学习的水稻叶片病害智能诊断系统】
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于深度学习的智能草莓病害检测与分割系统】
37.【基于深度学习的复杂场景下船舶目标检测系统】38.【基于深度学习的农作物幼苗与杂草检测系统】
39.【基于深度学习的智能道路裂缝检测与分析系统】40.【基于深度学习的葡萄病害智能诊断与防治系统】
41.【基于深度学习的遥感地理空间物体检测系统】42.【基于深度学习的无人机视角地面物体检测系统】
43.【基于深度学习的木薯病害智能诊断与防治系统】44.【基于深度学习的野外火焰烟雾检测系统】
45.【基于深度学习的脑肿瘤智能检测系统】46.【基于深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】74.【基于深度学习的水面垃圾智能检测识别系统】
75.【基于深度学习的遥感视角船只智能检测系统】76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统】
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】
79.【基于深度学习的果园苹果检测与计数系统】80.【基于深度学习的半导体芯片缺陷检测系统】
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统】82.【基于深度学习的运动鞋品牌检测与识别系统】
83.【基于深度学习的苹果叶片病害检测识别系统】84.【基于深度学习的医学X光骨折检测与语音提示系统】
85.【基于深度学习的遥感视角农田检测与分割系统】86.【基于深度学习的运动品牌LOGO检测与识别系统】
87.【基于深度学习的电瓶车进电梯检测与语音提示系统】88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统】
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统】90.【基于深度学习的舌苔舌象检测识别与诊断系统】
91.【基于深度学习的蛀牙智能检测与语音提示系统】92.【基于深度学习的皮肤癌智能检测与语音提示系统】
93.【基于深度学习的工业压力表智能检测与读数系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

RF-DETR 模型介绍

在这里插入图片描述
RF-DETR 是由 Roboflow 开发的基于 Transformer 的实时目标检测模型架构。
RF-DETR 系列模型在所有尺寸的目标检测模型中都是最快和最精确的。RF-DETR 在 Microsoft COCO 基准测试中取得了超过 60 mAP 的成绩,这是衡量目标检测性能的领先标准。它还在 RF100-VL 基准测试中创下了新纪录,该基准测试展示了模型在标准数据集之外适应现实问题的能力。

RF-DETR 模型组包括五种尺寸:Nano、Small、Medium、Base 和 Large。这些模型提供了满足不同需求的选择。例如,RF-DETR-Nano 比 YOLO11-n(在 mAP50:95 上)高 11 mAP,运行速度快 0.17 毫秒。同样,RF-DETR-Small 比 YOLO11-x(最大的 YOLO11 模型)好 1.8 mAP,速度快 7.77 毫秒。这种广泛的模型选择使 RF-DETR 成为许多现实应用的绝佳选择,从需要超快速度的小型设备到需要最高精度的大型任务。RF-DETR 足够小,可以在边缘设备上运行,非常适合需要高精度和实时性能的部署。

环境配置

安装依赖库

安装 RF-DETR 1.2.1 或更高版本(包含新的 Nano、Small 和 Medium 检查点),以及用于基准测试的 Supervision。

!pip install -q rfdetr==1.2.1 supervision==0.26.1

使用预训练的 COCO 模型进行推理

在示例图像上使用预训练的 RF-DETR Medium 模型(在 COCO 上训练)运行推理。要使用不同大小的模型,只需根据需要将 RFDETRMedium 替换为 RFDETRNano、RFDETRSmall、RFDETRBase 或 RFDETRLarge。

import numpy as np
import supervision as sv
from PIL import Image
from rfdetr import RFDETRMedium
from rfdetr.util.coco_classes import COCO_CLASSES

image = Image.open("dog-2.jpeg")

model = RFDETRMedium(resolution=640)
model.optimize_for_inference()

detections = model.predict(image, threshold=0.5)

color = sv.ColorPalette.from_hex([
    "#ffff00", "#ff9b00", "#ff8080", "#ff66b2", "#ff66ff", "#b266ff",
    "#9999ff", "#3399ff", "#66ffff", "#33ff99", "#66ff66", "#99ff00"
])
text_scale = sv.calculate_optimal_text_scale(resolution_wh=image.size)
thickness = sv.calculate_optimal_line_thickness(resolution_wh=image.size)

bbox_annotator = sv.BoxAnnotator(color=color, thickness=thickness)
label_annotator = sv.LabelAnnotator(
    color=color,
    text_color=sv.Color.BLACK,
    text_scale=text_scale,
    smart_position=True
)

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 = bbox_annotator.annotate(annotated_image, detections)
annotated_image = label_annotator.annotate(annotated_image, detections, labels)
annotated_image.thumbnail((800, 800))
annotated_image

在这里插入图片描述

在自定义数据集上训练 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
    └── ... (其他图像文件)

训练模型

选择合适的 batch_size

不同的 GPU 具有不同数量的 VRAM(视频内存),这限制了它们在训练期间一次可以处理的数据量。为了使训练在任何机器上都能正常工作,您可以调整两个设置:batch_size 和 grad_accum_steps。这些控制一次处理的样本数量。关键是保持它们的乘积等于 16 — 这是我们推荐的总批量大小。例如,在 A100 等强大的 GPU 上,设置 batch_size=16 和 grad_accum_steps=1。在 T4 等较小的 GPU 上,使用 batch_size=4 和 grad_accum_steps=4。我们使用一种称为梯度累积的方法,该方法允许模型通过逐步收集更新然后调整权重来模拟使用较大批量大小的训练。

from rfdetr import RFDETRMedium

model = RFDETRMedium()

model.train(dataset_dir=dataset.location, 
epochs=10, 
batch_size=8, 
grad_accum_steps=2)

训练参数说明

以下是参数描述的Markdown表格格式:

参数描述
dataset_dir指定 COCO 格式的数据集位置,其中包含 train、valid 和 test 文件夹,每个文件夹都包含 _annotations.coco.json。确保模型可以正确读取和解析数据。
output_dir训练结果相关文件存放路径。
epochs数据集上的完整训练轮次。增加这个可以提高性能,但延长总训练时间。
batch_size每次迭代处理的样本数。较高的值需要更多的 GPU 内存,但可以加快训练速度。必须与 grad_accum_steps 平衡,以保持预期的总批量。
grad_accum_steps在多个小批处理上累积梯度,有效地提高总批处理大小,而无需一次占用大量内存。帮助在较小的 GPU 上进行训练,每次更新的时间稍长。
lr模型训练的学习率。影响模型调整其参数的速度。
lr_encoder学习速率专门用于模型的编码器部分。用于以不同的速度微调编码器层。
resolution设置输入图像尺寸。更高的值可以提高准确性,但需要更多的内存,并可能减慢训练。必须能被56整除。
weight_decayL2 正则化的系数。通过惩罚较大的权重来帮助防止过度拟合,通常可以提高泛化能力。
device指定硬件(例如,CPU 或 cuda)上运行训练。GPU 显著加快了训练速度。
use_ema启用权重的指数移动平均,生成平滑的检查点。通常以轻微的开销提高最终性能。
gradient_checkpointing在反向传播期间重新计算前向传递的部分,以减少内存使用。降低记忆需求,但增加训练时间。
checkpoint_interval保存模型检查点的频率(以epoch为单位)。更频繁的保存可以提供更好的覆盖范围,但会消耗更多的存储空间。
resume用于继续培训的已保存检查点的路径。恢复模型权重和优化器状态。
tensorboard支持将训练指标记录到 TensorBoard,以监控进度和性能。
wandb激活对权重和偏差的日志记录,促进基于云的实验跟踪和可视化。
project权重和偏差记录的项目名称。将多个试验分组到单个标题下。
run权重和偏差日志的运行名称,有助于区分项目中的各个培训课程。
early_stopping启用提前停止机制,用于监视 mAP 的改进,以决定是否应停止训练。有助于避免 mAP 稳定时出现不必要的时期。
early_stopping_patience停止前无 mAP 改善的连续时期数。防止在最小收益上浪费资源。
early_stopping_min_deltamAP 的最小变化符合改善的条件。
early_stopping_use_ema是否使用 EMA 版本的模型跟踪改进。如果可用,则使用 EMA 指标,否则返回常规 mAP。

训练完成后,结果将保存在 /content/output 目录中:
在这里插入图片描述在这里插入图片描述

在训练过程中,多个模型检查点被保存到输出目录,说明如下:

checkpoint.pth-最近的检查点,保存在最后一个 epoch 的模型。
checkpoint_.pth-每 N 个 epoch 保存一次定期检查点(默认为每 10 个)。
checkpoint_best_ema.pth-基于验证分数的最佳检查点,使用 EMA(指数移动平均)权重。EMA 权重是模型参数在训练步骤中的平滑版本,通常会产生更好的泛化能力。
checkpoint_best_regular.pth-基于验证分数的最佳检查点,使用原始(非 EMA)模型权重。
checkpoint_best_total.pth-为推理和基准测试选择的最终检查点。它只包含模型权重(没有优化器状态或调度程序),并根据验证性能选择 EMA 和非 EMA 模型中较好的一个。

使用训练好的模型进行推理

我们使用 RFDETRMedium 类从 checkpoint_best_total.pth 文件加载性能最佳的模型。此检查点包含我们最成功的训练运行的训练权重。加载后,我们调用 optimize_for_inference(),它准备模型以进行高效推理。

model = RFDETRMedium(pretrain_weights="/content/output/checkpoint_best_total.pth")
model.optimize_for_inference()

运行推理并可视化结果:

from rfdetr import RFDETRBase
import supervision as sv
from PIL import Image

path, image, annotations = ds[0]
image = Image.open(path)

detections = model.predict(image, threshold=0.5)

text_scale = sv.calculate_optimal_text_scale(resolution_wh=image.size)
thickness = sv.calculate_optimal_line_thickness(resolution_wh=image.size)
color = sv.ColorPalette.from_hex([
    "#ffff00", "#ff9b00", "#ff66ff", "#3399ff", "#ff66b2", "#ff8080",
    "#b266ff", "#9999ff", "#66ffff", "#33ff99", "#66ff66", "#99ff00"
])

bbox_annotator = sv.BoxAnnotator(color=color,thickness=thickness)
label_annotator = sv.LabelAnnotator(
    color=color,
    text_color=sv.Color.BLACK,
    text_scale=text_scale)

annotations_labels = [
    f"{ds.classes[class_id]}"
    for class_id
    in annotations.class_id
]

detections_labels = [
    f"{ds.classes[class_id]} {confidence:.2f}"
    for class_id, confidence
    in zip(detections.class_id, detections.confidence)
]

annotation_image = image.copy()
annotation_image = bbox_annotator.annotate(annotation_image, annotations)
annotation_image = label_annotator.annotate(annotation_image, annotations, annotations_labels)

detections_image = image.copy()
detections_image = bbox_annotator.annotate(detections_image, detections)
detections_image = label_annotator.annotate(detections_image, detections, detections_labels)

sv.plot_images_grid(images=[annotation_image, detections_image], grid_size=(1, 2), titles=["Annotation", "Detection"])

在这里插入图片描述

评估训练好的RF-DETR 模型

加载测试数据集:

import supervision as sv

ds = sv.DetectionDataset.from_coco(
    images_directory_path=f"{dataset.location}/test",
    annotations_path=f"{dataset.location}/test/_annotations.coco.json",
)

模型评估:

import supervision as sv
from tqdm import tqdm
from supervision.metrics import MeanAveragePrecision

targets = []
predictions = []

for path, image, annotations in tqdm(ds):
    image = Image.open(path)
    detections = model.predict(image, threshold=0)

    targets.append(annotations)
    predictions.append(detections)

map_metric = MeanAveragePrecision()
map_result = map_metric.update(predictions, targets).compute()
print(map_result)

Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.407
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.844
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.309
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.409
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.391

训练结果可视化

以下为在某PCB板缺陷检测数据集上训练结果可视化后的相关结果:
训练损失曲线:
在这里插入图片描述

mAP@0.5:0.95曲线:
在这里插入图片描述
mAP@0.5曲线:
在这里插入图片描述
Precision曲线:
在这里插入图片描述

模型性能评估结果柱状图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐