图像识别之AlexNet
Posted 我的计算机视觉之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像识别之AlexNet相关的知识,希望对你有一定的参考价值。
“ 深度学习基础知识,图像识别是什么东西,略”
01
—
前提是要懂深度学习,图像识别的基本概念。
AlexNet 是 Alex Krizhevsky 等人在 2012 年提出的,夺得了 2012 年 ImageNet LSVRC 的冠军。在随后的比赛里,ImageNet的冠军差不多都是利用卷积神经网络来实现的。
网络结构
可以看的出来,这里有5个卷积层,3个全连接层。最后一个全连接是一个1000维的向量,表示可以分为1000个类别,即通过softmax之后,向量中哪个元素的概率大,就把图像分为哪种类别。
其中卷积层用来提取细节特征,而全连接层用来组合高层特征。
02
—
pytorch源码分析
这里我们需要先导入torch的nn模块:
import torch.nn as nn
#定义AlexNet网络结构
class AlexNet(nn.Module):
def __init__(self, num_classes):
#这里调用AlexNet的父类nn.Module,以便使用父类中的属性和方法
super(AlexNet, self).__init__()
#一个有序的容器,神经网络模块将按照在传入构造器的顺序依次被添加到计算图中执行
#用这个容器定义网络结构
self.features = nn.Sequential(
#这里是第一层卷积,传入3通道的原始图片,输出64通道的特征图,卷积核的尺寸是11*11,步长是4,原图周围填充5层0
nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=5),
#这里是第一层激活函数层,inplace=true的作用是直接修改上层卷积的结果,而不是重新复制一个结果,这样节省空间
nn.ReLU(inplace=True),
#这里是第一层最大池化,池化核是2*2,步长是2
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(64, 192, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(192, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(256, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=2, stride=2),
)
#卷积层结束后这里定义了一层的全连接,其实有三层,这里简化成了一层
#参数的意思是将256维的向量,通过全连接得到num_classes的向量
self.fc = nn.Linear(256, num_classes)
#这是前向传播的函数,输入的是图像,得到的是最后的全连接后的数据
def forward(self, x):
#通过卷积层
x = self.features(x)
#将特征图转化成向量
x = x.view(x.size(0), -1)
#将向量传入全连接层
x = self.fc(x)
return x
以上是关于图像识别之AlexNet的主要内容,如果未能解决你的问题,请参考以下文章