经典卷积神经网络——VGG16

这篇具有很好参考价值的文章主要介绍了经典卷积神经网络——VGG16。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

我们都知道Alexnet是卷积神经网络的开山之作,但是由于卷积核太大,移动步长大,无填充,所以14年提出的VGG网络解决了这一问题


一、VGG发展历程

VGG网络由牛津大学在2014年ImageNet挑战赛本地和分类追踪分别获得了第一名和第二名。研究卷积网络深度对其影响在大规模图像识别设置中的准确性,主要贡献是全面评估网络的深度,使用3*3卷积滤波器来提取特征。解决了Alexnet容易忽略小部分的特征。

二、VGG网络模型

vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉
从这张图中可以看到,VGG网络有11-19层,今天我们主要了解VGG16,VGG网络有一个特点,在每一次池化之后,经过卷积通道数都会翻倍,这样的好处就是为了保留更多的特征。
VGG16一个有13个卷积层3个全连接层。

三、VGG16代码详解

1.VGG网络架构

1.通过上面表格我们可以发现,经过max池化之后,通道数会翻倍,我们可以为了减少代码量,把这一过程封装成一个类,在使用过程中,直接调用就可以了。

class tiao(nn.Module):
    def __init__(self,shuru):
        super(tiao, self).__init__()
        self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuru*2,kernel_size=(3,3))
        self.conv2=nn.Conv2d(in_channels=shuru*2,out_channels=shuru*2,kernel_size=(3,3))
        self.relu=nn.ReLU()

    def forward(self,x):
        x1=self.conv1(x)
        x2=self.relu(x1)
        x3=self.conv2(x2)
        x4=self.relu(x3)

        return x4

这个类,很简单就是两层卷积,加两层激活函数,输出通道数翻倍
2.第二步就可以按照表格实现VGG16网络
2.1
输入三通道,输出64通道,卷积核为3
vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉

self.conv1=nn.Conv2d(in_channels=3,out_channels=64,kernel_size=(3,3))
self.conv2=nn.Conv2d(in_channels=64,out_channels=64,kernel_size=(3,3))

2.2
经过最大池化,通道数翻倍 输入64通道 经过两次卷积 输出通道128
vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉
这里直接调用上面封装好的类就行

self.tiao128=tiao(64)

2.3
经过最大池化,输入128通道 经过两次33卷积一次11卷积 输出通道256
vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉

self.tiao256=tiao(128)
self.conv1_256=nn.Conv2d(in_channels=256,out_channels=256,kernel_size=(1,1))

2.4
经过最大池化,输入256通道 经过两次33卷积一次11卷积 输出通道512
vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉

self.tiao512=tiao(256)
self.conv1_512=nn.Conv2d(in_channels=512,out_channels=512,kernel_size=(1,1))

2.5
经过最大池化,输入512通道,经过两次33卷积一次11卷积 输出通道512
vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉

self.conv512 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=(3, 3))
 self.conv1_512=nn.Conv2d(in_channels=512,out_channels=512,kernel_size=(1,1))

2.6
最后的三层全连接,这里要注意,使用自适应池化,池化之后图片尺寸是7*7
vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉

self.zsy=nn.AdaptiveAvgPool2d(7)
self.l1=nn.Linear(512*7*7,4096)
self.l2=nn.Linear(4096,4096)
self.l3=nn.Linear(4096,10)

2.7
还有relu激活函数,dropout随机失活函数,这里为了整洁,图表没有明确指出

self.relu=nn.ReLU()
 self.dropout=nn.Dropout2d(p=0.2)

