Paper : https://ieeexplore.ieee.org/abstract/document/726791
Convolutional Neural Network 연구의 시초라고 할 수 있는 LeNet 입니다. 논문 제목은 "Gradient-based learning applied to document recognition" 이며, 인용 수가 무려 54,056회나 되고, 1998년에 처음 공개되었습니다. LeNet은 CNN을 처음으로 개발한 얀 르쿤(Yann Lecun) 연구팀이 1998년에 개발한 CNN 알고리즘의 이름입니다.
LeNet-5의 구조
LeNet-5의 구조는 아래와 같습니다.
3개의 Conv Layer (C1, C3, C5)로 구성되어 있으며, 2개의 Sub-sampling Layer(S2, S4), 그리고 1개의 Full-connected Layer(F6)으로 구성되어 있습니다. 활성화 함수로는 tanh 함수를 사용했다고 합니다.
Input
32x32 크기의 이미지
C1
Input 데이터로 부터 5x5 크기를 갖는 filter 6개를 통해 28x28 사이즈의 feature map 6개를 생성
S2
C1으로 부터 2x2 크기의 filter 6개를 통해 14x14 크기의 feature map 6개를 생성
이 때 average pooling을 사용하게 되는데, 2x2 receptive field 가 overlapping 되지 않도록 적용
C3
S2로 부터 5x5 크기의 filter 16개를 통해 10x10 크기의 feature map 16개를 생성
S4
C3으로 부터 다시 sub-sampling 수행
즉, average pooling 수행. 2x2 크기의 filter 16개를 통해 5x5 크기의 feature map 16개 생성
C5
S4로 부터 5x5 크기의 filter 120개를 통해 1x1 크기의 feature map 120개를 생성
F6
C5로 부터 1x1 feature map 84개를 생성
여기서 출력 값이 84개인 이유는 ASCII set을 해석하기 위한 적합한 형태로 나와주길 원했기 때문에 그렇게 설정했다고 합니다. 각 문자가 7x12 크기의 bitmap이라고 하네요.
Output
최종적으로 10개의 output을 생성합니다. 데이터세트를 MNIST(0부터 9까지 이루어진 숫자 데이터 세트)를 사용했기 때문입니다.
PyTorch 구현
pytorch로 구현해보면 다음과 같습니다.
from torch import nn
import torch.nn.functional as F
class LeNet_5(nn.Module):
def __init__(self):
super(LeNet_5,self).__init__()
self.conv1 = nn.Conv2d(1, 6, kernel_size=5, stride=1)
self.conv2 = nn.Conv2d(6, 16, kernel_size=5, stride=1)
self.conv3 = nn.Conv2d(16, 120, kernel_size=5, stride=1)
self.fc1 = nn.Linear(120, 84)
self.fc2 = nn.Linear(84, 10)
def forward(self, x):
x = F.tanh(self.conv1(x))
x = F.avg_pool2d(x, 2, 2)
x = F.tanh(self.conv2(x))
x = F.avg_pool2d(x, 2, 2)
x = F.tanh(self.conv3(x))
x = x.view(-1, 120)
x = F.tanh(self.fc1(x))
x = self.fc2(x)
return F.softmax(x, dim=1)
model = LeNet_5()
summary(model, (1, 32, 32))
torchsummary 라이브러리를 이용하면 아래와 같이 요약 할 수 있습니다. 굉장히 단순한 구조입니다.
'AI Research Topic > Backbone' 카테고리의 다른 글
[Backbone] VanillaNet: the Power of Minimalism in Deep Learning (6) | 2023.05.26 |
---|---|
[Backbone] ResNet (7) | 2023.04.14 |
[Backbone] VGGNet (0) | 2023.04.14 |
[Backbone] AlexNet (0) | 2023.04.14 |
[Paper Review] MobileOne: An Improved One millisecond Mobile Backbone (0) | 2023.04.06 |