目标检测-识别提升方法记录

目标检测提升方法记录

1. 添加预训练(imagenet/coco),增强模型泛化能力,缓解过拟合,减少误检很有用),无副作用。(实验证明,如果有强数据增强,训练数据集又比较多,可以用上次的最优模型作为预训练,能取得更好的效果) (有条件的话可以用大数据做预训练模型例如obj365,实验表明会有明显的提升)

2. 添加纯负样本(检测base模型,检测分数大于0.05的误检),加入训练,有效减少误检 , 副作用是只添加纯负样本map可能会少许降低。(改进1:在纯负样本里面copy-paste贴图,增加目标,或者是选择带目标的误检图更好)(改进2:在贴图时先用模型检测纯负样本,贴图尽量避开纯负样本检测的误检框, 或者是输出最后一层Objectness头的featuremap热力图,避开热力图较高的位置)(改进3:针对纯负样本较多的情况,在强数据增强关闭以后Mixup,可以针对性的挑选难的负样本进行参与训练,不用全量负样本,这样会有较好的效果,例如选择阈值大于0.01的负样本参与训练)(改进3:针对负样本较多的情况,实验证明,增加预训练,提升batch_size 也会有一定的改进作用

3.搜索特定类别的误检样本作为纯负样本,同时也可基于常出现的误检增加一个检测类别来减少该类别的误检(部署时可以考虑去除该类别),带来的副作用是定位误差,重复检测误差变大,map可能会降低。

4.增加小目标的训练过滤ignore (训练时涂黑面积小于一定值的目标)可以有效提高大目标的检测精度,副作用是小目标精度会受到影响。(如部署时也增加小目标过滤,则无此影响)

5. Mosaic、RandomAffine 尽量减少对目标的截断,减少一些边缘padding,可以有效提升map精度。

6. Mixup 在训练后期必须提前关闭,否则会引起负样本的误检。(训练过程中纯负样本和正样本很容易mixup到一起,导致负样本对应得激活变高, 最后迭代关闭mixup可以很好解决这个问题。

7. mixup的好处是当纯负样本较多时,很多纯负样本会被mixup成正样本,所以增加纯负样本不会降低模型前期训练的精度,但是后期关闭mixup以后,较多的纯负样本可能导致越往后训练模型精度变差,漏检增多,所以对于纯负样本尽量还是增加一些copypaste的手段。(改进手段:1. 弱数据增强时采用难样本挖掘策略挑选纯负样本,适当延长epoch; 2. 增加预训练,提升batch_size,适当延长epoch

7.场景下得同类目标容易引起误检,比如做人形检测,跟人相关得目标,沙发、宠物、交通工具等跟人交互较多得目标很容易被误检,针对这种样本要针对性增加作为负样本来减少误检。通过对训练集目标涂黑,检测时如果仍能检测到目标就作为负样本也能显著提升误检。

8. 增大训练数据集得数量一般可以显著提升模型得map及精度PR指标。

9. 采用RELU6可以有效得减少部署量化难度,提升部署量化模型得精度。

10.HSV色彩变化强度增大可以有效提升色彩变化大得样本精度,在特定色彩测试集上面得精度表现可能有少许降低。

11.  yolox 正负样本分配策略, center_radius改小 会降低大尺度目标得检测精度,提高小目标检测精度(可能)。

12. 不同的模型对0.01阈值得敏感度不一样,所以有些模型得map看着比其他模型高,但是PR确没有明显变化。

13.对检测头蒸馏(KD-LD)一般效果会略好于对特征层蒸馏(FGD)

14.Focal Loss一般会提升目标得检测率,但是有可能也会带来难样本得误检,导致检测得数量远远大于gt的数量。

15.打伪标签,可以在测试时增加多尺度图像测试(TTA)提升伪标签精度,同时通过验证集上选择Fscore最大值对应的阈值作为伪标签的阈值。

16.训练中如果有强数据增强,通过延长epoch (1200)可以一定程度的提高模型精度。

17.通过TIDE工具分析各种异常出现的原因,做具体分析;

18. 采用带分割标签的数据增强算法,分割的标签 经过RandomAffine后比较明确检测目标得变化,可以减少人形框经过RandomAffine后出界或者旋转变得不准得问题。(SEA分割模型对训练集数据做分割,尽量把带box的目标分割出来)

19.应用策略:如果部署时不考虑框的准确性,只考虑有没有目标(类似分类),部署时减小输入分辨率,只对objectness分支的feature做判断,可以有效降低运行速度(训练还是原来的图像大小);

20.mask辅助标签分配,通过保证标签分配的正样本在mask上面;

21.模型是否好量化,同样精度的条件下(加数据训练 > 正常训练 > finetune训练)

人脸识别

1. 数据增强,训练初期强度大采用:[RandomHorizontalFlip、RandomAffine, MotionBlur ResizeBlurCompressJPEG, AddGaussianNose,AddSaltPepperNoise,GaussianBlur,GaussianBlur,ColorJitter,RandomAdjustSharpness,RandomGrayscale,RandomEqualize,RandomPosterize, RandomErase]

训练后期强度小采用:[RandomHorizontalFlip,RandomAffine, MotionBlur ResizeBlurCompressJPEG, RandomGrayscale,ColorJitter, RandomErase]

2. 人脸对齐, 采用相似变换,将待矫正人脸的关键点 映射到 平均关键点上。得到映射矩阵以后【缩放、平移、旋转】可以求逆,反向根据目标点求原点对应得坐标 然后取坐标对应得像素作为目标像素(加速)。 对于戴口罩人脸可以采用三点对齐。

3. 循环训练,换loss函数finetune, 以上次的结果作为预训练;

4. RandomMask 人脸区域,Mask占比:口罩占整个脸的面积不能太大, Mask概率:25%-30%,也可以提前提取关键点label,训练中做Mask贴图;

5.模型蒸馏:在 embedding层做相似度保持co's特征尽量一致

6.量化技巧:PTQ -> 继续训练 ->PTQ;

7.质量判断网络: 特征匹配网络同一个人的相似度越低角度可能越大,做gt 训练质量模型。

8.数据增强较重要的:人脸对齐、RandomFlip,RandomErase

9. 人脸匹配加速,

        1.分级匹配,提取前面一部分特征先找到候选目标(根据阈值做过滤),再对候选特征进行全特征匹配,做精细确认。

        2. int8量化,特征速度提升四倍

        3. sse加速

10. 特定人员给特定阈值,让不同人有不同阈值,提高适应性;

11.生成rec文件:python -m mxnet.tools.im2rec --num-thread 2 --quality 100 train /a/b/c_images /a/b/d_result $ ls -ltr

你可能感兴趣的:(目标检测,人工智能,深度学习)