版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图像相关名词概述位图01任务通道02任务图像相关名词概述1颜色模式03任务布局04任务学习目标了解图像的基本构成了解图像的通道含义
了解图像中不同的颜色模式了解图像的布局方式1位图1位图位图图像(bitmap),亦称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。位图的特点是可以表现色彩的变化和颜色的细微过渡,产生逼真的效果,缺点是在保存时需要记录每一个像素的位置和颜色值,占用较大的存储空间。1位图图像中像素点占的bit位数,就是图像的深度。比如:单色位图:每个像素最多可以表示2种颜色,只需要使用长度为1的二进制位来表示,因此每个像素占1/8B。16色位图:每个像素最多可以表示16种颜色,所以只需要长度为4的二进制表示,因此每个像素占1/2B。256色位图:每个像素最多可以表示256种颜色,所以只需要长度为8的二进制表示,因此每个像素占1B。依次轮推,通常将计算机中存储单个像素点所用的bit位称作图像的深度。BMP图像大小计算公式:大小=分辨率×位深度/8。2通道2通道图像通常分为单通道,三通道,四通道。单通道:就是通常所说的灰度图,每个像素点只有一个值表示,如果图像的深度为8,那么图像像素值在0(黑)~255(白)之间。三通道:就是通常所说的彩色图,每个像素点由三个值表示,如果图像深度为8,那么图像像素值由红(0~255)、绿(0~255)、蓝(0~255)叠加表示,色彩更加艳丽。四通道:也就是在三通道图像基础上加上透明程度,0是完全透明,255是完全不透明。3颜色模式颜色模式通过赋予C的不同维度不同的含义,可以用来描述不同的颜色空间。颜色模式,是将某种颜色表现为数字形式的模型,或者说是一种记录图像颜色的方式。本单元主要讲述两个常用的颜色模式:RGB,HSV。3颜色模式RGB模式是工业界的一种颜色标准,通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及通道之间相互的叠加来得到各式各样的颜色。R、G、B分别代表红、绿、蓝三个通道的颜色,这个标准几乎囊括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。HSV(Hue,Saturation,Value)是由A.R.Smith在1978年创建的一种根据颜色直观特性(色调H,饱和度S,明度V)得到的颜色空间。在HSV颜色空间下,相比于RGB更容易跟踪某种颜色的物体,常用于分割指定颜色的物体。34布局4向图片添加文字图像布局一般分为CHW和HWC两种布局方式。其中:C:channel,图像的通道数;H:height,图像的高度;W:width,图像的宽度。在实际运用中经常会用到这两种布局的转换,转换方式也非常简单,只需使用数组的transpose((2,0,1))方法即可。ThankYOU!图像基础概述01任务图像的读写与保存02任务图像基础1图像绘制03任务向图片添加文字04任务学习目标了解OpenCV掌握图像的读写与保存学会绘制线段,矩阵,圆,椭圆,矩阵,多边形等。向图片添加文字1概述1概述在学习图像操作前,我们先了解一下OpenCV。为什么呢?OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和MacOS。在以后的学习中,关于图像操作部分(主要是数据预处理环节),我们大部分使用OpenCV实现。OpenCV的安装命令“pipinstallopencv-python”,使用时通过“importcv2”导入就行了。2图像的读写与保存2图像的读写与保存图像是由众多的像素值构成的,我们如何去操作图像呢?答案就是将图像转化为数组。OpenCV提供了这样的方法。我们使用cv2.imread()方法读取图片,返回数组格式。图像的读写与保存对于cv2.imread(filename,flags)函数参数如下:参数filename:图片的路径和文件名。如果图片放在当前文件夹下,直接写文件名就行了,如“lena.jpg”,否则需要给出绝对路径或相对路径,如“img/lena.jpg”。参数flags:图片的读取方式,省略则为默认值。读取方式有三种,分别为:
cv2.IMREAD_COLOR:彩色图(1),默认值;cv2.IMREAD_GRAYSCALE:灰度图(0);cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)。2图像的读写与保存在实际应用中,通常对图像进行一系列操作后要显示一下处理后的结果。首先需要新建一个空白窗口用作图像显示,再调用图片显示命令在窗口中显示出图片。dWindow(window_name,默认参数)
的功能就是新建一个显示窗口,可以指定窗口的类型。具体的参数为:参数window_name是窗口的名字;默认参数为cv2.WINDOW_AUTOSIZE,表示窗口大小自适应图片,也可以设置为cv2.WINDOW_NORMAL,表示窗口大小可调整。图片比较大的时候,可以考虑用后者。在一般使用的时候,可以跳过此步,直接使用imshow()方法。22图像的读写与保存OpenCV中可以使用cv2.imshow()方法显示图片,同时窗口会自适应图片大小。imshow(window_name,image)方法也有两个参数,第一个参数window_name是窗口的名字,第二个参数image是要显示的图片内容的数组形式。该方法执行后会弹出一个窗口,窗口的名字就是上面定义的window_name。如果想要设置窗口的显示时间,则需要使用waitKey()方法,参数为设置的毫秒数,0代表永久显示(除非手动关掉窗口)。显示完成后,还需要释放窗口占用的资源,这里使用cv2.destroyAllWindows()方法,该方法会释放所有窗口占用的资源,如果要释放指定窗口的资源,可以使用cv2.destroyWindow(window_name)方法,参数window_name为要释放的窗口的名字。2图像的读写与保存如果想把处理后的图片结果保存到本地,可以使用cv2.imwrite(filename,img[,paras])方法,参数filename是保存的路径,参数img是保存的图片内容,paras表示不同编码格式的参数,一般为nparray多维数组形式。3图形绘制图形绘制在实际运用中,我们会在图片上添加一些图形,比如目标检测时在物体周围画个矩形框,人脸识别中将人脸的关键点用点(圆形)标出来。OpenCV常用的形状绘制方法:3线段的绘制是使用cv2.line(img,pt1,pt2,color[,thickness[,lineType[,shift]]])方法,参数img为输入的图像(绘制图像的每个方法的第一个参数都是输入的图像),参数pt1、pt2、color、thickness、lineType(可省略)依次为起点的坐标、终点的坐标、颜色、线条的粗细和线条的类型。参数shift代表坐标精确到小数点后第几位。图形绘制矩形的绘制是使用cv2.rectangle(img,pt1,pt2,color[,thickness[,lineType[,shift]]])方法。画矩形的方法可分为两种,一种是确定四个顶点的坐标,另一种只确定两个对角顶点的坐标。rectangle()方法基于后者。参数img为输入的图像,参数pt1、pt2为绘画矩形的两个对角顶点坐标,参数color、thickness、lineType(可省略)依次为颜色、线条的粗细和线条的类型。3圆形的绘制使用cv2.circle(img,center,radius,color[,thickness[,lineType[,shift]]])方法,参数img为输入的图像,参数center、radius、color、thickness、lineType(可省略)依次为圆形的原点、圆形的半径、颜色、线条的粗细和线条的类型。如果thickness变量的值为负,则代表要画一个实心圆。
图形绘制椭圆的绘制与圆形绘制相似,利用cv2.ellipse(image,centerCoordinates,axesLength,angle,startAngle,endAngle,color[,thickness[,lineType[,shift]]])方法实现椭圆的绘制。其中参数img为输入的图像,centerCoordinates、axesLength、angle、startAngle、endAngle、color、thickness、lineType分别为椭圆的中心坐标、元组(椭圆的长轴长度,短轴长度)、旋转角度、椭圆弧的起始角度、椭圆弧的终止角度、边界线的颜色、线条的粗细和线条的类型。3对于多边形的绘制,需要先创建包含顶点坐标的数组,再调用cv2.polylines(img,pts,isClosed,color[,thickness[,lineType[,shift]]])进行绘制。其中参数img为输入的图像,参数pts、isClosed、color、thickness、lineType分别为多边形上点的数组、标志、多边形颜色、多边形线的粗细、多边形线的类型。标志代表绘制的多边形是否闭合,若为True,
则画若干个闭合多边形,
若为False,
则画一条连接所有点的折线。4向图片添加文字4向图片添加文字OpenCV中的cv2.putText(img,text,org,fontFace,fontScale,color,thickness=None,lineType)方法实现了添加文字的功能,参数img、text、org、fontFace、fontScale、color、thickness、lineType分别为添加文字的图片、添加的文字、左上角坐标、字体、字体大小、颜色、字体粗细和线条类型。ThankYOU!图像几何变换图像缩放01任务图像翻转02任务图像平移及旋转03任务学习目标掌握图像的缩放掌握图像的翻转掌握图像的平移及旋转方法1图像缩放1图像缩放
图像缩放,顾名思义,就是对图像进行整体放大或缩小的操作。图像缩放在数据预处理时经常会用作规范图像的大小(宽高),从而便于后面神经网络的处理。OpenCV中是利用cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)方法来对图像进行缩放操作,该方法可以按照指定的宽度,高度缩放图片,也可以按照比例缩放图片。其中参数src、dsize、dst、fx、fy、interpolation分别为原图片、输出图像尺寸、目标图像、沿水平轴的比例因子、沿垂直轴的比例因子、插值方法。1图像缩放按照比例缩放:如果想让图片的宽和高均放大了一倍,则使用这种方式,需指定第二个参数dsize为None,接着指定fx和fy的值,表示要将宽和高放大或缩小的倍数。interpolation参数代表插值方式,默认为INTER_LINEAR双线性插值方式,通常可以不指定。2图像翻转2图像翻转图像翻转,即沿着某条线对图像进行翻转操作。图像翻转在数据集偏少的时候经常用来扩充数据集,从而增加拟合性。OpenCV中使用cv2.flip(src,flipCode,dst=None)方法实现图像的翻转,其中参数src为要翻转的图片,参数flipCode的值为0则垂直翻转(沿x轴);大于>0则水平翻转(沿y轴);小于0则代表水平垂直翻转,参数dst为目标图片。3图像平移及旋转图像平移及旋转图像平移,即让图片沿着x轴和y轴方向进行平移操作。首先需要具体了解一下图片中x轴和y轴是怎么确定的。整个坐标系是以图像的左上角为原点,向右为x轴,向下为y轴。OpenCV中利用cv2.warpAffine(src,M,dsize[,flags[,borderMode[,borderValue]]])方法来实现图像平移。首先需要定义平移矩阵M,矩阵M中是一个2行3列的放射变换矩阵,定义了x轴和y轴的平移量。参数src、dsize、flags、borderMode、borderValue分别为输入图像、输出图像的大小、插值法INTE_LINEAR(默认)、填充模式(当borderMode=BORDER_CONSTANT时为值填充)。33图像平移及旋转图像旋转使用的也是OpenCV中的cv2.warpAffine()方法,不同的是还需要使用其中的cv2.getRotationMatrix2D(center,angle,scale)方法来计算旋转矩阵。与图像翻转的区别是图像旋转是在同一水平面进行的,其中center为旋转中心,angle为旋转角度,负数表示顺时针旋转,scale为缩放比例。ThankYOU!阈值分割固定阈值分割01任务自适应阈值分割02任务Ostu阈值03任务图像轮廓04任务学习目标掌握固定阈值分割,自适应阈值分割,Otsu阈值分割基于阈值分割画出图像轮廓1固定阈值分割1固定阈值分割固定阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。OpenCV中使用cv2.threshold(src,thresh,maxval,type[,dst])来实现固定阈值分割,其中ret是returnvalue缩写,代表当前的阈值。函数有4个参数:参数src:要处理的原图,一般是灰度图;参数thresh:设定的阈值;参数maxval:最大阈值,一般为255;1固定阈值分割参数type:阈值的方式,dst为目标图片,包含以下五种类型(cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC、cv2.THRESH_TOZERO、cv2.THRESH_TOZERO_INV)。cv2.THRESH_BINARY:超过阈值部分的,取最大值maxval,否则就是0;cv2.THRESH_BINARY_INV:与BINARY的情况刚刚相反;cv2.THRESH_TRUNC:大于阈值的部分,设置为阈值,否则不变;cv2.THRESH_TOZERO:大于阈值的部分不改变,否则设置为0;cv2.THRESH_TOZERO_INV:TOZERO的反转。2自适应阈值分割2自适应阈值分割固定阈值是将整幅图片都应用一个阈值进行分割,它并不适用于明暗分布不均的图片。自适应阈值分割通俗地讲就是图片的每个局部都会通过处理得到一个阈值,这个区域就用这个阈值来进行分割。每个区域都有不同的阈值来处理,这样就适用于处理颜色分布不均的图片。OpenCV中使用cv2.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C,dst=None)自适应阈值方法每次取图片的小部分来计算阈值,这样图片不同区域的阈值就不尽相同。其函数的参数分别为:参数src:要处理的原图;参数maxValue:最大阈值,一般为255;2自适应阈值分割参数adaptiveMethod:小区域阈值的计算方式(ADAPTIVE_THRESH_MEAN_C:小区域内取均值,ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是高斯核);参数thresholdType:阈值方式;参数blockSize:小区域的面积,如11就是11×11的小块;参数C:每个邻域计算出的值需要再减去c得到阈值;参数dst:最终阈值等于小区域计算出的阈值再减去此值。3Ostu阈值分割3Ostu阈值在前面固定阈值中选取了一个阈值为127进行阈值分割,那如何知道选的这个阈值效果好不好呢?答案是:不断尝试,所以这种方法在很多文献中都被称为经验阈值。Otsu阈值法就提供了一种自动高效的二值化方法。Otsu算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法。其算法计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大分割意味着错分概率最小。Otsu阈值分割方法,选择使得类间方差最大的值作为阈值,设图像的归一化直方图为p,亮度阶为k(例如元素值取0~255,则k=256),则设3Ostu阈值Otsu阈值分割方法,选择使得类间方差最大的值作为阈值,设图像的归一化直方图为p,亮度阶为k(例如元素值取0~255,则k=256),则设
,,,期望为,,,则类间方差为4图像轮廓4图像轮廓图像阈值分割主要是针对图片的背景和前景进行分离,而图像轮廓也是图像中非常重要的一个特征信息,通过对图像轮廓的操作,就能获取目标图像的大小、位置、方向等信息。画出图像轮廓的基本思路是:先用阈值分割划分为两类图像,再去寻找轮廓。OpenCV中使用cv2.findContours(image,mode,method)函数来寻找图像轮廓,其中参数image、mode、method分别为输入的图像、轮廓搜索模式(决定了轮廓的提取方式)、轮廓近似方法(决定了如何表达轮廓)。mode轮廓的检索模式有:cv2.RETR_EXTERNAL表示只检测外轮廓;cv2.RETR_LIST表示检测的轮廓不建立等级关系;cv2.RETR_CCOMP表示建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层;cv2.RETR_TREE表示建立一个等级树结构的轮廓。4图像轮廓method轮廓的近似办法有:cv2.CHAIN_APPROX_NONE表示存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1;cv2.CHAIN_APPROX_SIMPLE表示压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息;cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS表示使用teh-Chinlchain近似算法。4图像轮廓cv2.findContours()函数的输出信息contours、hierarchy分别为返回的轮廓和图像的拓扑信息(轮廓层次)。如果想要显示出图像轮廓,还需要使用OpenCV中的cv2.drawContours(image,contours,contourIdx,color,thickness=None,lineType=None,hierarchy=None,maxLevel=None,offset=None)函数来绘制出图像轮廓,其中image、contours、contourIdx、color分别为输入的图像、绘制的轮廓、轮廓填充和轮廓的颜色。ThankYOU!图像统计图像直方图01任务绘制直方图02任务直方图均衡化02任务学习目标学习如何绘制直方图掌握直方图均衡化了解直方图概念1图像直方图1图像直方图图像直方图反映了图像中的灰度分布规律。它描述每个灰度级具有的像元个数,但不包含这些像元在图像中的位置信息。任何一幅特定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。如果一幅图像有两个不相连的区域组成,并且每个区域的直方图已知,则整幅图像的直方图是两个区域直方图的和。根据直方图的形态可以大致推断图像质量的好坏。由于图像包含有大量的像元,其像元灰度值的分布应符合概率统计分布规律。假定像元的灰度值是随机分布的,那么其直方图应该是正态分布。图像的灰度值是离散变量,因此直方图表示的是离散的概率分布。若以各灰度级的像元数占总像元数的比例值为纵坐标轴做出图像的直方图,将直方图中各条形的最高点连成一条外轮廓线,纵坐标的比例值即为某灰度级出现的概率密度,轮廓线可近似看成图像相应的连续函数的概率分布曲线。
1图像直方图⼀幅数字图像在范围[0,G]内总共有L个灰度级,其直⽅图定义为离散函数:,其中:
是第
级亮度,
是灰度级为
的图像中的像素数,
。
在实际处理中,图像直方图的x轴区间一般是[0,255],对应的是8位位图的256个灰度级;y轴对应的是具有相应灰度级的像素点的个数。虽然8位的图像都具有256个灰度级(每一个像素可以有256个灰度值),但是属于不同灰度级的像素数量是很不一样的。有时为了便于表示,也会采用归一化直方图。在归一化直方图中,x轴仍然表示灰度级;y轴不再表示灰度级出现的次数,而是灰度级出现的频率。2绘制直方图2绘制直方图计算直方图的方式有两种,一种是使用OpenCV函数,一种是使用Numpy函数。OpenCV中利用cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])来计算直方图,其中images、channels、mask、histSize、ranges分别为原图像(图像格式为uint8或float32)、通道类型、掩模图像、BIN的数目、像素值范围。Numpy中有两个函数都可以计算直方图,分别为np.histogram(a,bins=10,range=None,weights=None,density=False)和np.bincount(x,weights=None,minlength=0)。在np.histogram()方法中参数a是待统计数据的数组,参数bins指定统计的区间个数,参数range是一个长度为2的元组,表示统计范围的最小值和最大值,默认值None,即表示范围由数据的范围决定,参数weights为数组的每个元素指定了权值,np.histogram()会对区间中数组所对应的权值进行求和,参数density为True时,返回每个区间的概率密度;若为False,则返回每个区间中元素的个数。在np.bincount()方法中,参数x为输入数组,参数weights为权重数组,参数minlength为输出阵列的最小BIN数。3直方图均衡化3直方图均衡化直方图均衡化是图像灰度变换中有一个非常有用的方法。图像的直方图是对图像对比度效果上的一种处理,旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点分布更均匀一点。通过这种方法,亮度可以更好地在直方图上分布。直方图均衡化(histogramequlization)的目标是创建一幅在整个亮度范围内具有相同亮度分布的图像,输入直方图H[p]和亮度范围[p0,pk],直方图均衡化的目标是找到一个单调的像素亮度变换q=T(p),使输出直方图G[q]在整个输出亮度范围[q0,qk]内是均匀的,增强了靠近直方图极大值附近的亮度的对比度,减小了极小值附近的对比度。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度,原先图像灰色区域的细节变得清晰。3直方图均衡化直方图均衡化的步骤如下:对于k(256)个亮度级、大小为M×N的图像,创建长为k的数组H,初始化为0;形成图像直方图H;形成累计直方图Hc,Hc[p]=Hc[p-1]+H[p],Hc[0]=H[0];设置
;重新扫描图像,根据查找表获得变换结果。在OpenCV中,可以使用cv2.equalizeHist()函数来实现直方图均衡化,返回值即为均衡化后的图像。
ThankYOU!图像滤波图像滤波01任务线性滤波02任务非线性滤波02任务学习目标掌握线性滤波的常用方法掌握非线性滤波的常用方法掌握图像滤波的基本概念1图像滤波1图像滤波图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,同时会造成图像一定程度上的模糊,这也叫做平滑或者低通滤波。无论是均衡化直方图和图像滤波,都一定程度上降低了图像阈值分割的难度,直方图增强图像内的对比度,图像滤波消除图像内的噪声干扰。进行平滑时,邻域内不同位置的像素被赋予不同的权值,对图像进行平滑的同时能够更多的保留图像的总体灰度分布特征。图像滤波是图像预处理中的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。1图像滤波图像滤波的两个目的是提取特征(抽出对象的特征作为图像识别的特征模式)和清除噪声(为适应图像处理的要求,消除图像数字化时所混入的噪声)。滤波处理的两个基本要求为无损信息(不能损坏图像的轮廓及边缘等重要信息)和图像清晰(使图像清晰视觉效果好)。图像平滑的两类目的:模糊+消除噪音。平滑滤波是低频增强的空间域滤波技术。空间域的平滑滤波,一般采用简单平均法进行,就是求邻近像元点的平均亮度值。邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。1图像滤波噪声一般可以分为高斯噪声和椒盐噪声,那高斯噪声和椒盐噪声有什么区别呢?高斯噪声是指噪声服从高斯分布,即某个强度的噪声点个数最多,离这个强度越远噪声点个数越少,且这个规律服从高斯分布。高斯噪声是一种加性噪声,即噪声直接加到原图像上,因此可以用线性滤波器滤除。
椒盐噪声类似把椒盐撒在图像上,因此得名,是一种在图像上出现很多白点或黑点的噪声,如电视里的雪花噪声等。椒盐噪声可以认为是一种逻辑噪声,用线性滤波器滤除的结果不好,一般采用中值滤波器滤波可以得到较好的结果。
图像滤波可大致分为两类:线性滤波和非线性滤波。2线性滤波2线性滤波
线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。1.均值滤波均值滤波是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的平均值(所有像素加权系数相等)。OpenCV中利用cv2.blur(img,ksize)来实现均值滤波,其中参数img为原图像,ksize为核的大小。2线性滤波
2.高斯滤波高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到,通常用它来减少图像噪声以及降低细节层次。这种模糊技术生成的图像,其视觉效果就像是经过一个毛玻璃在观察图像,这与镜头焦外成像效果以及普通照明阴影中的效果都明显不同。高斯平滑也用于计算机视觉算法中的预处理阶段,以增强图像在不同比例大小下的图像效果(参见尺度空间表示以及尺度空间实现)。从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫高斯分布,所以这项技术就称为高斯模糊。图像与圆形方框模糊做卷积将会生成更加精确的焦外成像效果。由于高斯函数的傅立叶变换是另外一个高斯函数,所以高斯模糊对于图像来说就是一个低通滤波器。2线性滤波数值图像处理中,高斯滤波主要可以使用两种方法实现。⼀种是离散化窗口滑窗卷积,另⼀种方法是通过傅里叶变化。最常见的就是滑窗实现,只有当离散化的窗口非常大,使用滑窗计算量非常大的情况下,可能会考虑基于傅里叶变化的实现方法。离散化窗口滑窗卷积时主要利用的是高斯核,高斯核的大小为奇数,因为高斯卷积会在其覆盖区域的中心输出结果。高斯卷积的公式如下:2线性滤波下面给予一张黑白明显的图片,将其标准差为1时的高斯卷积核的数值可视化,如图所示:高斯卷积核的生成步骤为:确定卷积核的尺寸,比如5×5;设置高斯函数的标准差,比如计算卷积核各个位置权重值;对权重进行归一化。OpenCV中可利用cv2.GaussianBlur(src,ksize,sigmaX[,DST[,sigmaY[,borderType]]])来实现高斯滤波,其中参数src为输入图像,ksize为高斯核的大小,sigmaX
为X方向上的高斯核标准偏差,dst
为输出与图像大小和类型相同的图像src,sigmaY为Y方向上的高斯核标准差,borderType为像素外推方法。3非线性滤波3非线性滤波非线性滤波是利用原始图像跟模版之间的一种逻辑关系得到结果,常用的非线性滤波方法有中值滤波和高斯双边滤波,分别对应cv2.medianBlur(src,ksize)方法和cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace[,dst[,borderType]])方法。中值滤波中值滤波就是某个ksize区域里面的中值,将每一像素点的灰度值设置为该点某邻域窗口内所有像素点灰度值的中值。中值对椒盐噪声(脉冲噪声)有很好的抑制作用。中值滤波的原理是把以当前像素为中心的小窗口内的所有像素的灰度按从小到大排序,取排序结果的中间值作为该像素的灰度值。3非线性滤波在一连串数字{1,4,6,8,9}中,数字6就是这串数字的中值。由此可以应用到图像处理中。依然在图像中去3×3的矩阵,里面有9个像素点,将9个像素进行排序,最后将这个矩阵的中心点赋值为这九个像素的中值。图中就展示了在3×3矩阵中对中心值取值的计算过程。OpenCV中可利用cv2.medianBlur(src,ksize)来实现中值滤波,其中参数src为输入图像,ksize为高斯核的大小。3非线性滤波双边滤波是结合图像的空间邻近度和像素值相似度的一种折中处理,不仅考虑了像素信息,也考虑到了像素位置信息,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。
双边滤波的计算公式为:其中
为当前像素权值,
为当前像素信息,
为当前像素邻域均值;
为当前像素位置信息,
为当前像素平均位置信息,
与
分别为当前像素信息和当前像素位置的标准差。在OpenCV中可使用cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace[,dst[,borderType]])实现高斯双边滤波,方法中参数src为输入图像,参数d为过滤时周围每个像素领域的直径,参数sigmaColor表示在colorspace中过滤sigma,参数越大,临近像素将会在越远的地方mix,参数sigmaSpace表示在coordinatespace中过滤sigma,参数越大,那些颜色足够相近的颜色的影响越大,参数dst
为输出与图像大小和类型相同的图像src,参数borderType为像素外推方法。ThankYOU!图像分类概述图像分类的概念01任务图像分类的意义02任务常用方法03任务学习目标掌握图像分类的基本概念和意义了解图像分类的常用方法1图像分类的概念1图像分类的概念图像分类,也称图像识别,是计算机根据已有的固定分类标签集合和图像所反馈的信息特征从标签集合中找出一个分类标签,并分配给该图像的视觉处理方法。譬如规定一个分类标签为猫和狗的集合,给计算机输入一张猫或狗的图片,通过判断其特征比如胡子,眼睛,嘴巴,耳朵等,从集合中找出一个分类标签,区分(识别)该图是猫还是狗。2图像分类的意义2图像分类的意义
图像分类是计算机视觉的核心任务,也是最为基础的任务,有着各种各样的实际应用。比如安防领域的人脸识别,交通领域的交通场景物体识别,互联网领域的相册自动归类等。
计算机视觉理论的奠基者,英国神经生理学家马尔认为,视觉要解决的问题可归结为“WhatisWhere”,即什么东西在什么地方,这里的“什么东西”就是图像分类要做的。图像分类的发展从最开始的10分类的灰度图像手写字体识别,到后来的10分类标签任务cifar-10及100分类标签任务cifar-100,再到后来的22000分类标签任务的ImageNet,图像分类模型伴随着数据集的增长,分类水准甚至已经超过了人类。图像分类在某些领域一定程度上为人类减轻了负担,改变了人的生活方式。3常用方法3常用方法图像分类方法大致分为两类,基于传统的分类方法和基于深度学习的分类方法。基于传统的分类方法思路比较简单,将图片转换为一维向量,再基于距离度量以判断向量间的相似性。显而易见,这种不带特征提取的朴素办法,丢掉了二维向量中最重要的四周相邻像素的信息。该种方法在比较干净的数据集上表现还行,一旦数据集噪声强度高,准确率会下降。常见传统方法的有KNN,SVM等。基于深度学习的分类方法常用的就是卷积神经网络,通过训练和更新卷积神经网络的参数使得网络能够分辨出未知图片的类别。卷积神经网络是有人工神经网络演变而来,在接下来的小节中将一一介绍人工神经网络和卷积神经网络的基本知识和实践,并使用卷积神经网络来完成图像分类的任务。3常用方法KNN:KNN算法就是把要分类的对象(例如一个特征向量)与训练集中已知类标记的所有对象进行对比,并由K近邻对分类对象进行判断为那个类别。这种方法的效果好,但是也有弊端,与K-means聚类算法一样,需要先预定设置k的值,k值的选择会影响分类的性能。此外这种方法要求整个训练集存储起来,如果训练集偏大,搜索就慢,训练集偏小,分类结果准确率也就低。对于大的训练集,采取某些装箱形式通常会减少对比的次数。3常用方法SVM支持向量机:SVM支持向量机是一类强大的分类算法,最简单的SVM通过在高维空间中寻找一个最优线性分类面,对于特征向量x的决策函数为:其中w是常规超平面,b是偏移量常数,阈值为0,有一类为正数或负数,求解带有标记
的最优化问题,从而找到决策函数的参数。常规解释训练集上某些特征向量的线性组合为:其中i是训练集中选出的部分样本,称为支持向量,它们可以帮助定义分类的边界。决策函数即变为:SVM另一个优势是可以使用核函数
,将特征向量映射到另一个不同维度的空间中。3常用方法ThankYOU!神经网络神经网络的概念01任务playground02任务学习目标掌握神经网络的基础结构掌握神经网络的训练过程1神经网络的概念1神经网络的概念神经网络人工神经网络(ArtificialNeuralNetwork,ANN),简称神经网络(NeuralNetwork,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。1943年,McCulloch和Pitts将上述情形抽象为下图所示的简单模型,这就是一直沿用至今的M-P神经元模型。把许多这样的神经元按一定的层次结构连接起来,就得到了神经网络。1神经网络的概念最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量,由于每个神经元都会产生一个标量结果,所以单层神经元输出的都是一个向量,向量的维数等于神经元的个数。单层神经网络结构图1神经网络的概念多层神经网络就是由单层神经网络进行叠加之后得到的,所以就形成了层的概念,常见的多层神经网络有如下结构:1)输入层(Inputlayer),众多神经元(Neuron)接受大量非线形输入消息。输入的消息称为输入向量。2)输出层(Outputlayer),消息在神经元链接中传输、分析、权衡,形成输出结果。输出的消息称为输出向量。3)隐藏层(Hiddenlayer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。隐层可以有一层或多层。隐层的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)更显著。4)全连接层,当前一层和前一层每个神经元相互链接,所谓的全连接层就是在前一层的基础上进行一次Y=Wx+b的变化(不考虑激活函数)。1神经网络的概念不管是单层还是多层神经网络,都只能线性地划分数据,此时,如果在感知机的基础上加上非线性激活函数,输出的结果就不在一条直线上了。激活函数可以增加模型的非线性分割能力。常见的激活函数有:sigmoid:tanh:ReLu:LeakyReLu:Maxout:激活函数的作用除了前面说的增加模型的非线性分割能力外,还有:提高模型鲁棒性、缓解梯度消失问题、加速模型收敛等。ELU:2playground2playground为了更好的理解神经网络,Tensorflow给大众提供了一个便于理解的工具——playground,ThankYOU!卷积神经网络认识卷积网络01任务了解网络结构02任务卷积网络的发展历史03任务学习目标掌握卷积网络的基础结构了解卷积网络的常见方法1认识卷积神经网络1认识卷积神经网络神经网络传统的三层神经网络由输入层,隐藏层,输出层构成,其中隐藏层的层数根据使用时的具体需求而定,带有大量的参数。但是作为图像来说,其本身具有“二维空间特征”,通俗点说就是局部特性。譬如看一张猫的图片,可能看到猫的眼镜或者嘴巴就知道这是猫的图片,而不需要说看完了每个部分才知道图片的内容。如果可以用某种方式对一张图片的某个典型特征识别,那么就可以知道这张图片的类别。因此,还需要一个更高效的特征学习部分。1认识卷积神经网络卷积神经网络卷积神经网络(convolutionalneuralnetwork,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类。其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程要求。2网络结构2网络结构1.卷积层由于输入图像通常很维数很高,例如,1000×1000大小的彩色图像对应于三百万维特征,因此,继续沿用多层感知机中的全连接层会导致庞大的参数量。大参数量需要繁重的计算,而更重要的是大参数量会有更高的过拟合风险。卷积是局部连接、共享参数版的全连接层,这两个特性使参数量大大降低。局部连接:在全连接层中,每个输出通过权值(weight)和所有输入相连。在卷积层中,每个输出神经元在通道方向保持全连接,而在空间方向上只和小部分输入神经元相连。共享参数:卷积层不同空间位置的神经元共享权值,用于发现图像中不同空间位置的模式。共享参数是深度学习一个重要的思想,其在减少网络参数的同时仍然能保持很高的网络容量(capacity)。2网络结构卷积层中的权值通常被称为滤波器(filter)或卷积核(convolutionkernel)。卷积层由若干个卷积核构成,每层卷积层通过卷积核在图像上平移进行卷积运算来提取特征。卷积运算的目的是提取输入的不同特征,不同的卷积层提取的特征不同,浅层的卷积层只能提取一些低级的特征如边缘,线条等,深层的网络能从低级特征中迭代提取更复杂的特征。通过多层卷积层堆叠,各层提取到特征逐渐由边缘、纹理、方向等低层级特征过渡到文字、车轮、人脸等高层级特征。2网络结构2.池化层根据特征图上的局部统计信息进行下采样,在保留有用信息的同时减少特征图的大小。和卷积层不同的是,池化层不包含需要学习的参数。最大池化(max-pooling)在一个局部区域选最大值作为输出,而平均池化(averagepooling)计算一个局部区域的均值作为输出。局部区域池化中最大池化使用更多,而全局平均池化(globalaveragepooling)是更常用的全局池化方法。池化的核通常采用2×2的大小,平均池化就是计算2×2范围内的平均值,最大池化就是取该范围内的最大值。目前比较常用的是最大池化。在经过池化后,原图像的channel是不发生改变的。2网络结构池化层的作用:增加特征平移不变性。减小特征图大小。最大池化可以带来非线性。2网络结构3.激活层激活层的作用在于将前一层的线性输出,通过非线性的激活函数进行处理,这样用以模拟任意函数,从而增强网络的表征能力。激活层常用的函数包括sigmoid和ReLu(Rectified-LinearUnit,修正线性单元)等。激活函数是一些非线性的函数,这些函数的特性有所不同:1.sigmoid函数可以将数值压缩到[0,1]的区间。2.tanh可以将数值压缩到[-1,1]的区间。3.ReLu函数实现一个取正的效果,所有负数的信息都抛弃。4.LeakyReLu是一种相对折中的ReLu,认为当数值为负的时候可能也存在一定有用的信息,那么就乘以一个系数0.1(可以调整或自动学习),从而获取负数中的一部分信息。5.Maxout使用两套参数,取其中值大的一套作为输出。6.ELU类似于LeakyReLu,只是使用的公式不同。2网络结构以Tensorflow为例学习如何搭建这些层的方法:卷积层:tf.nn.conv2d(input,filter,strides,padding)激活层:tf.nn.relu()池化层:tf.nn.max_pool()(最大池化)3卷积网络的发展历史3卷积网络的发展历史下面将按照时间顺序进行讲解几种具有代表性的卷积神经网络(LeNet、AlexNet、VGG和ResNet),这些卷积神经网络在当时都针对图像分类任务取得了很好的效果。1.LeNetLeNet是CNN结构的开山鼻祖,第一次定义了卷积神经网络的结构。3卷积网络的发展历史LeNet的特点如下所示:(1)定义了卷积神经网络(ConvolutionalNeuralNetwork,CNN)的基本框架:卷积层+池化层(PoolingLayer)+全连接层;(2)定义了卷积层(ConvolutionLayer),与全连接层相比,卷积层的不同之处有两点:局部连接(引进“感受野”这一概念)、权值共享(减少参数数量),卷积计算公式:(3)利用池化层进行下采样(Downsampooling),从而减少计算量,池化计算公式:(4)用tanh作为非线性激活函数(现在看到的都是改进过的LeNet了,用ReLu代替
tanh。相较于sigmoid,tanh以原点对称(zero-centered),收敛速度会快。3卷积网络的发展历史2.AlexNet2012年,Krizhevsky与Hinton推出了AlexNet,引起了许多学者对深度学习的研究,可以算是深度学习的热潮的起始标志。AlexNet的特点如下所示:(1)采用双GPU网络结构,从而可以设计出更“大”、更“深”的网络(相较于当时的算力来说);3卷积网络的发展历史(2)采用ReLu代替tanh,稍微解决梯度消失问题(GradientVanishingProblem),加快网络收敛速度;(3)提出局部相应归一化(LRN,LocalResponseNormalization);(4)令pooling操作中的stride小于池化核的大小,从而使相邻的池化区域存在重叠部分,这一操作称为OverlappingPooling;(5)对训练数据进行随机裁剪(RandomCrop),将训练图像由256×256裁剪为224×224,并做随机的镜像翻转(HorizontalReflection)。并在测试时,从图像的四个角以及中心进行裁剪,并进行镜像翻转,这样可以得到10个Patch,将这些Patch的结果进行平均,从而得到最终预测结果;(6)对训练图像做PCA(主成分分析),利用服从(0,0.1)的高斯分布的随机变量对主成分进行扰动。这一操作能减少指标Top-1的1%错误率;(7)利用dropout避免网络过拟合。3卷积网络的发展历史3.VGG2014年,Simonyan和Zisserman提出了VGG系列模型(包括VGG-11/VGG-13/VGG-16/VGG-19),并在当年的ImageNetChallenge上作为分类任务第二名、定位(Localization)任务第一名的基础网络出现。VGG与当时其他卷积神经网络不同,不采用感受野大的卷积核(如:7×7,5×5),反而采用感受野小的卷积核(3×3)。关于这样做的好处有如下两点:减少网络参数量;由于参数量被大幅减小,于是可以用多个感受野小的卷积层替换掉之前一个感受野大的卷积层,从而增加网络的非线性表达能力。3卷积网络的发展历史4.ResNet2015年,KaimingHe提出了ResNet(拿到了2016年CVPRBestPaperAward),不仅解决了神经网络中的退化问题还在同年的ILSVRC和COCO竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。Kaiming在文中提出了残差结构(ResidualBlock),使得原本所要拟合的函数,
改为
,其中,
。虽然在“多个非线性层可以拟合任意函数”这一假设下二者并无区别,但是Kaiming假设模型学习后者,将更容易进行优化与收敛。(在残差结构中,模型利用Shortcut进行IdentityMapping,这样也解决了梯度消失现象)。ThankYOU!基于CNN的
图像识别案例描述01任务案例分析02任务案例实施03任务学习目标学习搭建卷积神经网络使用网络完成图像分类1案例描述1案例描述学习如何搭建CNN卷积神经网络,训练cifar-10数据,识别图片中的内容。2案例分析2案例分析数据集介绍:cifar-10是由Hinton的学生AlexKrizhevsky和IlyaSutskever整理的一个用于识别普适物体的小型数据集。一共包含10个类别的RGB彩色图片:飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog)、蛙类(frog)、马(horse)、船(ship)和卡车(truck)。图片由32×32彩色图像组成,每个类有6000个图像。cifar-10数据集中共有50000个训练图像和10000个测试图像。3案例实施3案例实施1.加载数据fromtensorflow.kerasimportdatasets,layers,models(train_images,train_labels),(test_images,test_labels)=datasets.cifar10.load_data()2.搭建卷积神经网络Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。Keras同样提供了序列化方法,可以方便的帮助搭建神经网络。model=models.Sequential()model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(32,32,3)))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Flatten())model.add(layers.Dense(64,activation='relu'))3案例实施pile(optimizer='adam’,
loss='sparse_categorical_crossentropy’,
metrics=['accuracy’])4.可视化训练过程为了方便查看训练过程中准确率的变化,可以借助matplotlib来可视化训练过程。3案例实施3.编译并训练此次训练过程中使用了adam优化函数——一个比较智能的优化函数方法,自适应时刻估计方法(AdaptiveMomentEstimation)。它在模型训练优化的过程中通过让每个参数获得自适应的学习率,来获得优化质量和速度的双重提升。主要包含以下几个显著的优点:1.实现简单,计算高效,对内存需求少;2.参数的更新不受梯度的伸缩变换影响;3.超参数具有很好的解释性,且通常无需调整或仅需很少的微调;4.更新的步长能够被限制在大致的范围内(初始学习率);5.能自然地实现步长退火过程(自动调整学习率);6.很适合应用于大规模的数据及参数的场景;7.适用于不稳定目标函数;8.适用于梯度稀疏或梯度存在很大噪声的问题。ThankYOU!迁移学习认识迁移学习01任务finetune03任务迁移学习特点02任务学习目标掌握迁移学习的基本概念掌握finetune的概念掌握迁移学习的特点1认识迁移学习1认识迁移学习深度学习面临的困境1.大数据与少标注之间的矛盾。深度学习模型的训练和更新,均依赖于数据的标注。数据的标注是一个耗时且昂贵的操作,因为没有足够的标定数据用来学习,使得这些领域一直不能很好的发展。2.大数据与弱计算之间的矛盾。大数据,就需要大设备、强计算能力的设备来进行存储和计算。绝大多数普通用户是不可能具有这些强计算能力的。在这种情况下,普通人想要利用这些海量的大数据去训练模型完成自己的任务,基本上不太可能。3.普适化模型与个性化需求之间的矛盾。深度学习的目标是构建一个尽可能通用的模型,使得这个模型对于不同用户、不同设备、不同环境、不同需求,都可以很好地进行满足。4.特定应用的需求。深度学习已经被广泛应用于现实生活中。在这些应用中,也存在着一些特定的应用,怎样去高效的使用通用模型解决特定的需求。1认识迁移学习迁移学习的基本概念迁移学习(TransferLearning)是一种深度学习方法,就是把为任务A开发的模型作为初始点,重新应用在为任务B开发模型的过程中,顾名思义就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习
(StartingFromScratch)。2迁移学习的特点2迁移学习的特点迁移学习与一般深度学习的区别主要表现在数据分布,数据标签,以及模型使用三个方面。在数据分布方面,一般的深度学习需要训练数据和测试数据同分布,即标准数据和非标准数据在训练集和测试集中所占的比例大致相同。而在迁移学习中,训练数据和测试数据的分布可以不同。在数据标签方面,一般的深度学习往往需要大量的数据标注,而在迁移学习中,数据标注可以不用那么多。在模型使用方面,一般的深度学习需要针对每个任务分别建模,而在迁移学习中,任务不需要重新开始建立模型,可以重用之前的模型。2迁移学习的特点迁移学习使用方法:可以在自己的预测模型问题上使用迁移学习,通常有两种方法:开发模型方法和预训练模型方法。
对于开发模型方法,分为四步:(1)选择源任务:必须选择一个与大量数据相关的预测模型问题,这个大量的数据需要与输入数据,输出数据或从输入到输出数据映射过程中学习的概念之间存在某种关系。(2)开发源模型:接下来,必须为这个第一项任务开发一个熟练的模型;该模型必须比原始模型更好,以确保一些特征学习已经发挥了其作用。(3)重用模型:然后可以将适合源任务的模型用作感兴趣的另一个任务模型的起点;这取决于所使用的建模技术,可能涉及到了全部或部分模型。(4)调整模型:可选项,对感兴趣任务的调整输入—输出配对数据或改进模型。2迁移学习的特点对于预训练模型方法,分为三步:(1)选择源任务:从可用的模型中选择预训练的元模型,许多研究机构会发布已经在大量的且具有挑战性的数据集上训练好的模型,在可用模型的模型池里面也能找到这些模型。(2)重用模型:然后可以将预训练的模型用作感兴趣的另一个任务模型的起点,这取决于所使用的建模技术,可能涉及使用全部或部分模型。(3)调整模型:可选项,对感兴趣任务的调整输入—输出配对数据或改进模型。
其中,第二类迁移学习方法在深度学习领域是很常见的。3finetune3finetune在介绍finetune之前,先了解一下什么是预训练模型。在搭建一个网络模型来完成一个特定的图像分类的任务时,首先,需要随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会不断变化。当结果很满意的时候,就可以将训练模型的参数保存下来,以便训练好的模型可以在下次执行类似任务时获得较好的结果。这个过程就是pre-training。之后接收到一个类似的图像分类任务。这时候,就可以直接使用之前保存下来的模型的参数作为这一任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。这时候使用的就是一个pre-training/trained模型,而过程就是fine-tuning。所以,预训练就是指预先训练的一个模型或者指预先训练模型的过程;微调就是指将预训练模型作用于自己的数据集,并使参数适应自己数据集的过程。3finetune为什么使用微调?首先要了解卷积网络的核心是:浅层卷积提取基础特征,比如边缘,轮廓等;深层卷积提取抽象特征,比如整个脸型;全连接层根据特征组合进行评分分类。而预训练模型的特点是:使用大型数据集进行训练,具备提取浅层基础特征和深层抽象特征的能力。使用微调不仅可以有效避免从头开始训练,浪费时间和资源的问题,而且可以一定程度上解决模型泛化能力低的问题。3finetune什么情况下使用微调呢?首先,使用的数据集与预训练模型的数据集相似,如果不太相似,比如使用的预训练模型是自然场景下的图片训练的,而目标任务是人脸识别,效果可能就没有那么好了。因为人脸的特征和自然景物的特征提取是不同的,所以相应的参数训练后也是不同的。其次当使用自己搭建的CNN模型准确率太低的时候也可以考虑使用微调。在实践中更常用的是,对于拥有较小的数据集,只需对那些经过大型数据集训练过的预训练模型结构进行微调,就可以达到快速训练模型的效果。ThankYOU!基于迁移学习
的图像识别案例描述01任务案例分析02任务案例实施03任务学习目标掌握调用图像分类的卷积神经网络的预训练模型对预训练模型进行微调使用微调后的预训练模型对cifar-10数据进行训练分类1案例描述1案例描述将学习如何使用预训练的VGG-16和ResNet50来实现cifar-10数据集的分类。2案例分析2案例分析加载数据部分同上一个案例,只需把数据输入到预训练的VGG-16或者ResNet50中。VGG-16的网络结构为右侧图绿色栏所示,其中block1中有2个包含64个卷积核的卷积层,block2包含2个128个卷积核的卷积层,block3有3个包含256个卷积核的卷积层,block4有3个包含512个卷积核的卷积层,block5有3个包含512个卷积核的卷积层,加上2个包含4096个神经元的全连接层和1个包含1000个神经元的全连接层。2案例分析ResNet有2个基本的block,一个是identityblock,输入和输出的维度是一样的,所以可以串联多个;另外一个基本block是convblock,输入和输出的维度是不一样的,所以不能连续串联,它的作用本来就是为了改变特征向量的维度。convblockidentityblock2案例分析ResNet50网络结构中block_sizes=[3,4,6,3]指的是stage1(firstpool)之后的4个layer的block数,分别对应res2,res3,res4,res5,每一个layer的第一个block在shortcut上做conv+BN,即convblock。3案例实施3案例实施1.导库在Keras里面提供了许多在ImageNet上的预训练模型,VGG-16和ResNet50就是其中的预训练模型,可以通过fromtensorflow.keras.applicationsimportVGG16和fromtensorflow.keras.applications.resnet50importResNet50引入VGG-16模型和RseNet50模型。调用VGG-16模型和RseNet50模型分别使用VGG16(include_top=True,weights=‘imagenet’,input_tensor=None,input_shape=None,pooling=None,classes=1000,classifier_activation=‘softmax’)和ResNet50(include_top=True,weights=‘imagenet’,input_tensor=None,input_shape=None,pooling=None,classes=1000)函数来加载预训练模型,其中两个模型中使用参数基本一致。3案例实施include_top:是否保留顶层的3个全连接网络;weights:None代表随机初始化,即选择不加载预训练权重。‘imagenet’代表加载预训练权重;input_tensor:可填入Kerastensor作为模型的图像输出tensor;input_shape:可选,仅当include_top=False有效,应为长为3的tuple,指明输入图片的shape,图片的宽高必须大于48,如(200,200,3);pooling:当include_top=False时,该参数指定了池化方式。None代表不池化,最后一个卷积层的输出为4D张量。‘avg’代表全局平均池化,‘max’代表全局最大值池化;classes:可选,图片分类的类别数,仅当include_top=True并且不加载预训练权重时可用;返回值:Keras模型对象。3案例实施2.加载数据(train_images,train_labels),(test_images,test_labels)=datasets.cifar10.load_data()3.使用预训练的VGG-16模型或者ResNet50模型#使用VGG-16模型base_model=VGG16(include_top=False,pooling='avg',input_shape=(32,32,3))#使用RseNet50模型#base_model=Re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级体育上册拍球接力课|团队配合
- 广东省清远市2025-2026学年高一下学期期末供题训练历史试卷(含答案)
- 广东深圳市宝安区2025-2026学年高一下学期期末教学质量检测语文试卷(含答案)
- 数控火焰切割机操作工达标竞赛考核试卷含答案
- 耐蚀混凝土工保密意识能力考核试卷含答案
- 电视摄像员岗前测试验证考核试卷含答案
- 幻灯机与投影仪装配调试工安全行为评优考核试卷含答案
- 电炉炼钢工安全综合测试考核试卷含答案
- 中药合剂工岗前专项能力考核试卷含答案
- 智慧路灯多网融合施工指南
- 铝灰渣化学分析方法 第5部分:氯含量的测定
- 业之峰装修合同范本
- 仿生传感器技术-洞察及研究
- T-CCSAS 052-2025 三氯氢硅还原法多晶硅生产安全技术规范
- T-ZPP 164-2025 机械制造 浓密机设备技术条件
- 人工智能导论习题及答案完整版
- 2025年公开选拔科级领导干部考试笔试试题及答案
- 电石知识培训课件
- 2025年四川纳兴实业集团有限公司招聘笔试参考题库含答案解析
- 牛津译林版英语小学五年级下册5B全册知识点
- 危险作业清单
评论
0/150
提交评论