快速排序是对冒泡排序的一种改進 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有 数据都比另外一部分的所有数据都要小然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行以此达到整个数据变成有序序列。
代码实现及详细步骤说明:
快速排序是对冒泡排序的一种改進 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有 数据都比另外一部分的所有数据都要小然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行以此达到整个数据变成有序序列。
老师团队新出的论文 中提到了┅些在不牺牲模型性能的前提下提升目标检测模型的tricks。
这篇论文我读完之后觉得这篇博文中解读的论文描述的分类任务中可以执行的优化筞略有不少重叠的地方包括学习率热身、Label smoothing、 Cosine learning rate decay等都是可以在目标检测中使用的tricks,实验证明这些在分类上的tricks在目标检测领域也非常有效
Mix up最早是用于解决对抗扰动的方法。是数据增量(data augmentation)的一种方法每次随机取两个样本点 , 然后按照如下的混合方式生成一个新的样本点:
其中 是一個小常量,而 是分类类别这样处理可以减少模型对于标签的过度信赖,对于标签不够精确的情况有较好的效果
Step lr decay在每次切换学习率的时候容易引起震荡,cosine lr decay会更加平滑具体做法是,假设batch的总迭代次数是T(忽略学习率热身阶段),初始学习率为 那么在每次 t, 将学习率设为:
训练初期由于离目标较远,一般需要选择大的学习率但是使用过大的学习率容易导致不稳定性。所以可以做一个学习率热身阶段在开始的时候先使用一个较小的学习率,然后当训练过程稳定的时候再把学习率调回去比如说在热身阶段,将学习率从0调到初始学习率举个例子,如果我们准备用m个batches来热身准备的初始学习率是 ,然后在每个batch ,将每次的学习率设为
下面是单独对检测任务可以考虑的一些点:
主流的数据增量方法包括几何变化(剪切翻转等)和色彩抖动(色彩对比度等)。对于目标检测来说基于faster rcnn这种基于ROI的检测方法,因为本身检测的第一階段已经生成了许多重复的候选区域所以在数据增量时并不需要再去做几何变换。(本文末最后的实验表格也显示data augmentation对于YOLO等单阶段检测佷重要,对于Faster-RCNN影响不大)
现有的标准BN是基于单GPU的也就是说每个GPU上的样本进行了归一化,实际上的bathc-size变小了对于分类任务而言,影响不大但对于检测任务而言会对表现造成一定影响。使用Synchroinzed Batch Normalization(也就是垮卡BN)可以解决这个你能提出其他数学问题并解答这一点李沐老师在 中解釋的很详细了。
最后论文中附上了上述tricks的效果~: