- 工作里面遇到的项目问题很多,总结大概就是不平衡分类问题和小样本检测问题。
- 不平衡分类问题的解决办法,大概是几个方面
- 数据增强方面
- 将数目多的样本进行聚类,找到比较有代表性的几个样本,去跟数目少的样本进行建模。
- 扩充不平衡样本数量,比如上采样,聚类生成数据。
- 分析原始数据性质,确定数据需不需要分类。
- 变量选取方面
- 用集成模型的办法,选取对目标纯度提升比较大的几个变量去建模。
- 模型建模方面
- 对数目少的样本,在进行损失计算的时候,给他们更大的权重。
- 数据增强方面
- 小样本检测问题
- 数据角度
- 随机裁剪:通过裁剪图像,使小目标在裁剪后的图像中占据更大比例。
- 缩放:放大图像,使小目标更易检测。
- 旋转和翻转:增加数据多样性,提升模型泛化能力。
- 使用高分辨率的图片。
- 模型角度
- 如果不在乎模型速度,建议采用fasterrcnn这样的两阶段检测方法,比较容易能够获得高精度。
- 如果希望能够获得速度和精度的结合,可以采用yolo,unet类的单阶段检测办法。
- unet本质是一种先抽象再生成的模型,和强化学习、以及扩散模型在本质上有相似性。
- unet的结构是把图片首先进行卷积,卷积到一个很小的高层特征图上。
- 然后让这个特征图再上采样,扩散到一个大图上,然后输出一个检测头,去做我们想要的分割/目标检测任务。
- YOLO在UNET的基础上进行的改进就是在80*80,40*40,20*20的输出图上,都分别放了一个检测头,来适应不同尺度的目标。
- 通常来说,对于一个小目标物体,有的小目标物体是通过自身纹理来识别的,比如人体。 有的小目标物体是通过上下文来识别的,比如说人脸。所以你如果想提高目标检测的效果,就要先明确好你的目标的性质。如果是需要上下文的,就采用比较高层的特征图,因为高层特征图感受野大。如果是需要自身纹理的,就采用底层特征图,底层特征图感受野小。如果底层还不行,那么就采用更更底层的特征图去输出辨别。如果遇到需要上下文和自身纹理结合的,我自己采用过将底层和高层直接结合在一起,然后transformer的办法,效果一般。
- unet本质是一种先抽象再生成的模型,和强化学习、以及扩散模型在本质上有相似性。
- 数据角度