均值,白化,Siamese网络,双线性插值

来源:互联网 发布:mac pro的系统 编辑:程序博客网 时间:2024/05/03 19:36

减去均值,白化:在训练一个网络的时候我们经常会做对输入减去均值,以及白化等操作,其目的均是为了加快训练速度。关于原因一般我们输入的图像数据是高度相关的,假设其分布如下图a所示,由于初始化模型参数时,一般参数时0均值的,因此开始的拟合y=Wx+b基本是过原点的,如图b红色线所示,因此网络需要经过多次学习才能够达到如紫色实现的拟合,因此训练过程中模型的收敛速度慢。如果我们对输入的数据先做减均值操作,便可以将其分布得到如图c所示的样子,这显然可以加快模型的收敛速度。更进一步如果通过白化等预处理操作对数据进行去相关操作使其分布如图d所示,显然数据的区分度更大,同样也也可以加快训练。

这里写图片描述

Siamese网络:Siamese网络是一种相似性度量方法,当类别数多,但每个类别的样本数量少的情况下可用于类别的识别、分类等。传统的用于区分的分类方法是需要确切的知道每个样本属于哪个类,需要针对每个样本有确切的标签。而且相对来说标签的数量是不会太多的。当类别数量过多,每个类别的样本数量又相对较少的情况下,这些方法就不那么适用了。其实也很好理解,对于整个数据集来说,我们的数据量是有的,但是对于每个类别来说,可以只有几个样本,那么用分类算法去做的话,由于每个类别的样本太少,我们根本训练不出什么好的结果,所以只能去找个新的方法来对这种数据集进行训练,从而提出了siamese网络。siamese网络从数据中去学习一个相似性度量,用这个学习出来的度量去比较和匹配新的未知类别的样本。这个方法能被应用于那些类别数多或者整个训练样本无法用于之前方法训练的分类问题。

双线性插值法(Bilinear interpolation)是利用待求象素反变换到原图像对应的浮点坐标,邻近的四个象素在两个方向上作线性内插。四邻近像素值的加权平均即为待测点像素值,计算权重反比于浮点在双线性方向上的映射距离。
双线性插值是利用了需要处理的原始图像浮点坐标周围的四个像素点的相关性,通过双线性算法计算。同上A中所设,目的坐标M(x,y)和浮点坐标m
f(M)=(1-u)(1-v)*f(i,j)+(1-u)v*f(i,j+1)+ u(1-v)*f(i+1,j) +uv*f(i+1,j+1)

function re_im = dlinear(im, p, q)%双线性插值法实现图像缩放,输入目标图像和行缩放、纵缩放倍数%ziheng 2016.3.29%imshow(im);[m,n] = size(im);im_R = im(:,:,1);im_G = im(:,:,2);im_B = im(:,:,3);l = round(m*p);h = round(n*q)/3;re_R = uint8(zeros(l,h));re_G = uint8(zeros(l,h));re_B = uint8(zeros(l,h));for dstx = 1:l    for dsty = 1:h        x = floor(dstx/p); u = dstx/p - x;        y = floor(dsty/q); v = dsty/q - y;        xx = max(1,x); xa = min(m,x+1);        yy = max(1,y); ya = min(n/3,y+1);        re_R(dstx,dsty) = (1-u)*(1-v)*im_R(xx,yy) + u*(1-v)*im_R(xa,yy)+(1-u)*v*im_R(xx,ya) + u*v*im_R(xa,ya);        re_G(dstx,dsty) = (1-u)*(1-v)*im_G(xx,yy) + u*(1-v)*im_G(xa,yy)+(1-u)*v*im_G(xx,ya) + u*v*im_G(xa,ya);        re_B(dstx,dsty) = (1-u)*(1-v)*im_B(xx,yy) + u*(1-v)*im_B(xa,yy)+(1-u)*v*im_B(xx,ya) + u*v*im_B(xa,ya);    endendre_im = cat(3,re_R,re_G,re_B);figure,imshow(re_im);