VGGNet
Posted JeJe_33
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VGGNet相关的知识,希望对你有一定的参考价值。
1.概述
VGG网络在2014年的图像分类竞赛中获得第二名,验证了小卷积核对特征的强大的提取能力,并且把卷积层深度推到了16-19层,使用3*3卷积核
2.网络结构
2.1 模型架构
以vgg16为例,16即13个卷积层+3个全连接层,需要注意的是,vgg输入大小为固定的224*224的rgb图像,数据格式转化如下图
需要注意的是,作者在原文中特意提到bn层并不会增加准确性,反而会增加计算复杂度,因此不采用归一化
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))
以上是关于VGGNet的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow实战——CNN(VGGNet19)——图像风格转化
手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)
手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)