PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.83k stars 2.89k forks source link

关于多模型投票nms结果的问题 #9184

Closed zouhan6806504 closed 1 month ago

zouhan6806504 commented 1 month ago

问题确认 Search before asking

请提出你的问题 Please ask your question

因为数据量大,存储空间以及训练时间的限制,没办法把数据在一个epoch内全部过一次,所以采用了分批数据训练,最后由各个模型产出检测结果后再进行nms融合的方案。但是融合之后指标大幅下降。按理说指标就算不提升也不应该降低太多。这个是为什么?数据是随机打乱后分批的,应该不太存在个个批次数据之间分布过于差异的问题。

我用的架构是DETR,是否应该在RTDETRTransformer的num_queries之前进各个模型的特征平均?而不是各个模型DETRPostProcess之后的结果再nms?

RTDETRTransformer:
  num_queries: 300
  position_embed_type: sine
  backbone_feat_channels: [192, 384, 768, 1536]
  feat_strides: [4, 8, 16, 32]
  num_levels: 4
  nhead: 8
  num_decoder_layers: 6
  dim_feedforward: 2048 #
  dropout: 0.0
  activation: relu
  num_denoising: 100
  label_noise_ratio: 0.5
  box_noise_scale: 1.0
  learnt_init_query: False

DINOHead:
  loss:
    name: DINOLoss
    loss_coeff: {class: 1, bbox: 5, giou: 2}
    aux_loss: True
    use_vfl: True
    matcher:
      name: HungarianMatcher
      matcher_coeff: {class: 2, bbox: 5, giou: 2}

DETRPostProcess:
  num_top_queries: 300
liuhongen1234567 commented 1 month ago

您好,可以把阈值设成0.5筛一下低质量的边界框。然后在用nms融合看看。

zouhan6806504 commented 1 month ago

您好,可以把阈值设成0.5筛一下低质量的边界框。然后在用nms融合看看。

已经用0.5筛选过了,单独的模型和融合的模型都是0.5的阈值

liuhongen1234567 commented 1 month ago

您可以可视化一下融合前后的边界框看看,一般来说融合前后的指标不会大幅下降的

zouhan6806504 commented 1 month ago

您可以可视化一下融合前后的边界框看看,一般来说融合前后的指标不会大幅下降的

感觉有可能是图片大小不一致的问题,norm参数选的是false。换了ensemble_boxes用weighted_boxes_fusion倒是成功了