VGGNet

1.概述

VGG网络在2014年的图像分类竞赛中获得第二名,验证了小卷积核对特征的强大的提取能力,并且把卷积层深度推到了16-19层,使用3*3卷积核

2.网络结构

在这里插入图片描述
2.1 模型架构
以vgg16为例,16即13个卷积层+3个全连接层,需要注意的是,vgg输入大小为固定的224*224的rgb图像,数据格式转化如下图
在这里插入图片描述
需要注意的是,作者在原文中特意提到LRN层并不会增加准确性,反而会增加计算复杂度,因此不采用归一化(感谢指正)
关于LRN局部响应归一化公式如下:
在这里插入图片描述
即沿着通道方向进行叠加归一化。

在这里插入图片描述

3.代码

import torch
import torch.nn as nn
import cv2

class Vgg16(nn.Module):
    def __init__(self,num_classes):
        super().__init__()
        self.l1=self._conv2(3,63)
        self.l2=self._conv2(64,128)
        self.l3=self._conv3(128,256)
        self.l4=self._conv3(256,512)
        self.l5=self._conv3(512,512)
        self.classifier=self._linear(7*7*512,num_classes)

    def forward(self,x):
        l1=self.l1(x)
        l2=self.l2(l1)
        l3=self.l3(l2)
        l4=self.l4(l3)
        l5=self.l5(l4)
        c=self.classifier(l5)
        y=nn.Softmax(-1)(c)
        return y

        
    
    def _conv2(self,in_channel,out_channel):
        return nn.Sequential(nn.Conv2d(in_channel,out_channel,3,1,1),
        nn.ReLU(),
        nn.Conv2d(out_channel,out_channel,3,1,1),
        nn.ReLU(),
        nn.MaxPool2d(2,2)
        )
    def _conv3(self,in_channel,out_channel):
        return nn.Sequential(nn.Conv2d(in_channel,out_channel,3,1,1),
        nn.ReLU(),
        nn.Conv2d(out_channel,out_channel,3,1,1),
        nn.ReLU(),
        nn.Conv2d(out_channel,out_channel,3,1,1),
        nn.ReLU(),
        nn.MaxPool2d(2,2))
    def _linear(self,in_length,out):
        return(nn.Linear(in_length,4096),
        nn.ReLU(),
        nn.Linear(4096,4096),
        nn.ReLU(),
        nn.Linear(4096,out))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值