一、自适应锚框计算详解
自适应锚框计算的具体过程:
①获取数据集中所有目标的宽和高。
②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。
③将 bboxes 从相对坐标改成绝对坐标,这里乘以的是缩放后的宽高。
④筛选 bboxes,保留宽高都大于等于两个像素的 bboxes。
⑤使用 k-means 聚类三方得到n个 anchors,与YOLOv3、YOLOv4 操作一样。
⑥使用遗传算法随机对 anchors 的宽高进行变异。倘若变异后的效果好,就将变异后的结果赋值给 anchors;如果变异后效果变差就跳过,默认变异1000次。这里是使用 anchor_fitness 方法计算得到的适应度 fitness,然后再进行评估。
1、k-means聚类算法
k-means是非常经典且有效的聚类方法,通过计算样本之间的距离(相似程度)将较近的样本聚为同一类别(簇)。它属于无监督学习的范畴,与分类不同,聚类不依赖于预先标注的标签,而是尝试将数据集分成由相似对象组成的多个组或“簇”。
术语:
- 监督学习(supervised learning):是对具有概念标记(分类)的训练样本进行学习,以尽可能对训练样本集外的数据进行标记(分类)预测。【神经网络和决策树】
- 无监督学习(unsupervised learning):是对没有概念标记(分类)的训练样本进行学习,以发现训练样本集中的结构性知识。【聚类】
- 簇: 所有数据的点集合,簇中的对象是相似的。
- 质心: 簇中所有点的中心(计算所有点的均值而来)。
- SSE: Sum of Sqared Error(误差平方和), 它被用来评估模型的好坏,SSE 值越小,表示越接近它们的质心. 聚类效果越好。由于对误差取了平方,因此更加注重那些远离中心的点(一般为边界点或离群点)。
优点:
- 属于无监督学习,无须准备训练集
- 原理简单,实现起来较为容易
- 结果可解释性较好
缺点:
- 需手动设置k值。 在算法开始预测之前,我们需要手动设置k值,即估计数据大概的类别个数,不合理的k值会使结果缺乏解释性
- 可能收敛到局部最小值, 在大规模数据集上收敛较慢
- 对于异常点、离群点敏感
- 使用数据类型 : 数值型数据
使用k-means时主要关注两点:
- 如何表示样本与样本之间的距离(核心问题),这个一般需要根据具体场景去设计,不同的方法聚类效果也不同,最常见的就是欧式距离,在目标检测领域常见的是IOU。
- 需要分为几类,即k为多少,这个也是需要根据应用场景取选择的超参数。
k-means算法主要流程:
- 手动设定簇的个数k,假设k=2;
- 在所有样本中随机选取k个样本作为簇的初始中心,如下图(random clusters)中两个黄色的小星星代表随机初始化的两个簇中心;
- 计算每个样本离每个簇中心的距离(这里以欧式距离为例),然后将样本划分到离它最近的簇中。如下图(step 0)用不同的颜色区分不同的簇;
- 更新簇的中心,计算每个簇中所有样本的均值(方法不唯一)作为新的簇中心。如下图(step 1)所示,两个黄色的小星星已经移动到对应簇的中心;
- 重复第3步到第4步直到簇中心不在变化或者簇中心变化很小满足给定终止条件。如下图(step2)所示,最终聚类结果。
2、bpr(best possible recall)
论文解释:
BPR is defined as the ratio of the number of ground-truth boxes a detector can recall at the most divided by all ground-truth boxes. A ground-truth box is considered being recalled if the box is assigned to at least one sample (i.e., a location in FCOS or an anchor box in anchor-based detectors) during training.
bpr(best possible recall) = 最多能被召回的ground-truth框数量 / 所有ground-truth框数量
bpr最佳召回率最大值为1,越大越好。当最佳召回率大于或等于0.98,则不需要更新锚定框;如果最佳召回率小于0.98,则需要使用k-means聚类算法+遗传进化算法选择出与数据集更匹配的anchors框。
3、白化操作whiten
目的:去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性。
输入数据集X,经过白化处理后,新的数据X’满足两个性质:
- 特征之间相关性较低;
- 所有特征具有相同的方差=1
白化的常见的作法:对每一个数据做一个标准差归一化处理(除以标准差)。
scipy.cluster.vq.kmeans() 函数输入的数据就是必须是白化后的数据。相应的输出的anchor k也是白化后的anchor,所以需要将anchor k 都乘以标准差恢复。
4、遗传算法
遗传算法是借鉴生物的自然选择和遗传进化机制面开发出的一种全局优化自适应概率搜索算法。
生物学术语:
遗传(Heredity):世间的生物从其亲代继承特性或性状的生命现象。
- 遗传学(Genetics):研究遗传的科学。
- 染色体(Chromosome):细胞中含存的一种微小的丝状化合物,包含生物的所有遗传信息。
- 基因(Gene):遗传信息的组成成分,生物的性状是由相应的基因控制的,基因是遗传的单位。
- 脱氧核糖核酸(Deoxyribonucleiz Acid,简称DNA):控制并决定生物遗传性状的染色体的组成成分,除此之外,染色体中还含有很多蛋白质。DNA在染色体中有规律地排列着。DNA中,遗传信息在一条长链上按照一定的模式排列,即进行遗传编码。
- 基因座(Locus):遗传基因在染色体中所占据的位置。
- 等位基因(Allele):同一基因座可能有的全部基因。
- 复制(Reproduction):细胞在分裂时,遗传物质DNA复制转移到新产生的细胞,新细胞继承了旧细胞的基因。
- 交叉(Crossover):两个同源染色体的某一相同位置处DNA被切断,其前后两串分别交叉组合而形成两个新的染色体。
- 变异(Mutation):细胞复制时较小概率产生某些复制差错,从而使DNA发生某种变化,产生新的染色体。,这些新的染色体表现出新的性状。
进化(Evolution):生命在延续生存的过程中,逐渐适应于其生存环境,使得品质不断得到改良的生命现象。
- 群体(Population):生物进化是以集团的形式进行的,这样的团体即为群体。
- 个体(Individual):组成群体的单个生物。
- 适应度(Fitness):个体对于生存环境的适应能力。
遗传算法中的遗传算子:
- 选择(Selection):根据各个个