#图片加载与预处理defload_preprosess_image(path,lable):image=tf.io.read_file(path)#读取图片路径image=tf.image.decode_jpeg(image,channels=3)#对图片进行解码(jpeg格式图片,channels=3将读入图片统一为三通道)image=tf.image.resize(image,[256,256])#对图片进行变形256*256像素(非裁剪)image=tf.cast(image,tf.float32)#改变图片格式image=image/255#对图片进行归一化lable=tf.reshape(lable,[1])#把目标值转换成2维形状如:[1,2,3]=>[[1],[2],[3]]returnimage,labletf.image.convert_image_dtype方法将一个uint类型的tensor转换为float类型时,该方法会自动对数据进行归一化处理(如果是float类型图片使用该方法则不会归一化处理),将数据缩放到0-1范围内,如果没有注意到这点,之后在进行网络训练时会发现网络不收敛、不训练。
VGG全称是VisualGeometryGroup,属于牛津大学科学工程系,其发布了一些列以VGG开头的卷积网络模型,可以应用在人脸识别、图像分类等方面,分别从VGG16~VGG19。
VGG研究卷积网络深度的初衷是想搞清楚卷积网络深度是如何影响大规模图像分类与识别的精度和准确率的,最初是VGG-16,号称非常深的卷积网络全称为(GG-Very-Deep-16CNN)。
VGG在加深网络层数同时为了避免参数过多,在所有层都采用3x3的小卷积核,卷积层步长被设置为1。VGG的输入被设置为224x244大小的RGB图像,在训练集图像上对所有图像计算RGB均值,然后把图像作为输入传入VGG卷积网络,使用3x3或者1x1的filter,卷积步长被固定1。
VGG全连接层有3层,根据卷积层+全连接层总数目的不同可以从VGG11~VGG19,最少的VGG11有8个卷积层与3个全连接层,最多的VGG19有16个卷积层+3个全连接层,此外VGG网络并不是在每个卷积层后面跟上一个池化层,还是总数5个池化层,分布在不同的卷积层之下.
conv表示卷积层FC表示全连接层(dense)Conv3表示卷积层使用3x3filtersconv3-64表示深度64maxpool表示最大池化
在实际处理中还可以对第一个全连接层改为7x7的卷积网络,后面两个全连接层改为1x1的卷积网络,这个整个VGG就变成一个全卷积网络FCN。
VGG在加深CNN网络深度方面首先做出了贡献,但是VGG也有自身的局限性,不能无限制的加深网络,在网络加深到一定层数之后就会出现训练效果褪化、梯度消逝或者梯度爆炸等问题,总的来说VGG在刚提出的时候也是风靡一时,在ImageNet竞赛数据集上都取得了不错的效果