尽量平衡硬件成本和性能。因此,如何在保持高检测精度的前提下,尽量提高检测速度、减小模型体积,成为这项技术真正深入工业实际应用的关键。
而目标检测的王牌家族——YOLO系列模型,作为单阶段目标检测算法的代表之一,一经出世,便以快速精准的检测效果而迅速蹿红。其不仅在速度上做到真正实时,精度上也可以达到很多非实时两阶段模型才有的水平。
尽量不增加模型计算量和推理开销为前提,它们大量整合了计算机视觉的state-of-the-art技巧,探索出了一整套更深度的算法优化秘籍,例如在数据增强、锚定框、骨架网络、训练方式等维度进行优化,从而达到大幅提升YOLO目标检测性能的效果。
PP-YOLO所应用的这套优化策略,也可以被尝试应用到该系列的其它模型上,产业开发者或者科研人员可借鉴这套优化算法展开进一步的探索。当然,我不只是写PP-YOLO的优化方法,也会拓展其他的方法,只是以PP-YOLO为线展开阐述优化的策略。
PP-YOLO
YOLOv3精度速度优化
精度优化
训练速度优化
推理速度优化
数据增强
Image Mixup: 以随机权重将两张图片混合起来,提高网络在空间上的抗干扰能力。以下图为例,将任意两张图片加权叠加作为输入,训练过程中使用的损失为两张图片的损失乘以各自权重的加和。
AutoAugment:使用强化学习的方式训练,预先定义好图像增强的方法池,然后自动在这个方法池选择一个合适的方法。
Image Mosaic: 图像镶嵌的方法,将四张图片以田字格的方式镶嵌在一起。即每次读取四张图片,分别对四张图片进行翻转、缩放、色域变化等,并且按照四个方向位置摆好,进行图片的组合和框的组合。yolov4用到了这个方法,pp-yolo没有用到。优点是丰富检测物体的背景!且在BN计算的时候一下子会计算四张图片的数据!
但在整体的数据集中,小、中、大目标的占比并不均衡。
如上表所示,Coco数据集中小目标占比达到41.4%,数量比中目标和大目标都要多。
但在所有的训练集图片中,只有52.3%的图片有小目标,而中目标和大目标的分布相对来说更加均匀一些。
针对这种状况,Yolov4的作者采用了Mosaic数据增强的方式。
主要有几个优点:
a. 丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
b. 减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU。
因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。
此外,发现另一研究者的训练方式也值得借鉴,采用的数据增强和Mosaic比较类似,也是使用4张图片(不是随机分布),但训练计算loss时,采用“缺啥补啥”的思路:
如果上一个iteration中,小物体产生的loss不足(比如小于某一个阈值),则下一个iteration就用拼接图;否则就用正常图片训练,也很有意思。
Mosaic数据增强
Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。
这里首先要了解为什么要进行Mosaic数据增强呢?
在平时项目训练时,小目标的AP一般比中目标和大目标低很多。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀。
Random Erasing: 随机擦除数据增强技术是在训练中,随机擦除随机选择图像中的一个矩形区域,并用随机值擦除其像素。效果如下图所示,从随机擦除的效果图上可以看出,该数据增强方式的提出主要针对遮挡问题。通过随机擦除目标的特征模拟遮挡的效果,提高模型的泛化能力,使模型在训练过程中仅通过局部特征对目标进行识别,强化模型对于目标局部特征的认知,弱化模型对于目标全部特征的依赖。模型通过这样的数据进行训练,将会对噪声和遮挡更具鲁棒性。
配置
数据采样/正负样本采样
OHEM:在线的难样本增强,比如遮挡,缺失等这些样本调整他们的权重。
Class aware Sampling: 冠军解决方案中使用到的一个方法,在一个训练集中,实际上每个类别数据并不一定是均衡的,有可能还有很大的差距,它通过统计这个样本的出现的类别的概率,来调整这个样本的权重,实现一个样本的采样方法。
网络结构:
学习策略
调整loss权重:分类,回归,obj,适当调整loss权重
Grid sensitive:学习网络中心点偏移的方法
数据增强是在CPU上做的。
3.1 Image Mixup(图像混合)
图像分类的一个方法,可以模型抗空间扰动的能力。
以随机权重将两张图片重叠起来混合成一张;比如下图的羊,对于STOP来说就是一个空间扰动,相反的,STOP相对于羊来说,也是一个空间扰动;他们之间互为空间扰动,在网络同时学习这两张图像,那么就能提升网络对空间扰乱的抗干扰能力。其过程就是将任意两张图片加权叠加作为输入,训练过程中使用的损失为两张图片的损失乘以各自权重的加和。
yolo模型的思想是使用了一个“锚框海”战术,也就是很多锚框,但是真实框比较少,导致正例很少,负例很多,也就是样本倾斜的问题,那么一定程度上将两张图片叠加在一起,那么真实框就多了些,只是会加上一个权重。由原来的一个、两个真实框变成了三个真实框。一定程度就提升了正样本的比例,实际上有利于提升yolo的召回率的。
优点:
1)提高网络对空间扰动的泛化那能力;
2)一定程度上增大了正样本的比例,提高了召回率。
计算方式:
效果:
COVO数据集精度提升~=1
只需要在预处理上添加IMixup Image(P可以一键式实现)
3.2 Random Erasing
随机擦除数据增强技术是在训练中,随机擦除随机选择图像中的一个矩形区域,并用随机值擦除其像素。效果如下图所示,从随机擦除的效果图上可以看出,该数据增强方式的提出主要针对遮挡问题。通过随机擦除目标的特征模拟遮挡的效果,提高模型的泛化能力,使模型在训练过程中仅通过局部特征对目标进行识别,强化模型对于目标局部特征的认知,弱化模型对于目标全部特征的依赖。模型通过这样的数据进行训练,将会对噪声和遮挡更具鲁棒性。
Random erasing 算法流程如下,主要包含两个部分:
区域大小的随机;
位置的随机。
主要流程如下:
由于random erasing的应用具有图像分类和目标检测两种不同的场景,二者的区别在于是否知道目标所在的位置。对于这两种情形:
具体如下图左图所示。
将Random Erasing与Random Croping结合,在随机剪切的图像上添加随机擦除,如下图右图所示。
3.3 Cutout
Cutout与random earsing的出发点是一致的,都是针对机器视觉中存在的目标遮挡问题。通过对训练数据模拟遮挡,一方面能解决现实中遮挡的问题,另一方面也能让模型更好的学习利用上下文的信息。
两种Cutout的设计理念:
骨干网络可以说是一个模型的基础,一个优秀的骨干网络会给模型的性能带来极大的提升。
1. ResNet-D
ResNet50vd-DCN 作为模型的骨干网络。它可以被分为ResNet50vd和DCN两部分来看。
优化点:
ResNet50提出后,对他提出了B C D三种改进,这些改进结构,主要改进的是:ResNet50有五个阶段,每个阶段都会做一个倍数为2的降采样,这样采样主要是通过上图右边的方式实现的。stride=2降采样。1x1卷积,步长为2,所以就取到第一个,第三个,…的格子,实际上,每四个格子就之只取到一个格子,就丢失了3/4信息。ResNet-D 包含全量的信息。最新的ResNet-D结构能在基本不增加计算量的情况下先住提高模型精度。右边avgPool。
支持ABCD四种版本。
效果:
ResNet50不用DCN精度会下降吗?
ResNet50在各个阶段用DCN做了大量实验,在第五阶段加入DCN,精度有提高,这个预测速度不会下降太大。如果要是把DCN减掉的话,DCN有1~2个点的提升。
2. DCN(Deformable Conv)
可变性卷积。我们大家在学习卷积的时候,普遍是学习这个卷积核的权重,而卷积核是固定好的,比如说1x1,3x3等的方块,也就是说我们固定了是一个方块,那么这些方块真的适用于检测所有的目标呢?或者说,我们能不能在学习这些卷积核的权重的时候,能不能同时学习它的形状呢?这就是可变性卷积提出的思路。
怎么做的呢?
它通过额外学习一个offset,学习这个卷积的偏移,也就是说从原来第一个绿色框偏移到它左边的蓝色框,它不采集原来这样一个点;另外呢,它v2版本里还采用了一个mask,比如说不算第一个绿色框左边的蓝色框的点,而算它上面的一个蓝色点,通过这个方式,在网络的过程中,不仅能学习这个卷积核的权重,还能学习这个卷积核的形状,或者我到底能学习哪个值,比如下图,即学习到了羊的权重还学习到了这个羊的形状,那么就没有人比这个卷积更懂什么是羊。
优化点:
优化方法:
小结DCN的特点:其卷积核在每一个元素上额外增加了一个可学习的偏移参数。这样的卷积核在学习过程中可以调整卷积的感受野,从而能够更好的提取图像特征,以达到提升目标检测精度的目的。但它会在一定程度上引入额外的计算开销。经过多翻尝试,发现只在ResNet的最后一个stage(C5)增加可变形卷积,是实现引入极少计算量并提升模型精度的最佳策略。
FPS不是由DCN提升的,是ResNet50改为使用ResNet50vd结构作为骨干网络提升的,加入DCN小幅的下降了FPS,但是还是比原来的大。
这就是网络结构上的优化。
进一步,我们使用了更大BS,stride.
3. DropBlock
注意防止过拟合。dropout的一种变种。
常用的减少过拟合,提升网络泛化能力的一种方法。
对于一个目标检测的任务来说,学习这个目标检测,比如学习下面的这只狗,实际上它学习的是狗右边蓝色的连通域,它检测就是检测这个连通域里的这个东西。那么中间零散的点的丢弃就没有这种特征块一块一块点的丢弃更适用于这周目标检测的任务。怎么理解呢?实际上,这是一个尺度的问题,也就是说这种点级别的丢弃会怎么呢?比如两只小狗,一直没有耳朵,一只没有尾巴,真奇怪,模型可能就不认识,但是要是一丢,就丢掉了这只狗,那么模型无非就是检测出来还是检测不出来的问题,可能就能让模型学习到一个更好的效果,这就是DropBlock的这个概念。
换言之:相比于Dropout算法,DropBlock算法在Drop特征的时候不是以特征点的形式来Drop的,而是会集中Drop掉某一块区域,从而更适合被应用到目标检测任务中来提高网络的泛化能力。
优化点:
- Dropout是深度学习中常用的减少过拟合,提高网络泛化能力的常用方法,是否适用于检测?
- DropBlock每次drop掉一块区域而非零散的点,更适用于“检测连通域”的目标检测任务。
计算方法:
以随机drop块的方式代替随机Drop离散的点。
4. Grid Sensitive
实际上,yolov4引入的一个方法。即在计算预测框中心点在网格内的坐标时,对输出logit取sigmoid激活后,再加上一个缩放和偏移,可以保证预测框中心点能够有效的拟合真实框刚好落在网格边线上的情况。
YOLOv3的检测原理是将图片划分成多个网格,真实框的中心点落在哪个网格上就由哪个网格负责检测这个真实框,而推理输出特征图中包含预测框中心坐标的logits值,这个值经Sigmoid激活后,即表示预测框中心坐标在网格中的相对位置。如下图所示,预测框的Px和Py经Sigmoid激活后,即表示预测框中心坐标相对真实框中心坐标gx和gy的偏移。
要是这个真实框的中心点刚好落在网格边缘,换言之,你的偏移量是向0或者1去学,那么对于使用sigmoid激活的输出特征图来说,它就要向正无穷和负无穷去学(训练过程中趋向于把输出logit值向正负无穷去学习)。这样的话,就会引入一个模型的过拟合。那么yolov4就引入了一个Grid Sensitive。它是干嘛呢?它就是说,我不直接算偏移量,而是在这个偏移量上乘一个系数,你可以理解为,它实际偏移要比这个网络要大一点,那么你这个网络里面就不是0和1,就是一个大于0小于1的值。PP-YOLO选的1.05。只是增加了一个S的运算,它的预测速度基本没有影响,精度有所提升(0.3)。
换言之,Grid Sensitive:在计算预测框中心点在网格内的坐标时,对输出logit取sigmoid激活后,再加上一个缩放和偏移,可以保证预测框中心点能够有效的拟合真实框刚好落在网格边线上的情况。
1. Coord Conv – 特征提取优化
卷积之所以提出来,是因为它的局部感受野,也就是说,我看一张图,我就看他的局部,一个狗无论在图像的左上角还是右下角,它都是狗,因为我只需要看它周围的这一块东西,我就可以认出来它是一只狗。这只狗具体在图像的哪个位置,没有关系。这就是卷积提出来的一个概念。但是,我要是给它感知到一个全局的坐标有木有用呢?打一个比方,那如果这个狗在图像的左半部分没有了或者是在图像的右半部分没有了,它还是一只狗吗?你的网络还能认出它吗?那么在这个时候,要是它同时能感知到一个全局的坐标,就有利于你模型的检测,那么怎么做呢?我们就给这个卷积增加两个通道,传入x,y坐标信息,这个卷积就能搞定定位。这个卷积不仅能知道它的局部信息,还能知道自己的定位,那么特征提取的效率就更高了,所以PP-YOLO里加入了少量的Coord Conv,由于是少量,所以预测速度影响较小,精度有所提升。
坐标不做反向传播学习,因为是加入进去的,类似说,x+y=z,你的y是一个常量,只需要学习x。
换言之:我们知道深度学习里的卷积运算是具有平移等变性的,这样可以在图像的不同位置共享统一的卷积核参数,但是这样卷积学习过程中是不能感知当前特征在图像中的坐标的。CoordConv就是通过在卷积的输入特征图中新增对应的通道来表征特征图像素点的坐标,让卷积学习过程中能够一定程度感知坐标来提升检测精度。
2. SPPNet(空间金字塔池化)-- 特征提取优化
SPP优化特征提取的一个方法,如下图所示通过多个不同尺度的池化窗口提取不同尺度的池化特征,把特征组合在一起作为输出特征,在骨干网络提取特征后加入空间金字塔池化,能有效的增加特征的感受野,是一种广泛应用的特征提取优化方法。PP-YOLO在骨干网络输出特征图附近加了一个SPP,对预测速度影响比较小,精度有所提升。
使用CoordConv和SPP两种特征提取优化方法后,精度进一步提升了0.8%(43.5%->44.3%), 这两种方式新增的推理计算量并不大,所以推理速度仅有少量下降
1. IoU Loss
计算:实时的计算预测框的Iou 将它的负值加入loss中
2. IoU Aware
目标检测里面,有的检测框定位精度不高,不高的原因是怎么呢?yolov3目标检测里面,使用的是“锚海”战术,每一个目标,我们给它输出很多个目标检测框,可能就会出现这种情况,比如说右图中的第一个斑马,正方形的框,IoU=0.65,S=0.65,而长方形的IoU=0.95, S=0.6,根据NMS,就会把长方形的框过滤掉,留下定位不准的正方形的框,这个框的检测精度反而不高了,在yolo里面这个问题的出现也很常见。
yolo里面为啥经常会出现这样情况呢?
yolo的评分的计算方式是这个框里面有物体,并且是对应的类别,然后将两者相乘,来作为预测框的score。(即,YOLOv3模型里的预测框评分score = objectness score * classification score,该预测框处存在目标的概率和对应目标类别的概率的乘积。)我们就发现这个score与定位精度半毛钱关系也没有,只是目标概率和目标分类的一个评分,所以才出现这种情况。(也就是说此种评分方式并没有考虑预测框的定位精度。而目标检测模型都需要对最后的预测框进行非极大值抑制(NMS),即按照预测框评分进行排序,然后删除得分低的框。)
怎么解决呢?
既然它没有定位因子,那么我们就把定位因子加到score中去。实际上,就是把这个定位因子实时的计算出来,乘到这个score上去。具体计算方法如下图。大概的指导思路就是说实时的计算IoU把它作为定位精度,乘到score中去,来通过这个定位精度来调整这个score,让定位精度高的score排在前面,避免向斑马那种,定位精度低的检测框把定位精度高的检测框过滤掉的情况。
loss_weigth是调整loss权重,比如说之前分类loss和回归loss直接加在一起,现在呢,比如说把分类loss乘以2.0,也就是有2.0的权重,再和回归loss加在一起。其实,最终的loss是各个分量的加权和。
由于我们每个预测框增加了一个通道了来学习IoU,所以由原来输出通道数B*(5+C)变成了B*(6+C)。所以推理速度有小幅的下降。
使用IoU Aware可以很好的避免这种情况,即在训练过程中增加一个通道来学习预测框和真实框之间的IoU,在推理过程中,将这个通道学习的IoU预测值也作为评分的因子之一,这样就能一定程度上避免高IoU预测框被挤掉的情况,从而提升模型的精度。同时,由于只是输出层的每个anchor上增加了一个通道,对于推理计算量的增加也基本可以忽略不计。
a和β是超参,李牧论文之前写过,要是阿发和β都等于1.5的时候,精度是更高。
网络不是从0开始训练的,主干部分网络是使用分类里面的一个在image数据集上训练的好的权重加载进来的。后面head部分是使用随机初始化的。没有冻结训练,yolov3的所有层都训练的。不用预训练模型,理论上会下降的,建议主干网络预训练模型
1. Larger Batch Size/learning rate/迭代次数等
1)Batch Size调大了,学习率也要等比例的对应的增大。
适当增大训练的batch size(例如,将单卡的batch size调整到24,8卡总batch size为192,使训练更加稳定,获取更优的结果)。
以上为训练的策略。现在引入IoU loss
2) PP-YOLO中使用的是2x Scheduler
比如说之前的模型都是用25万次迭代,这里我们将迭代次数扩到两倍,也就是训练50万,精度又有所提升。1层、2层、3层可能有所提高,4层也许就下降了。
小结:
将训练迭代次数和学习率衰减的迭代次数调整至和原始YOLOv3模型的迭代次数一致,也就是训练迭代次数从25万次增加到50万次,对应学习率衰减的迭代次数调整至40万和45万,使PP-YOLO模型(如表中的K模型所示)在COCO minival数据集精度再次提升0.5% ,达到45.3%,单卡V100上batch size=1时的预测速度为72.9 FPS。如果使用COCO test_dev2017数据集测试,精度将达到45.9%。
2. Synchronized Batch Norm(同步批归一化)
卡间同步的批归一化
它是计算机视觉模型里最常用的归一化方式,多卡训练时,一般实现的批归一化只统计单卡上均值和方差,而检测任务中,受显存的限制,batch size比较小,多卡同步,会使得均值和方差统计的更加准确。
通俗地讲:多卡训练的时候,卡间同步训练的开销比较大,它为了实现简便,卡1分配到的数据,只计算卡1分配到的数据的均值和方差,这样卡1的数据就相对比较独立了,Synchronized Batch Norm它的方式是,每做一次Batch Norm的时候,会在卡间同步这些均值和方差,这样就可以在多卡训练类同在一卡训练,某种程度上,也就是相当于增加了Batch Norm的batchsize,这样均值和方差计算就更加合理,收敛速度和效果也会更好。对于训练性能也是影响不大的。
实现方法,如下图计算方法:
3. EMA(Exponential Moving Average)滑动平均功能
滑动平均是指将参数过去一段时间的均值作为新的参数。相比直接对参数进行更新,采用滑动平均的方式能让参数学习过程中变得更加平缓,能有效避免异常值对参数更新的影响,提升模型训练的收敛效果。
价值投资里使用的方法。也就是,对于一个波动比较大的一个数值,每个点的数值取它历史滑动窗口的加权平均值来代替这个点的实时数据。怎么理解呢?稳,就不斗,也就说。(指数滑动平均)历史滑动平均将学习的梯度的上下抖动平滑掉,那么我们模型在训练学习过程就更加平缓稳定。
EMA(模型指数的滑动平均)某种程度上就是为了优化梯度和loss抖动的。
优化点:
- 价值投资中通过计算历史波动的指数滑动平均值来衡量价格的走势
- 模型训练过程中,对参数进行历史滑动平均来让训练过程更平缓稳定。
4. SSLD–预训练模型
我们的骨干网络是有预训练权重的。
SSLD中文是简单的半监督知识蒸馏。
无监督的蒸馏方法。
蒸馏的原理:现在我们的模型学习是有标准答案的学习。一个小模型使用一个更大的精度更高的模型取指导它取学习,去监督它取学习,这样就能提升小模型的分类精度,但不影响小模型的结构,也就是预测速度不变,精度有所提升。
1. Matrix NMS
NMS是排在前面的预测框往后问,IOU大于一个值,就删除一个后面一个框。比如说下图中两只马,他们靠的比较近,刚好还是同一个类别,他们会走到同一个NMS里面去,他们是两个是同一个类别,但不是同一个物体,这就存在了前面概率高的(0.95)就会把后面概率低的预测的马就会过滤掉。那么怎么来解决这个问题呢?那么就有人提出了soft NMS,它不是直接删除,而是乘以一个惩罚系数(小于0的系数),然后向后排。让这个框继续保留下来,下面的预测中再起作用。
soft NMS就会引入一个问题,原来NMS直接删除一个,计算量每计算一个,计算量就会减小一次,而softNMS并没有删除,而是把计算权重做了调整,它还是存在这个排序队列里面的,那么计算的复杂度就会大幅增加的,而Matrix NMS是对他做了一个并行的计算,将原来顺序式一个计算过程,变成一个矩阵式的计算过程,这个矩阵里面计算什么呢?算任意两个预测框之间的IOU值(对角算没有意义)填到这个矩阵里面。由于这个矩阵的嘛,矩阵都可以并行化,每个元素之间是不干扰的,那么我们就可以使用GPU并行的去做这个计算,来提升这个NMS的计算过程,可是我们只是做了box没有用,最终还是要做他们之间抑制不抑制,然后去的一个排序,这一些列复杂的操作,那么Matrix NMS在做这些的时候,也取了一个近似,也就是说它去看哪些可能抑制我的最大IOU是多少,相当于做了下图的一个近似,这个计算过程还是有点复杂的,就不做详细的展开了,感兴趣可以取看一下论文。
在推理过程中,NMS还会删除与得分高的框的重合度大于一定阈值的其它预测框,这样对于存在两个同类别物体重叠的的图像检测任务来说,就会出现一个物体的预测框把另一个物体的预测框抑制掉的情况,导致漏检。
因此又引入了Soft NMS这个概念,其解决思路并不是粗暴的将与得分高的预测框重合度大于阈值的框直接滤除,而是降低这个预测框的评分,对预测框评分的惩罚系数与这两个框的重合度,也就是IoU正相关,采用这种软化的滤除方式就能有效的避免重叠的同类物体预测框互相冲突的情况,提高检测的精度。
但引入Soft NMS会使推理速度变慢。因此此轮模型优化采用了更优的Matrix NMS:一种并行化进行Soft NMS的实现思路。Matrix NMS通过一个矩阵并行运算的方式计算出任意两个框之间的IoU,例如对某一个预测框B计算抑制系数时,Matrix NMS通过矩阵并行方式计算出所有得分高于B的预测框与预测框B的IoU,然后根据这些IOU和得分高于B的预测框的被抑制概率做近似估算,估算出B的抑制系数,从而实现并行化的计算Soft NMS,在提高检测精度的同时,避免了推理速度的降低。
使用Matrix NMS后,模型在推理速度几乎不变的情况下提升0.7%的精度。
输电线路环境检测
3.1 项目难点
剪裁:也就是常说的卷积通道剪裁,就是通过卷积中冗余的通道裁剪掉,就相当于说,它的输出通道变少了,那么这样的话就一定程度上减小了模型输出的大小。C变少了,减少了模型的计算量。
量化:将f32的计算和模型量化成为int8.也就是8位整形的一个模型,那么在计算过程中呢,就可以直接使用int8来计算。int8速度要f32快的。
裁剪和量化可能对模型的精度有所降低,所以引入了蒸馏。怎么做的呢?
我们使用YOLOv3-ResNet34去教YOLOv3-MobileNetV1学习(YOLOv3-ResNet34要比YOLOv3-MobileNetV1模型大)。
注:PaddleDetection内置提供剪裁、蒸馏、量化脚本和部署方案,可一键式运行
最终效果:
精度无损,模型大小360m -> 122M,推理时延3.4s -> 2.0s,使用PaddleLite完成监控设备部署
YOLOv3企业应用案例
PP-YOLO优化
注意点:
不支持TF;
引起内存爆炸:batch Size调小,lr成倍调小,否则会出现NAN。loss出现Nan,lr调小一点。
MixUp 最后的20个epoch不mixup,之前的epoch都mixup。50 iter 差不多是270个epoch。
BS 32G 24, 训练轮数是25万轮,16G调正为12。