GroundingDINO微调训练_训练日志解释

1. 训练日志

12/09 03:54:02 - mmengine - INFO - Epoch(train)  [3][190/794]  base_lr: 1.0000e-04 lr: 1.0000e-04  eta: 15:15:19  time: 1.8053  data_time: 0.0080  memory: 8415  grad_norm: 49.9182  loss: 4.0043  loss_cls: 0.0733  loss_bbox: 0.1035  loss_iou: 0.1393  d0.loss_cls: 0.0847  d0.loss_bbox: 0.1103  d0.loss_iou: 0.1460  d1.loss_cls: 0.0822  d1.loss_bbox: 0.1027  d1.loss_iou: 0.1421  d2.loss_cls: 0.0785  d2.loss_bbox: 0.1031  d2.loss_iou: 0.1392  d3.loss_cls: 0.0774  d3.loss_bbox: 0.1007  d3.loss_iou: 0.1376  d4.loss_cls: 0.0736  d4.loss_bbox: 0.1034  d4.loss_iou: 0.1392  enc_loss_cls: 0.1123  enc_loss_bbox: 0.1300  enc_loss_iou: 0.1698  dn_loss_cls: 0.0012  dn_loss_bbox: 0.1218  dn_loss_iou: 0.1251  d0.dn_loss_cls: 0.0132  d0.dn_loss_bbox: 0.1820  d0.dn_loss_iou: 0.1937  d1.dn_loss_cls: 0.0025  d1.dn_loss_bbox: 0.1306  d1.dn_loss_iou: 0.1352  d2.dn_loss_cls: 0.0016  d2.dn_loss_bbox: 0.1240  d2.dn_loss_iou: 0.1278  d3.dn_loss_cls: 0.0015  d3.dn_loss_bbox: 0.1220  d3.dn_loss_iou: 0.1252  d4.dn_loss_cls: 0.0012  d4.dn_loss_bbox: 0.1217  d4.dn_loss_iou: 0.1250
12/09 03:54:11 - mmengine - INFO - Epoch(train)  [3][195/794]  base_lr: 1.0000e-04 lr: 1.0000e-04  eta: 15:15:18  time: 1.8176  data_time: 0.0080  memory: 9694  grad_norm: 50.3365  loss: 4.0305  loss_cls: 0.0829  loss_bbox: 0.1019  loss_iou: 0.1496  d0.loss_cls: 0.0977  d0.loss_bbox: 0.1050  d0.loss_iou: 0.1537  d1.loss_cls: 0.0886  d1.loss_bbox: 0.1026  d1.loss_iou: 0.1524  d2.loss_cls: 0.0862  d2.loss_bbox: 0.1014  d2.loss_iou: 0.1492  d3.loss_cls: 0.0871  d3.loss_bbox: 0.0994  d3.loss_iou: 0.1476  d4.loss_cls: 0.0839  d4.loss_bbox: 0.1020  d4.loss_iou: 0.1493  enc_loss_cls: 0.1203  enc_loss_bbox: 0.1227  enc_loss_iou: 0.1762  dn_loss_cls: 0.0012  dn_loss_bbox: 0.1099  dn_loss_iou: 0.1237  d0.dn_loss_cls: 0.0130  d0.dn_loss_bbox: 0.1664  d0.dn_loss_iou: 0.1918  d1.dn_loss_cls: 0.0026  d1.dn_loss_bbox: 0.1182  d1.dn_loss_iou: 0.1338  d2.dn_loss_cls: 0.0015  d2.dn_loss_bbox: 0.1119  d2.dn_loss_iou: 0.1264  d3.dn_loss_cls: 0.0015  d3.dn_loss_bbox: 0.1103  d3.dn_loss_iou: 0.1238  d4.dn_loss_cls: 0.0012  d4.dn_loss_bbox: 0.1098  d4.dn_loss_iou: 0.1236

在训练日志中,包含了很多与模型训练相关的参数。这些参数帮助我们理解训练过程中模型的状态、损失以及优化情况。下面是对日志中每一部分的详细解释:

