心仪院校导师任务之一,文献调研记录。html
本文部分思路参考:算法
1. Anchor-Free数组
2. https://zhuanlan.zhihu.com/p/66048276网络
3. https://blog.csdn.net/u014380165/article/details/92801206 app
在此由衷感谢。框架
一些专业词汇概念须要掌握:机器学习
1、上下采样的概念: https://blog.csdn.net/stf1065716904/article/details/78450997ide
1. 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:函数
一、使得图像符合显示区域的大小;学习
二、生成对应图像的缩略图。
下采样原理:对于一幅图像I尺寸为M*N,对其进行s倍下采样,即获得(M/s)*(N/s)尺寸的得分辨率图像,固然s应该是M和N的公约数才行,若是考虑的是矩阵形式的图像,就是把原始图像s*s窗口内的图像变成一个像素,这个像素点的值就是窗口内全部像素的均值:
2. 放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而能够显示在更高分辨率的显示设备上。对图像的缩放操做并不能带来更多关于该图像的信息, 所以图像的质量将不可避免地受到影响。然而,确实有一些缩放方法可以增长图像的信息,从而使得缩放后的图像质量超过原图质量的。
上采样原理:图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
不管缩放图像(下采样)仍是放大图像(上采样),采样方式有不少种。如最近邻插值,双线性插值,均值插值,中值插值等方法。在AlexNet中就使用了较合适的插值方法。各类插值方法都有各自的优缺点。
2、超参数:所谓超参数,就是机器学习模型里面的框架参数,好比聚类方法里面类的个数,或者话题模型里面话题的个数等等,都称为超参数。它们跟训练过程当中学习的参数(权重)是不同的,一般是手工设定,不断试错调整,或者对一系列穷举出来的参数组合一通枚举(叫作网格搜索)。
3、loss函数的意义 https://zhuanlan.zhihu.com/p/49981234
机器学习中的监督学习本质上是给定一系列训练样本,尝试学习
的映射关系,使得给定一个
,即使这个
不在训练样本中,也可以输出
,尽可能与真实的
接近。损失函数是用来估量模型的输出
与真实值
之间的差距,给模型的优化指引方向。
4、focal loss的概念 摘自 :http://www.javashuo.com/article/p-yauuhdtb-mh.html
咱们知道object detection的算法主要能够分为两大类:two-stage detector和one-stage detector。前者是指相似Faster RCNN,RFCN这样须要region proposal的检测算法,这类算法能够达到很高的准确率,可是速度较慢。虽然能够经过减小proposal的数量或下降输入图像的分辨率等方式达到提速,可是速度并无质的提高。后者是指相似YOLO,SSD这样不须要region proposal,直接回归的检测算法,这类算法速度很快,可是准确率不如前者。做者提出focal loss的出发点也是但愿one-stage detector能够达到two-stage detector的准确率,同时不影响原有的速度。
做者认为one-stage detector的准确率不如two-stage detector的缘由是:样本不均衡问题,其中包括两个方面:
为了解决(1)解决样本的类别不平衡问题和(2)解决简单/困难样本不平衡问题,做者提出一种新的损失函数:focal loss。这个损失函数是在标准交叉熵损失基础上改进获得:
该focal loss函数曲线为:
其中,−log(pt)为初始交叉熵损失函数,α 为类别间(0-1二分类)的权重参数,(1−pt)γ 为简单/困难样本调节因子(modulating factor),而γ 则聚焦参数(focusing parameter)。
在上面的y∈{±1}y∈{±1} 为指定的ground-truth类别,p∈[0,1]p∈[0,1] 是模型对带有 y=1y=1 标签类别的几率估计。为了方便,咱们将ptpt定义为:
和重写的CE(p,y)CE(p,y):
一个广泛解决类别不平衡的方法是增长权重参数α∈[0,1]α∈[0,1],当$ y=1 类的权重为类的权重为\alpha$ ,y=−1y=−1 类的权重为1−α1−α 。在实验中,αα 被设成逆类别频率(inverse class frequence),αtαt定义与ptpt同样:
所以,α−balancedα−balanced 的CE损失函数为:
尽管α能平衡positive/negative的重要性,可是没法区分简单easy/困难hard样本。为此,对于简单的样本增长一个小的权重(down-weighted),让损失函数聚焦在困难样本的训练。
所以,在交叉熵损失函数增长调节因子(1−pt)γ(1−pt)γ ,和可调节聚参数γ≥0γ≥0。,因此损失函数变成:
当pt→0时,同时调节因子也 (1−pt)γ→0 ,所以简单样本的权重越小。直观地讲,调节因子减小了简单示例的loss贡献,并扩展了样本接收低loss的范围。 例如,在γ= 2的状况下,与CE相比,分类为pt = 0.9的示例的损失将下降100倍,而对于pt≈0.968的示例,其损失将下降1000倍。 这反过来增长了纠正错误分类示例的重要性(对于pt≤0.5和γ= 2,其损失最多缩小4倍)。
根据论文做者实验,α=0.25 和 γ=2 效果最好
实现代码:
def focal_loss(y_true, y_pred): alpha, gamma = 0.25, 2 y_pred = K.clip(y_pred, 1e-8, 1 - 1e-8) return - alpha * y_true * K.log(y_pred) * (1 - y_pred)**gamma\ - (1 - alpha) * (1 - y_true) * K.log(1 - y_pred) * y_pred**gamma
5、L1 - loss(平均绝对损失) https://blog.csdn.net/u013841196/article/details/89923254
平均绝对偏差(MAE)是另外一种用于回归模型的损失函数。MAE是目标变量和预测变量之间绝对差值之和。所以它衡量的是一组预测值中的平均偏差大小,而不考虑它们的方向(若是咱们考虑方向的话,那就是均值偏差(MBE)了,即偏差之和)。范围为0到∞。
6、什么是高斯核? http://www.javashuo.com/article/p-fctewcoy-bo.html
特征空间的隐式映射 -- 核函数
核函数的主要目的是将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
具体来讲,在线性不可分的状况下,支持向量机(SVM)首先在低维空间中完成计算,而后经过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上自己很差分的非线性数据分开。如图所示,一堆数据在二维空间没法划分,从而映射到三维空间里划分,以下图所示。
关于核函数的简要归纳:
1. 实际中,咱们会常常遇到线性不可分的样例,此时,咱们的经常使用作法是把样例特征映射到高维空间中去(如上文2.2节(具体到给出的连接里有详细的过程)最开始的那幅图所示,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
2. 但进一步,若是凡是遇到线性不可分的样例,一概映射到高维空间,那么这个维度大小是会高到可怕的(如上文中19维乃至无穷维的例子)。那咋办呢?
3. 此时,核函数就隆重登场了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表如今了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。
关于高斯核的概念:
6、热度图(Heatmap)的概念 http://www.javashuo.com/article/p-kuzrjotm-mh.html
热图能够简单地聚合大量数据,并使用一种渐进的色带来优雅地表现,最终效果通常优于离散点的直接显示,能够很直观地展示空间数据的疏密程度或频率高低。但也因为很直观,热图在数据表现的准确性并不能保证。
热图已经不是什么新鲜的概念了,不少领域都在使用。例如记录用户在Web页面内鼠标的点击位置,各类空间离散点数据的显示等等。
其生成的原理简单归纳为四个步骤:
(1)为离散点设定一个半径,建立一个缓冲区;
(2)对每一个离散点的缓冲区,使用渐进的灰度带(完整的灰度带是0~255)从内而外,由浅至深地填充;
(3)因为灰度值能够叠加(值越大颜色越亮,在灰度带中则显得越白。在实际中,能够选择ARGB模型中任一通道做为叠加灰度值),从而对于有缓冲区交叉的区域,能够叠加灰度值,于是缓冲区交叉的越多,灰度值越大,这块区域也就越“热”;
(4)以叠加后的灰度值为索引,从一条有256种颜色的色带中(例如彩虹色)映射颜色,并对图像从新着色,从而实现热点图。
能够经过几张图来展示这个过程:
(1)灰度带和彩虹色带
7、Maxpool的概念
(1)偶形式 -- 2X2中最大值
奇形式:
一些前期工做的神经网络模型:
1. Hourglass -- backbone
https://blog.csdn.net/weixin_43292354/article/details/89387651
https://zhuanlan.zhihu.com/p/65123312
1. CornerNet https://blog.csdn.net/StreamRock/article/details/100115681
CornerNet和ExtremeNet的区别:
1.CornerNet经过预测角点来检测目标的,而ExtremeNet经过预测极值点和中心点来检测目标的。
2.CornerNet经过角点embedding之间的距离来判断是否为同一组关键点,而ExtremeNet经过暴力枚举极值点、通过中心点判断4个极值点是否为一组。
主要总结内容:
其中心思想:主要用高斯分布来表示目标,就是一个目标用高斯分布来覆盖,目标中心点的值越大。 https://blog.csdn.net/u011622208/article/details/103072220
其网络的主要结构是经过一个backbone生成网络生成Feature map,再经过带分支的检测头分别预测物体的中心点,物体的宽高和heatmap
其主要流程为:
1. 输入图像(在这里设图像为h*w*3,也就是长h个像素,宽w个像素,3个通道)
2. 通过仿射变换,这一步重点在于将图像尺寸处理成512*512大小后做为特征提取网络的输入。
3. 通过特征提取网络(做者尝试了三种特征提取网络,分别为Hourglass, ResNet和DLA)进行前向计算,并获得三个输出:
(1)hm (hearmap)大小为[1,80,128,128]. (设类别为80).
(2)wh (目标的长和宽) 大小为[1, 2, 128, 128].
(3)reg (offset,偏置损失),大小为[1, 2, 128, 128].
4.heatmap获得的结果通过sigmiod函数使数值范围规定到[0, 1]之间
5. 对heatmap执行一个最大池化操做,kernel设置为3,stride设置为1,pad设置为1,这一步实际上是在作重复框过滤,这也是为何后续再也不须要NMS操做的一个重要缘由,毕竟这里3*3大小的kernel加上特征图和输入图像之间的stride=4,至关于输入图像中每12*12大小的区域都不会有重复的中心点,想法很是简单有效!
6.基于heatmap选择top K个得分最高的点(默认K=100),这样就肯定了100个置信度最高的预测框的中心点位置了,这一步也会去掉必定的重复框。接下来就要肯定预测框的大小了,经过输出的尺寸预测值和offset就能够获得目前位置
获得的预测框信息都是在128*128大小的特征图上,所以最后将预测框信息再映射到输入图像上就获得最终的预测结果了,
其大体效果以下图所示:
而显示预测结果时做者设定一个置信度阈值,高于阈值的才显示。
因此获得最终结果为: