参考资料以及比赛分析
目标检测综述:(199条消息) 目标检测(Object Detection)_图像算法AI的博客-CSDN博客
目标检测涨点方法:目标框加权融合-Weighted Boxes Fusion(源码分享) (qq.com)
图像分割涨点技巧!从39个Kaggle竞赛中总结出的分割Tips和Tricks - 知乎 (zhihu.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 轮
定义数据路径和格式
比赛分析:
比赛包含两个任务,图像检测和语义分割,两个任务其实是分开的,对于语义分割,不涉及图像检测,只做好分割的部分就行了,最后打榜的分数也是单独计算然后合起来的
对于目标检测的难点分析(难点也是突破点):
难点主要集中在数据集上:
- 标签质量参差不齐,个别图像中的标注框过大(测评数据中心也存在这类数据)——怎么改善?我的思路:①直接手动修改标签?②对相关部分的代码进行调整,使得在数据质量差的情况下也能训练出一个好的模型
- 标注数据不平衡,少数图像中会将任务用“person”这一类别标注出来,而大部分图像没有将人物标注出来,导致模型很难收敛还有一些干扰的图片,人物站在水面上,它的倒影也被标注了。
我的思路:可以尝试不把特殊图片的人物算进去 - 遮挡、目标尺寸不一,各类别数量差异较大等
对于语义分割的难点分析:
各类别数量差异较大,背景占的面积较多。但是此次比赛该现象不是特别严重
对检测数据集:检测数据集涉及3个场景,分别是“火灾检测”、“工业仪表检测”和“安全帽检测”
对其标签进行统计分析出来以下结果
fire: 2683 //火灾 head: 4487 //安全帽 helmet: 15141 //头盔 person: 676 //人 meter: 66 //仪表
对其进行高宽比分析
对对比度和亮度的分析:对比度集中在0-500之间,亮度很散
其他需要注意的点:
- 两个模型加起来不能超过400M,注意是加起来,而不是分开算。平台的评估中,目标检测占9分,语义分割占1分。也就是说,我们要更偏向于目标检测,用一些更大的模型,不一定局限于yoloe
- 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:损失函数的配置,这里使用了交叉熵损失函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App