2.8
最后就是前向传播

  x1=self.conv1(x)
        x2=self.relu(x1)
        x3=self.conv2(x2)
        x4=self.maxpool(x3)
        x5=self.tiao128(x4)
        x6=self.maxpool(x5)
        x7=self.tiao256(x6)
        x8=self.conv1_256(x7)
        x9=self.maxpool(x8)
        x10=self.tiao512(x9)
        x11=self.conv1_512(x10)
        x12=self.maxpool(x11)
        x13=self.conv512(x12)
        x14=self.conv512(x13)
        x15=self.conv1_512(x14)
        x16=self.zsy(x15)
        x17=x16.view(x16.size()[0],-1)
        x18=self.l1(x17)
        x19 = self.relu(x18)
        x20=self.dropout(x19)

        x22 = self.l2(x20)
        x23=self.relu(x22)
        x24=self.dropout(x23)

        x25=self.l3(x24)

        return x25

到这里VGG16网络就全部完成了

2.VGG16网络验证

这里我们可以进行验证,看网络有没有什么问题

model=VGG16()
input=torch.randn(1,3,224,224)
output=model(input).cuda()
print(output)

vgg16,卷积神经网络,深度学习,pytorch,人工智能,计算机视觉

2.读取数据,进行数据增强

 transform=transforms.Compose([
        #图像增强
        transforms.Resize(120),
        transforms.RandomHorizontalFlip(),
        transforms.RandomCrop(224),
        transforms.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5),
        #转变为tensor 正则化
        transforms.ToTensor(),
        transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5)) #正则化
    ])

读取数据时,可以调整线程数,batch_size可以使代码跑起来更快,提高GPU利用率,这里要注意一个问题,线程数过大新手会出现页面太小报错,这时候调整虚拟内存就可以了

trainset=tv.datasets.CIFAR10(
        root=r'E:\桌面\资料\cv3\数据集\cifar-10-batches-py',
        train=True,
        download=True,
        transform=transform
    )

    trainloader=data.DataLoader(
        trainset,
        batch_size=8,
        drop_last=True,
        shuffle=True, #乱序
        num_workers=4,

    )

    testset=tv.datasets.CIFAR10(
        root=r'E:\桌面\资料\cv3\数据集\cifar-10-batches-py',
        train=False,
        download=True,
        transform=transform
    )

    testloader=data.DataLoader(
        testset,
        batch_size=4,
        drop_last=True,
        shuffle=False,
        num_workers=2
    )

3.训练模型,测试准确率

数据读取完成,我们就可以训练模型,以及测试模型准确率

 for i in range(3):
        running_loss=0
        for index,data in enumerate(trainloader):
            x,y=data
            x=x.cuda()
            y=y.cuda()
            x,y=Variable(x),Variable(y)

            opt.zero_grad()

            h=model(x)
            loss1=loss(h,y)
            loss1.backward()
            opt.step()

            running_loss+=loss1.item()
            if index % 10 == 9:
                avg_loss = running_loss/ 10.

                running_loss = 0

                print('avg_loss', avg_loss)

            if index%1000==99:
                acc=0
                total=0
                for data  in testloader:
                    images,labels=data
                    outputs=model(Variable(images.cuda()))
                    _,predicted=torch.max(outputs.cpu(),1)
                    total+=labels.size(0)
                    bool_tensor=(predicted==labels)
                    acc+=bool_tensor.sum()

                print("1000张精度为 %d  %%"%(100*acc/total))

四、VGG缺点

在vgg网络中,按照道理来说,随着层数的不断提高,网络模型会越来越好,但是研究发现,随着层数的不断提高,准确率缺不断下降,为了这个问题,随后提出的残差网络,解决了这一问题。文章来源地址https://www.toymoban.com/news/detail-779851.html

