参考资料以及比赛分析

发布时间 2023-04-20 17:02:41作者: yonuyeung

目标检测综述:(199条消息) 目标检测(Object Detection)_图像算法AI的博客-CSDN博客

目标检测涨点方法:目标框加权融合-Weighted Boxes Fusion(源码分享) (qq.com)

图像分割涨点技巧!从39个Kaggle竞赛中总结出的分割Tips和Tricks - 知乎 (zhihu.com)

涨点技巧!小目标检测:数据增广 (qq.com)

基本流程:

开发套件的使用:

主配置入口

 

定义数据预处理方式

如果要进行数据预处理,应该修改 TrainReaderEvalReaderTestReader 中的 sample_transformsbatch_transforms 部分的代码,这些部分包含了对输入数据进行预处理的具体实现。其中,sample_transforms 是对单个数据样本进行预处理,如解码、随机裁剪、随机翻转等;batch_transforms 是在组成小批量数据前,对经过 sample_transforms 处理过的数据进行进一步的变换,如归一化、通道维度的变换等。根据具体需求,你可以选择添加、删除、修改这些预处理操作。

 

 

定义运行状态

 

定义模型和骨干网络的情况

1.这是一个训练神经网络模型的配置文件,包含了模型训练的超参数设置。

  • epoch: 80 表示模型训练的总共轮数为 80。
  • LearningRate: 表示学习率的设置。
    • base_lr: 0.001 表示模型初始的学习率为 0.001。
    • schedulers: 表示学习率调度器的设置,包括 CosineDecay 和 LinearWarmup 两个调度器。
      • !CosineDecay 表示使用 Cosine 学习率调度器,max_epochs: 96 表示在训练的前 96 轮使用 Cosine 学习率调度器。
      • !LinearWarmup 表示使用线性学习率预热调度器,start_factor: 0. 表示预热时的学习率为 0,epochs: 5 表示预热的轮数为 5 轮。
  • OptimizerBuilder: 表示优化器的设置。
    • optimizer: 表示使用 Momentum 优化器,其中 momentum: 0.9 表示动量因子为 0.9。
    • regularizer: 表示使用 L2 正则化,其中 factor: 0.0005 表示正则化系数为 0.0005。

 

2.这是一个目标检测模型的配置文件,使用的是 YOLOv3 架构,包括以下部分:

  • norm_type: sync_bn 表示使用同步批量归一化(SyncBN)进行参数归一化。
  • use_ema: true 和 ema_decay: 0.9998 表示使用指数滑动平均(Exponential Moving Average,EMA)对模型权重进行平均,其中 ema_decay 表示 EMA 的衰减率。
  • ema_black_list: ['proj_conv.weight'] 表示不对 proj_conv.weight 参数进行 EMA 平均。
  • custom_black_list: ['reduce_mean'] 表示自定义不需要进行 EMA 平均的参数。

然后是模型各组件的具体配置:

  • YOLOv3: 包含了模型的主干网络、neck 和 head 部分,其中

    • backbone: CSPResNet 表示使用 CSPResNet 作为主干网络。
    • neck: CustomCSPPAN 表示使用自定义的 CSPPAN 作为 neck 部分。
    • yolo_head: PPYOLOEHead 表示使用自定义的 PPYOLOEHead 作为 head 部分。
    • post_process: ~ 表示后处理部分为空。
  • CSPResNet: 包含了 CSPResNet 的具体配置,包括

    • layers: [3, 6, 6, 3] 表示 CSPResNet 的各个阶段的层数。
    • channels: [64, 128, 256, 512, 1024] 表示 CSPResNet 各个阶段的通道数。
    • return_idx: [1, 2, 3] 表示 CSPResNet 返回的 feature map 的索引。
    • use_large_stem: True 表示 CSPResNet 使用较大的卷积核作为第一个卷积层。
    • use_alpha: True 表示 CSPResNet 使用 Alpha 激活函数。
  • CustomCSPPAN: 包含了自定义的 CSPPAN 的具体配置,包括

    • out_channels: [768, 384, 192] 表示 CSPPAN 输出的各个 feature map 的通道数。
    • stage_num: 1 表示 CSPPAN 的阶段数。
    • block_num: 3 表示 CSPPAN 中每个阶段的 block 数量。
    • act: 'swish' 表示激活函数使用 swish。
    • spp: true 表示使用空间金字塔池化(Spatial Pyramid Pooling,SPP)模块。
  • PPYOLOEHead: 包含了自定义的 PPYOLOEHead 的具体配置,包括

    • fpn_strides: [32, 16, 8] 表示 feature map 的步幅。
    • grid_cell_scale: 5.0 表示 anchor box 的大小缩放因子。
    • grid_cell_offset: 0.5 表示 anchor box 的偏移量。
    • static_assigner_epoch: 30 表示在训练的前 30 轮

 

 

 

定义数据路径和格式

 

 

比赛分析:

比赛包含两个任务,图像检测和语义分割,两个任务其实是分开的,对于语义分割,不涉及图像检测,只做好分割的部分就行了,最后打榜的分数也是单独计算然后合起来的

对于目标检测的难点分析(难点也是突破点):

难点主要集中在数据集上:

  1. 标签质量参差不齐,个别图像中的标注框过大(测评数据中心也存在这类数据)——怎么改善?我的思路:①直接手动修改标签?②对相关部分的代码进行调整,使得在数据质量差的情况下也能训练出一个好的模型
  2. 标注数据不平衡,少数图像中会将任务用“person”这一类别标注出来,而大部分图像没有将人物标注出来,导致模型很难收敛还有一些干扰的图片,人物站在水面上,它的倒影也被标注了。
    我的思路:可以尝试不把特殊图片的人物算进去
  3. 遮挡、目标尺寸不一,各类别数量差异较大等

对于语义分割的难点分析:

各类别数量差异较大,背景占的面积较多。但是此次比赛该现象不是特别严重

对检测数据集:检测数据集涉及3个场景,分别是“火灾检测”、“工业仪表检测”和“安全帽检测”
对其标签进行统计分析出来以下结果

fire: 2683  //火灾
head: 4487  //安全帽
helmet: 15141  //头盔
person: 676  //人
meter: 66   //仪表

对其进行高宽比分析

对对比度和亮度的分析:对比度集中在0-500之间,亮度很散

 

 

 其他需要注意的点:

  1. 两个模型加起来不能超过400M,注意是加起来,而不是分开算。平台的评估中,目标检测占9分,语义分割占1分。也就是说,我们要更偏向于目标检测,用一些更大的模型,不一定局限于yoloe
  2. FPS计算方法:(模型1的FPS+模型2的FPS)/ 2