1. Epoch 和 Iteration

Epoch(train)  [3][190/794]
  • Epoch: 当前是第 3 轮训练。
  • 190/794: 这意味着当前训练的第 190 个 batch,在总共有 794 个 batch 的训练集里。

2. Learning Rate(学习率)

base_lr: 1.0000e-04 lr: 1.0000e-04
  • base_lr: 初始学习率。
  • lr: 当前学习率。在这个例子中,base_lr 和当前学习率是相同的,表示没有动态变化或调整。

3. ETA(预计剩余时间)

eta: 15:15:19
  • eta: 预计剩余训练时间,格式为时:分:秒。根据当前的训练进度,预计整个训练还需要 15 小时 15 分 19 秒完成。

4. Time 和 Data Time

time: 1.8053  data_time: 0.0080
  • time: 当前迭代的总时间,1.8053 秒,即每个 batch 的训练时间。
  • data_time: 数据加载时间,0.0080 秒,表示加载每个 batch 数据的时间。

5. Memory

memory: 8415
  • memory: 当前训练所使用的 GPU 显存量(单位为 MB)。在这个例子中,使用了 8415 MB 的 GPU 显存。

6. Gradient Norm(梯度范数)

grad_norm: 49.9182
  • grad_norm: 当前梯度的范数(L2 范数),表示梯度的大小。梯度范数过大或过小可能表明梯度爆炸或消失,影响模型的训练效果。

7. Loss(损失)

loss: 4.0043
  • loss: 当前 batch 的总损失值。它是所有损失项(分类损失、回归损失等)的加和。

8. Individual Losses

loss_cls: 0.0733  loss_bbox: 0.1035  loss_iou: 0.1393

这些是不同类型的损失:

  • loss_cls: 分类损失,衡量模型预测的类别与真实标签之间的差距。
  • loss_bbox: 边框损失,衡量模型预测的边框与真实边框之间的差距。
  • loss_iou: IoU(交并比)损失,衡量预测框与真实框之间的重叠程度。

9. Losses for Different Detectors (d0, d1, d2, d3, d4)

d0.loss_cls: 0.0847  d0.loss_bbox: 0.1103  d0.loss_iou: 0.1460

这些是针对不同级别的检测器(d0 到 d4)计算的损失:

  • d0, d1, d2, d3, d4: 表示不同检测器(可能代表不同分辨率或不同尺度的预测头)。
  • 对每个检测器,损失包括分类损失、边框损失和 IoU 损失。

10. Encoder Losses (enc_loss_cls, enc_loss_bbox, enc_loss_iou)

enc_loss_cls: 0.1123  enc_loss_bbox: 0.1300  enc_loss_iou: 0.1698
  • enc_loss_cls: 编码器中的分类损失。
  • enc_loss_bbox: 编码器中的边框损失。
  • enc_loss_iou: 编码器中的 IoU 损失。

11. DN (Dynamic Network) Losses

dn_loss_cls: 0.0012  dn_loss_bbox: 0.1218  dn_loss_iou: 0.1251
  • dn_loss_cls, dn_loss_bbox, dn_loss_iou: 动态网络的损失,可能涉及模型处理的动态对象或自适应模块的损失。

12. DN Losses for Different Detectors (d0.dn_loss_cls, d1.dn_loss_cls, etc.)

d0.dn_loss_cls: 0.0132  d0.dn_loss_bbox: 0.1820  d0.dn_loss_iou: 0.1937
  • d0.dn_loss_cls, d0.dn_loss_bbox, d0.dn_loss_iou 等表示对于不同检测器(d0 到 d4)中的动态网络损失。它们在不同检测器中针对分类、边框和 IoU 进行的损失计算。

总结

  • 这些日志输出帮助我们追踪训练过程中的模型表现,包括学习率、损失、梯度、内存使用等。
  • 训练损失由多个部分组成,每个部分表示不同任务的损失,例如分类、边框回归和 IoU。
  • 如果损失变化较大,可能需要调整模型结构、学习率、数据预处理等因素。

