参考资料以及比赛分析

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

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

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

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

基本流程:

开发套件的使用:

主配置入口

 

定义数据预处理方式

这段代码是PaddleDetection中的训练数据读取器TrainReader的配置,用于对训练数据进行读取和增强。

其中,TrainReader使用了两个类型的数据增强方法:sample_transforms和batch_transforms。

sample_transforms表示对单个样本进行增强,包括以下几种方法:

  • Decode:解码图像。
  • RandomDistort:对图像进行颜色扰动(亮度、对比度、饱和度、色调),增加数据的多样性。
  • RandomExpand:在图像周围添加一些填充区域,扩大图像尺寸,增加数据的多样性。fill_value表示填充的像素值。
  • RandomCrop:随机裁剪图像,增加数据的多样性。
  • RandomFlip:随机翻转图像,增加数据的多样性。

batch_transforms表示对一个batch中的所有样本进行增强,包括以下几种方法:

  • BatchRandomResize:对一个batch中的所有图像进行随机调整大小,增加数据的多样性。target_size表示调整大小的目标尺寸列表,random_size表示是否随机选择目标尺寸,random_interp表示是否随机选择插值方式,keep_ratio表示是否保持图像长宽比不变。
  • NormalizeImage:对图像进行标准化,即将像素值减去均值并除以标准差,使得像素值具有零均值和单位方差。
  • Permute:将图像的维度从[H, W, C]转换为[C, H, W],使得图像可以被卷积层处理。
  • PadGT:对标注框进行填充,使得每个batch中的所有图像都具有相同的标注框数量,方便计算损失函数。

此外,这个配置中还包括一些基本的参数设置,如batch_size、shuffle、drop_last、use_shared_memory和collate_batch等,用于指定每个batch的大小、是否打乱数据、是否丢弃不足一个batch的数据、是否使用共享内存和是否在读取时将样本打包成一个batch。

数据增强中的{}表示在该操作中没有额外的参数需要设置,即使用默认的参数。如果需要修改该操作的参数,可以在{}中填写对应的参数。

 

在上述配置中,TrainReader 和 EvalReader 都定义了 batch_size 参数,它们分别用于训练和评估过程中的数据批次。这两个参数可以根据实际情况进行调整,通常情况下,训练过程中会选择相对较大的 batch_size,以充分利用 GPU 的并行计算能力,提高模型训练的效率和稳定性;而在评估过程中,通常会选择相对较小的 batch_size,以避免因为 GPU 计算资源限制而导致评估速度过慢或者内存溢出等问题。

另外,TestReader 中的 batch_size 参数设置为 1,这是因为测试过程中通常会将每张图片单独输入到模型中进行预测,因此只需要设置 batch_size 为 1 即可。

 

定义运行状态

 

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

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

引用关系

思路:通过改写某个必定会用到的配置文件名称,使得模型训练时报错,根据报错的回溯信息,从而知道配置与文件之间的关系

下面是改写iou后的报错

 

增添内容:语义分割

解析这段代码:/home/aistudio/PaddleSeg/configs/_base_/cityscapes.yml

复制代码
batch_size: 2
iters: 80000

train_dataset:
  type: Cityscapes
  dataset_root: data/cityscapes
  transforms:
    - type: ResizeStepScaling
      min_scale_factor: 0.5
      max_scale_factor: 2.0
      scale_step_size: 0.25
    - type: RandomPaddingCrop
      crop_size: [1024, 512]
    - type: RandomHorizontalFlip
    - type: RandomDistort
      brightness_range: 0.4
      contrast_range: 0.4
      saturation_range: 0.4
    - type: Normalize
  mode: train

val_dataset:
  type: Cityscapes
  dataset_root: data/cityscapes
  transforms:
    - type: Normalize
  mode: val


optimizer:
  type: sgd
  momentum: 0.9
  weight_decay: 4.0e-5

lr_scheduler:
  type: PolynomialDecay
  learning_rate: 0.01
  end_lr: 0
  power: 0.9

loss:
  types:
    - type: CrossEntropyLoss
  coef: [1]
复制代码

这段代码是一个针对城市街景分割数据集Cityscapes的训练配置文件,包括了以下内容:

  • batch_size:每个batch的样本数为2。
  • iters:总共迭代80000次。
  • train_dataset:训练数据集的配置,使用了Cityscapes数据集,包括了一系列的数据增强操作,如尺度变换、随机裁剪、随机水平翻转、随机亮度、对比度和饱和度扭曲,以及数据归一化等。
  • val_dataset:验证数据集的配置,同样使用了Cityscapes数据集,只进行了数据归一化操作。
  • optimizer:优化器的配置,使用了随机梯度下降(SGD)优化器,设置了动量为0.9,权重衰减为4.0e-5。
  • lr_scheduler:学习率的调度器配置,使用了多项式衰减的学习率策略,初始学习率为0.01,最终学习率为0,衰减指数为0.9。
  • loss:损失函数的配置,这里使用了交叉熵损失函数。

 

posted @   yonuyeung  阅读(119)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示