到了这里,关于经典卷积神经网络——VGG16的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于卷积神经网络VGG的猫狗识别

    !有需要本项目的实验源码的可以私信博主! 摘要: 随着大数据时代的到来,深度学习、数据挖掘、图像处理等已经成为了一个热门研究方向。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。这也是深度学习在当下备受欢

    2024年02月12日
    浏览(45)
  • 深度学习12. CNN经典网络 VGG16

    VGG(Visual Geometry Group)是一个视觉几何组在2014年提出的深度卷积神经网络架构。 VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG19最为著名。 VGG16和VGG19网络架构非

    2023年04月09日
    浏览(33)
  • 改进YOLOv8 | 即插即用篇 | YOLOv8 引入 RepVGG 重参数化模块 |《RepVGG:让VGG风格的卷积神经网络再次伟大》

    我们提出了一种简单但功能强大的卷积神经网络结构,该模型在推理时类似于VGG,只有3×3的卷积和ReLU堆叠而成,而训练时间模型具有多分支拓扑结构。训练时间和推理时间结构的这种解耦是通过结构重新参数化技术实现的,因此该模型被命名为RepVGG。在ImageNet上,RepVGG达到了

    2023年04月27日
    浏览(53)
  • 神经网络之VGG

    目录 1.VGG的简单介绍    1.2结构图 3.参考代码 VGGNet-16 架构:完整指南 |卡格尔 (kaggle.com)    经典卷积神经网络的基本组成部分是下面的这个序列: 带填充以保持分辨率的卷积层; 非线性激活函数,如ReLU; 汇聚层,如最大汇聚层。 而一个VGG块与之类似,由一系列卷积层组

    2024年02月11日
    浏览(29)
  • VGG神经网络模型的架构

    1、特征层(Features): 顺序层(Sequential),其中包含一系列的卷积层、激活函数和最大池化层。 网络的输入是一个3通道(RGB)图像。 第一个卷积层(Conv2d)具有64个滤波器,卷积核大小为3x3,步长为1x1,填充为1x1。 使用的激活函数是ReLU(修正线性单元)。 这种卷积层后跟

    2024年02月07日
    浏览(36)
  • 深度学习——VGG16模型详解

    1、网络结构 VGG16模型很好的适用于分类和定位任务,其名称来自牛津大学几何组(Visual Geometry Group)的缩写。 根据卷积核的大小核卷积层数,VGG共有6种配置,分别为A、A-LRN、B、C、D、E,其中D和E两种是最为常用的VGG16和VGG19。 介绍结构图: conv3-64 :是指第三层卷积后维度变

    2024年01月16日
    浏览(43)
  • 经典卷积神经网络-LeNet-5

    LeNet-5是Yann LeCun等人在《Gradient-Based Learning Applied to Document Recogn》论文中提出的一个卷积神经网络,LeNet的基本思想和结构为后来更复杂的神经网络提供了灵感,并为研究者们提供了深入理解卷积神经网络的起点。 如图所示,这是论文中所介绍的LeNet-5网络结构。输入为一个3

    2024年02月03日
    浏览(38)
  • 卷积神经网络CNN的经典模型

    ILSVRC是一项基于 ImageNet 数据库的国际大规模视觉识别挑战赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC) (1)1958年,Rosenblatt发明了感知机。用于对输入的多维数据进行二分类且能够使用梯度下降法自动更新权值。 缺点:只能处理线性分类问题。 (2)1986年,Geoffrey Hi

    2024年02月07日
    浏览(37)
  • “深度学习”学习日记:Tensorflow实现VGG每一个卷积层的可视化

    2023.8.19 深度学习的卷积对于初学者是非常抽象,当时在入门学习的时候直接劝退一大班人,还好我坚持了下来。可视化时用到的图片(我们学校的一角!!!)以下展示了一个卷积和一次Relu的变化  作者使用的GPU是RTX 3050ti 在这张图像上已经出现了Cuda out of memory了。防止其他

    2024年02月11日
    浏览(41)
  • 【图像分类】理论篇(2)经典卷积神经网络 Lenet~Densenet

    目录 1、卷积运算 2、经典卷积神经网络 2.1 Lenet 网络构架 代码实现 2.2 Alexnet 网络构架 代码实现 2.3 VGG VGG16网络构架 代码实现 2.4 ResNet ResNet50网络构架 代码实现  在二维卷积运算中,卷积窗口从输入张量的左上角开始,从左到右、从上到下滑动。 当卷积窗口滑动到新一个位

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包