如果你需要进一步优化训练或分析训练过程,可以使用这些信息来判断哪些方面的损失较大,从而调整模型或训练参数。

2. 模型在验证集上的评估结果

12/09 07:33:42 - mmengine - INFO - Epoch(val) [11][345/352]    eta: 0:00:01  time: 0.1365  data_time: 0.0019  memory: 3155
12/09 07:33:42 - mmengine - INFO - Epoch(val) [11][350/352]    eta: 0:00:00  time: 0.1361  data_time: 0.0019  memory: 3155
12/09 07:33:45 - mmengine - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.46s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=2.59s).
Accumulating evaluation results...
DONE (t=1.88s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.533
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.652
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.562
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.368
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.497
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.597
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.859
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.860
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.860
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.606
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.833
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.883
12/09 07:33:50 - mmengine - INFO - bbox_mAP_copypaste: 0.533 0.652 0.562 0.368 0.497 0.597
12/09 07:33:50 - mmengine - INFO - Epoch(val) [11][352/352]    coco/bbox_mAP: 0.5330  coco/bbox_mAP_50: 0.6520  coco/bbox_mAP_75: 0.5620  coco/bbox_mAP_s: 0.3680  coco/bbox_mAP_m: 0.4970  coco/bbox_mAP_l: 0.5970  data_time: 0.0057  time: 0.1436

这些内容显示了模型在验证集上的评估结果,基于 COCO 数据集的评估标准,以下是详细解析:


1. 评估流程

  1. Evaluating bbox

    • 表明模型正在验证集上评估目标检测的边界框(bounding box, bbox)性能。
  2. Loading and preparing results…

    • 模型生成的预测结果被加载并准备好进行评估。
  3. Running per image evaluation…

    • 针对验证集中每一张图片,计算各项指标,如平均精度(AP)和平均召回率(AR)。
  4. Evaluate annotation type bbox

    • 说明评估的是边界框任务。
  5. Accumulating evaluation results…

    • 将单张图片的评估结果汇总,以计算整体性能指标。

2. COCO评估标准

主要指标
  • AP (Average Precision)
    AP 是目标检测中的核心指标,表示模型在不同的阈值(IoU)下的平均精度:

    • AP @[ IoU=0.50:0.95 | area=all | maxDets=100 ]
      综合了多个 IoU 阈值(从 0.50 到 0.95,步长为 0.05),计算所有目标的平均精度。这是 COCO 的主要指标,当前值为 0.533
    • AP @[ IoU=0.50 | area=all | maxDets=1000 ]
      在 IoU=0.50 时计算 AP,当前值为 0.652,表示较宽松条件下的精度。
    • AP @[ IoU=0.75 | area=all | maxDets=1000 ]
      在 IoU=0.75 时计算 AP,当前值为 0.562,表示较严格条件下的精度。
  • AP by Area
    按物体大小划分 AP:

    • small(小目标,area < 32^2):当前值为 0.368。说明模型对小目标的检测效果较差。
    • medium(中等目标,32^2 ≤ area < 96^2):当前值为 0.497
    • large(大目标,area ≥ 96^2):当前值为 0.597。说明模型对大目标检测效果更好。
  • AR (Average Recall)
    AR 是衡量模型召回能力的指标,表示在不同的最大检测数(maxDets)下的平均召回率:

    • AR @[ IoU=0.50:0.95 | area=all | maxDets=100 ]: 当前值为 0.859
    • AR @[ IoU=0.50:0.95 | area=all | maxDets=300 ]maxDets=1000: 当前值为 0.860
    • 按物体大小划分的 AR:
      • small: 当前值为 0.606
      • medium: 当前值为 0.833
      • large: 当前值为 0.883

3. 关键评估结果分析

  • 模型整体表现

    • coco/bbox_mAP: 0.533 是综合指标,表示在多个 IoU 阈值下的平均性能。
    • 结合 AP 和 AR 指标,可以看到模型对大目标(large)的检测效果最佳(AP=0.597AR=0.883),对小目标(small)的检测效果较差(AP=0.368AR=0.606)。
  • 时间和资源消耗

    • 验证过程耗时较短(每次迭代的平均时间约为 0.1436s)。
    • 占用显存较少,内存仅 3155 MB
  • IoU 阈值的影响

    • 当 IoU 阈值提高到 0.75 时,AP=0.562,相较 IoU=0.50 的 0.652 略有下降,说明模型在更严格的定位条件下仍具有较强表现。

总结

  • 模型优点

    • 整体性能良好,综合 mAP=0.533,在 COCO 基准中属于中上游水平。
    • 对大目标的检测效果突出(AP=0.597AR=0.883)。
    • 资源消耗较低,验证时间快。
  • 模型不足

    • 小目标检测性能仍有待提高,AP_s=0.368 较低,可能需要优化特征提取器或多尺度检测头。
  • 改进方向

    • 提升小目标检测:考虑增加小目标增强(如分辨率调整、多尺度数据增强)。
    • 加强定位能力:通过优化边框回归损失(如 IoU 损失的调整)。
### DINO Model 特征提取与实现方式 DINO 是一种无监督自学习方法,它通过对比学习的方式,在视觉 Transformer (Vision Transformer, ViT) 上表现出色。它的核心目标是从未标注的数据中学习强大的表示能力,并能够在多种任务上超越传统的监督学习模型[^1]。 #### 核心原理 DINO 的名称来源于 **DIstillation NO labels**,即无需标签的知识蒸馏。该方法的核心思想是利用教师网络和学生网络之间的交互来优化表征学习过程。具体来说: - 教师网络是一个动态更新的指数移动平均版本的学生网络。 - 学生网络则通过对输入图像的不同视图进行预测,试图匹配由教师网络生成的概率分布。 - 这种概率分布在 softmax 温度调整下变得更加平滑,从而帮助模型更好地捕捉全局结构信息。 这种机制使得 DINO 能够有效地从大量未标记数据中提取出高质量的特征向量。 #### 对比学习的特点 尽管 DINO 并不完全属于传统意义上的对比学习框架(因为它不需要显式的正负样本对),但它仍然借鉴了一些对比学习的思想。例如,DINO 不依赖于复杂的技巧如负样本采样、动量编码器或者大批次大小训练,而是专注于简化架构并提升效率[^2]。 实验表明,在相同条件下与其他主流算法比较时,比如 SimSiam 和 MoCo v2,即使是在较短时间内的训练周期里,DINO 也展现出了更高的准确性以及更好的泛化能力。 #### 实现细节 以下是基于 PyTorch 的简单代码片段展示如何初始化一个基本版的 DINO 架构用于特征提取: ```python import torch.nn as nn from torchvision.models import vit_b_16 class DINOWrapper(nn.Module): def __init__(self, backbone=vit_b_16(pretrained=False), embed_dim=768): super(DINOWrapper, self).__init__() self.backbone = backbone self.projection_head = nn.Sequential( nn.Linear(embed_dim, embed_dim), nn.GELU(), nn.Linear(embed_dim, embed_dim) ) def forward(self, x): features = self.backbone(x).last_hidden_state[:, 0, :] # CLS token output from ViT projected_features = self.projection_head(features) return projected_features model = DINOWrapper() print(model) ``` 上述代码定义了一个简单的 DINO 模型封装类 `DINOWrapper` ,其中包含了骨干网络(这里选用的是 Vision Transformer)及其投影头部分。此设置允许我们轻松获取图片经过处理后的特征嵌入[^3]。 #### 应用场景 除了单独作为预训练工具外,DINO 所学到的良好特性还可以被迁移到其他领域当中去解决实际问题。例如,在构建 AI 图像相似性搜索引擎过程中,可以采用预先训练好的 DINO-V2 来完成特征抽取操作后再配合 FAISS 完成高效检索任务。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值