1. LeNet (LeCun, 1998)
1-1) 구조
LeNet은 industry에 아주 성공적으로 적용된 최초의 Convolution Network이다. [CONV - POOL] 구조가 2번 반복되고, filter는 strdie=1의 5x5 filter를 사용하며 끝단에는 2개의 FC Layer를 쌓았다. 매우 간단한 구조이지만, 꽤 우수한 성능을 보이는 CNN의 조상이다.
2. AlexNet (Krizhevsky, 2012)
최초의 Larg scale CNN이며, ImageNet Classification Task에서 놀라운 성능을 보여 2012년 Image Classification Benchmark에서 우승한 모델이다. 2012년에 등장한 다른 non-딥러닝 모델을 능가하는 성능을 보여줘, Convolution Net 연구의 부흥을 일으킨 장본인이다. CNN기반 최초의 우승 모델이며, 이후 수년동안 AlexNet은 대부분 CNN 아키텍쳐의 베이스 모델로 사용된다.
2-1) 구조
기본적으로 [conv-pool-normalization] 구조가 2번 반복된다. 그 후에 CONV layer가 조금 더 붙고 Max Pooling Layer를 거친 뒤, 3개의 FC-Layer를 통과하는 구조이다. CONV Layer에서는 stride=4인 11x11 filter를 96개 사용하며, POOL Layer에서는 strdie=2인 3x3 filter를 사용한다. 생긴 것만 봐서는 LeNet과 상당히 유사하고 레이어만 더 많아진 것을 확인할 수 있다.
-
cf) Size 계산해보기
-
Input Image Size
ImageNet 기준 input image 크기는 227x227x3이다.
-
CONV1 Layer
-
출력 사이즈
$(227-11)/4 + 1 = 55$ 이므로 activation map의 width와 height는 55x55이다. filter는 11x11 size를 사용하게 되는데, input image의 모든 channel에 대해 연산이 필요하므로 filter의 depth는 3이된다. 이러한 filter가 총 96개 있으므로, 최종 output image의 shape은 $(55,55,96)$이 된다.
-
전체 파라미터 수
11x11x3의 필터가 96개 있으므로, $11 \times 11 \times 3 \times 96 = 34,848$이 CONV1의 전체 파라미터 수가 된다.
-
-
POOL1 Layer
-
출력 사이즈
$(55-3)/2 + 1 = 27$인데, pooling layer에서는 Image의 depth가 변하지 않기 때문에 최종적으로 (27x27x96)이 Activation map의 shape이 된다.
-
전체 파라미터 수
Pooling Layer에는 파라미터가 없다(헷갈림 주의). Pooling layer는 단순히 down sampling의 용도로만 사용되므로 파라미터 필요 없음에 유의하자.
-
-
2-2) 특징
첫 Layer에서 모델이 두 개로 나눠져서 서로 교차하는 것을 확인할 수 있는데, 이는 당시 GPU 메모리의 한계로 인해 레이어를 나눠서 넣었기 때문이다(55x55x96 -> 55x55x48 2개). 따라서 대부분의 CONV Layer는 GPU내의 48개의 Feature만 사용하여 학습하였고, 끝단의 FC Layer와 CONV3 Layer에서는 GPU간의 통신을 바탕으로 전체 Feature Map을 가져와 합쳐주었다.
2-3) Details
-
Activation Function
Activation function으로는 ReLU를 사용하였다.
-
Optimizer
optimizer로는 SGD + Momentum을 사용하였다.
-
Dropout / Batch size
Dropout을 사용했으며, Batch size는 128로 설정하였다.
-
Data Augmentation
flipping, jittering, cropping, color norm 등등 매우 다양한 data augmentation을 해주었다.
-
Learning Rate Decay
초기 Learning rate는 1e-2로 initialize했으며, val accuracy가 올라가지 않는 지점에서는 학습이 종료되는 시점까지 Learning Rate를 1e-10까지 줄였다.
-
Weight Decay
weight decay를 사용했다. weight decay는 overfitting 문제를 해결하기 위한 방법 중 하나로, 특정 weight가 너무 큰 값을 가지지 않도록 패널티 항목을 추가하는 것이다. L1/L2 Regularization을 주로 사용한다.
-
Model Ensemble
마지막에는 7개의 CNN 모델을 앙상블하여 error를 18.2% -> 15.4%까지 감소시켰다.
3. ZFNet (Zeiler and Fergus, 2013)
AlexNet의 하이퍼 파라미터를 개선한 모델이다. AlexNet과 레이어 수도 같고 기본적인 구조도 같지만, stride size, filter 수와 같은 하이퍼 파라미터를 조절해서 AlexNet의 error rate를 개선시켰다. Alex Net과 기본 아이디어는 동일하다.
4. VGGNet (Oxford, 2014)
2014년은 아키텍쳐도 많이 변했고 성능이 향상되었으며, 네트워크가 매우 깊어지기 시작한 시기이다. VGGNet은 이 시기에 GoogLeNet과 함께 우수한 성능을 기록한 CNN 아키텍쳐이다. 대표적으로 VGG16과 VGG19가 있으며, VGG19가 성능은 아주 조금 더 좋다. 그러나 VGG19는 메모리 사용량이 조금 더 많기 때문에 보통은 VGG16을 주로 사용한다. AlexNet처럼 앙상블 기법을 사용하였다.
4-1) Use Small Filter
VGG는 기존 CNN 아키텍쳐 대비 훨씬 깊어졌고(alex:8, vgg:16~19), 3x3 크기의 아주 작은 필터를 사용한다(3x3은 이웃 픽셀을 포함할 수 있는 가장 작은 단위임). 이렇게 작은 필터를 유지하며 주기적으로 pooling을 수행하여 전체 네트워크를 구성하였다. 또한, Layer가 깊어지는 만큼 Non-Linearity가 증가하게 되는데, 이를 통해 더 자세한 특징을 잡아낼 수 있게 되어 ImageNet에서 7.3%의 top 5 error를 기록하였다. 그렇다면 VGG에서 이렇게 작은 필터를 사용한 이유는 무엇일까? 그 이유에 대해 차근차근 알아보도록 하자.
4-1-1) Receptive Field (수용 영역)
우선 Receptive Field란, filter가 한번에 볼 수 있는 입력의 Spatial Area를 일컫는 말이다. 다음의 간단한 예시를 통해 Receptive Field를 알아보자
다음과 같이 3x3 filter를 사용하는 CONV1 Layer를 떠올려보자. filter는 stride만큼 움직이면서 filter 영역에 해당하는 픽셀들과 계속해서 합성곱을 계산한다. 따라서 3x3 filter가 바라본 하나의 위치는 다음 Layer의 1픽셀로 들어가게 된다.
또한, 마찬가지로 CONV2 Layer에서도 3x3 filter를 사용한다. CONV1의 3x3 영역이 CONV2에서는 1x1 영역으로 취급되기 때문에, CONV2 Layer의 3x3 영역은 CONV1 Layer의 5x5 영역을 바라보는 것과 동일하다.
이러한 과정을 반복하게 되면, CONV4의 1x1 영역은 CONV1의 7x7영역을 바라보는 것과 동일하다. 즉, 3x3 filter를 3번 쌓는 것은 7x7 filter를 사용하는 것과 실질적으로 동일한 Receptive Field를 갖는 것이다.
그렇다면 왜 filter를 이렇게 작은 filter로 여러번 나눠 사용하는 것일까?
4-1-2) Parameter 개수
우선 7x7 Filter의 Parameter 개수는 $7 \times 7 \times C \times N$ 이다(C=채널 수, N=필터 수). 여기서, input image의 depth와 output image의 depth를 맞춰주기 위해 filter 개수는 channel의 수와 동일하게 맞춰주었다. 따라서 7x7 filter의 parameter 개수는 $7^2 C^2$이다.
3x3 Filter의 경우, 7x7 Filter와 동일한 Receptive Field를 맞추어주기 위해서는 해당 Filter를 3번 쌓아주어야 한다. 따라서, 위와 같은 맥락으로 파라미터 개수는 $3^2 C^2 \times 3$이 된다. 최종적으로 정리해보면 다음과 같다.
\[\mathsf{7x7 \; Filter}\\ 7^2C^2 = 49C^2\\\] \[\mathsf{3x3 \; Filter}\\ 3^2C^2 \times 3 = 27C^2\]동일한 Receptive Field에 대해, filter size를 줄임으로써 파라미터의 수를 $49C^2$에서 $27C^2$로 줄일 수 있었다. 또한, 층이 깊어지면서 Non-Linearity를 더 추가할 수 있게 되어 더 복잡한 Feature를 뽑아낼 수 있게 되었다. 이를 통해 VGG는 연산량도 줄이면서 Accuarcy도 높일 수 있게 되었다.
4-2) 문제점
4-2-1) 메모리 문제
VGG의 각 노드는 약 4byte의 메모리를 차지한다. 따라서 단순히 Forward Pass만 해도 약 100MB의 메모리가 필요하다(Backward Pass까지 고려하면 더 많은 메모리 필요). 따라서, 만약 5GB의 메모리를 사용한다면 50장의 이미지밖에 처리하지 못하는 것이다.
4-2-2) 총 파라미터 개수
VGGNet의 총 파라미터 개수는 1억 3800만개인데, 이는 AlexNet(6800만)의 약 2배 수준이다. 특히 FC-Layer에 1억개가 넘는 파라미터가 있다. 따라서 최근 일부 네트워크는 파라미터를 획기적으로 줄이기 위해 FC Layer를 줄이기도 한다.
5. GoogLeNet (Google, 2014)
InceptionNet이라고도 하며, 2014년 classfication challenge에서 우승하였다. 총 22개의 레이어를 가지고 있고, VGGNet처럼 매우 깊은 네트워크이다. 효율적인 계산에 초점을 맞춰 네트워크를 디자인 하였으며, Inception Module이라는 미니 네트워크를 여러개 쌓아서 만들었다. 또한 위에서 잠깐 언급했듯이, 파라미터를 줄이기 위해 FC-Layer를 제거하였다. 그 결과, 파라미터 수를 500만개까지 획기적으로 줄였다. AlexNet대비 약 20배 적은 파라미터를 가지고 있지만, 훨씬 더 깊다. 그렇다면 GoogLeNet의 메인 아이디어인 Inception Module이란 무엇일까?
5-1) Inception Module
5-1-1) 기본 Idea
기존 CONV Layer는 하나의 filter를 사용하여 Feature Map을 생성하였으나, GoogLeNet은 여러 종류의 Filter를 병렬적으로 사용하고자 하였다. 그래서 탄생한 것이 바로 Inception Module
이다. inception module 내부에는 동일한 입력을 받는 서로 다른 다양한 필터들이 병렬로 존재한다. 이전 레이어의 입력을 받아 다양한 Convolution 연산을 수행하고, 각각의 출력들을 모두 depth 방향으로 합친다. 이렇게 합치면 하나의 tensor로 출력이 결정되고, 이 하나의 출력을 다음 Layer로 전달하게 된다.
5-1-2) 계산비용의 문제점
그러나 Inception Module에는 한 가지 문제점이 있었는데, 계산을 거듭할수록 Depth가 점점 늘어나 연산량이 매우 많아진다는 것이다. 가령, 다음과 같이 input으로 28x28x256을 받는 inception module을 생각해보자. (이 때, spatial dimension은 항상 일정하도록 stride와 padding이 적절히 설정되어 있다.)
이렇게 되면, 최종 Tensor의 Depth는 Filter의 개수만큼 점점 쌓이게 되며(128+192+96+256), 파라미터 수는 매우 커지게 된다. 위 예시의 경우, 파라미터 수는 28 x 28 x (128+192+96+256) = 526,848개이다. 즉, Inception Module의 input은 28x28x256이었으나, output은 28x28x672가 된 것이다. 또한, GoogLeNet은 이러한 Inception Module이 계속해서 쌓여있는 구조이기 떄문에 계산량은 기하급수적으로 늘어나게 된다. 그렇다면 GoogLeNet은 이러한 문제를 해결하기 위해 어떠한 방법을 사용했을까?
5-1-3) Bottleneck Layer
GoogLeNet은 계산량을 줄이고 Depth를 축소하기 위해, 1x1 CONV Layer인 Bootleneck Layer
를 도입하였다. Bottlenect Layer는 연산을 수행하기에 앞서, input의 spatial dimension은 유지한 채 입력을 더 낮은 차원으로 보내는 방법이다.
가령, 56x56x64의 input img에 32개의 1x1 CONV filters를 사용하면, 이미지 크기는 그대로 유지한 채 depth를 32로 줄일 수 있다. 따라서 bottlenect layer는 input feature map들간의 linear combination을 도와주는 매개체라고 생각할 수 있으며, 주요 아이디어는 1x1 conv를 사용하여 입력의 depth를 줄인다는 것이다. 아래 그림은 Bottleneck Layer를 추가한 Full Inception Module이다.
CONV 이전에 1x1 conv가, POOL 이후에 bottleneck layers(1x1 conv)가 추가된 것을 확인할 수 있다. 파라미터의 수는 bottleneck layer를 쓰기 전 854M에서 358M으로 2배 이상 감소하였다.
5-2) 구조
가중치를 가진 레이어는 총 22개이며, inception moudule은 1x1/3x3/5x5 conv layer를 병렬적으로 가지고 있다. AlexNet 대비 12배 적은 파라미터를 가지고 있다고 한다. 전체적인 구조는 다음과 같다.
-
Stem Network
일반적인 네트워크 구조로 시작한다. [Conv-Pool-Conv-Conv-Pool]의 구조를 가진다.
-
Inception Modules
조금씩 다른 inception module을 쌓는다. 특이한 점은, 중간에
보조 분류기(Auxiliary Classifier)
가 존재한다는 것이다. 보조 분류기는 AVG POOL, CONV, FC로 이루어져 있으며 softmax로 ImageNet Class를 구분한다. GoogLeNet이 매우 깊기 때문에 Vanishing Gradient 예방 차원에서 넣어준 것이며, 추가적인 Gradient 신호를 흘려주어 중간 레이어의 학습을 돕는다. 최종 Loss를 계산할 떄는 Auxiliary Classifier의 Loss도 반영한다. -
Classifier Output
FC-Layer를 걷어내고,
Global Average Pooling(GAP) Layer
를 깔았다. 기존 FC-Layer는 Feature Map을 1차원 벡터로 펼쳐서 Activation Function을 거친 뒤, 원하는 클래스의 개수로 맞춰주는 방식이었다. 그러나 Global Average Pooling 방식은 Feature Map을 Depth 방향으로 각각 평균 내어 Flatten을 시켜주는 방식이다. FC layer로 활성함수를 거치지 않아도 이미 깊은 네트워크를 거치면서 효과적으로 Feature vector를 추출했기 때문에, 이렇게 해도 분류가 가능하다고 한다.
6. ResNet (Kaiming He, 2015)
ResNet은 152 레이어로 엄청나게 깊은 CNN 아키텍쳐이며, 기존의 어떤 네트워크보다도 깊다. 혹자는 이를 두고 혁명적(Revolution of Depth)으로 깊어졌다고 한다. 메인 아이디어는 Residual Connections
이며, ResNet 하나로 ImageNet, COCO Classification/detection 등 여러 대회 우승하였다.
6-1) Residual Connections
6-1-1) 기본 Idea
ResNet의 Residual Connections는 일반 CNN을 깊고 더 깊게 쌓게되면 어떻게 될까?
라는 질문으로부터 출발한다. 가령, VGG에 [conv-pool] 레이어를 깊게만 쌓는다고 과연 성능이 더 좋아질까? 그에 대한 대답은 No이다.
위 그래프에서 볼 수 있듯이, plain CNN을 56 Layer 쌓은 아키텍쳐의 test error가 20 Layer 쌓은 아키텍쳐보다 더 높게 나왔다. 이느 56-Layer가 Train Data에 overfitting 되었기 때문으로 예상했으나, training error도 56레이어가 더 높았다. 따라서 test에서 56-layer의 성능이 더 좋지 않은 이유가 overfitting 때문이 아니라는 것을 알게 되었다. ResNet 연구진들은 이를 Optimizer의 문제로 생각하였다. deeper model은 Optimization이 더 어렵기 때문이다.
ResNet은 이를 해결하기 위해 다음과 같은 Idea를 떠올렸다. 우선 더 얕은 모델의 가중치를 깊은 모델의 일부 레이어에 복사한다. 그리고 나머지 레이어는 input을 output으로 그냥 내보내는 identity mapping을 해버린다. 즉, CNN을 깊게 쌓았을 때 성능이 저하되는 것이 Optimization의 문제라면, 얕은 네트워크의 구조를 그대로 가져와서 identity mapping을 한다면, 적어도 얕은 네트워크 만큼의 성능은 나와야될 것이다
라는 가정을 세웠다. 이 motivation을 우리가 만들 모델에 녹이려면 어떻게 모델 아키텍쳐를 디자인해야할까?
6-1-2) Residual Learning (Skip Connection)
기존 Neural Net의 학습 목표는 x를 y로 mapping하는 함수 H(x)를 찾는 것이다. 따라서 H(x)-y를 최소화 하는 방향으로 학습을 진행한다. 그러나, ResNet의 Residual Learning은 Residual Function인 $F(x) = H(x) - x$를 최소화하는 방향으로 학습한다. 즉, input과 output의 차이를 0에 가깝게 만들겠다는 것이다. 내가 개인적으로 이해한 바로는, 다음과 같이 해석할 수 있을 것 같다.
Layer가 점점 깊어지고 끝단으로 갈수록, 학습이 점점 진행되기 때문에 H(x)와 x의 차이는 점점 줄어들어야 한다. 즉, x는 점점 출력값 H(x)와 가까워져 $F^{‘(n)}(x)$는 0에 수렴해야한다는 것이다. 여기서 0에 수렴시켜야 하는 값인 $F(x)=H(x)-x$를 Residual
이라고 하며, Resnet은 이러한 Residual이 0이 되도록 학습을 진행한다. Residual을 0에 수렴시킨다는 것은 점점 학습시켜야 할 학습량이 줄어드는 방향으로 학습이 진행된다는 것으로 해석할 수도 있겠다. 힌편, residual이 그저 가설일 뿐이고 필요 없다는 주장도 있으나 실제로는 Residual Learning을 사용하면 성능이 좋아지는 것이 fact이다.
이러한 Idea를 바탕으로, ResNet은 input으로 들어온 x를 그대로 보내고, Residual Block 안에서 계산된 F(x)를 학습한다. 이를 Skip Connection
이라고 한다. 이렇게 Residual Block 안에서 계산된 F(x)를 학습하는 것이 CONV Layer를 거쳐온 거대한 H(x)를 학습하는 것보다 훨씬 더 효율적이고, 좋은 성능을 보였다.
6-2) 구조
-
Stem Network
네트워크 초반은 Conv Layer가 추가적으로 붙는다.
-
Residual Blocks
하나의 Residual blocks는 2개의 3x3 conv layers로 이루어져 있으며, 일반적으로 이렇게 구성해야 잘 동작하는 것으로 알려져 있다. 이 Residual blocks를 매우 깊게(150 Layer) 쌓아올린 것이 바로 ResNet이다. 그리고 주기적으로 filter를 2배씩 늘리고 stride=2를 이용하여 down sampling해준다.
-
Classifier Output
네트워크 끝에는 FC-Layer가 없는 대신 GAP(Global Average Pooling) Layer를 사용하여, 하나의 Map 전체를 Average Pooling한다. 자세한 설명은 위에서 했기 때문에 생략한다. 마지막에는 ImageNet의 1000개 클래스를 맞춰주기 위한 FC Layer가 붙는다.
6-3) Bottleneck Layers
depth는 34, 50, 100까지 늘어나며 논문에서는 ImageNet 문제를 위해 152까지 늘린 것을 확인할 수 있다. 이 때, 모델 Depth가 50이상인 경우 Bottleneck Layers를 넣어주었다(GoogLeNet과 유사). 이로인해 3x3 conv Layer의 계산량을 줄이고, 다시 1x1 conv를 추가해서 depth를 다시 256으로 늘리는 구조를 취하고 있다.
6-4) Details
-
모든 Conv Layer 다음 Batch Norm을 사용하며 Weight Initialization은 Xavier를 사용함
-
위 방법은 SGD+Momentum에서 좋은 초기화 성능을 보인다고 함
-
Learning rate는 Learning rate 스케줄링을 통해서 validation error가 줄어들지 않는 시점에서 조금씩 줄여주었다(Learning Rate Decay).
-
minibatch 사이즈는 256이며, weight decay 사용, dropout은 사용하지 않았음
=> 성능 감소 없이 깊은 네트워크를 잘 학습시킬 수 있었으며, backprop 시 네트워크의 gradient flow를 잘 가져갔다. 또한, 깊은 네트워크에서 Train error가 줄어드는 문제를 해결하여, 네트워크가 깊어질수록 Training Error는 더 줄어들게 되었다.
6-5) ResNet의 성능 향상 관련 연구
6-5-1) Wide Residual Networks (Zagoruyko, 2016)
기존의 resnet은 Layer를 깊게 쌓는 것에 집중했지만, Zagoruyko는 depth가 아닌 residual이 중요한 것이라고 주장하였음. residual connection만으로도 충분하기 떄문에, 네트워크가 굳이 더 깊어질 필요 없다는 것이 Zagoruyko의 주장이다. 따라서 residual block을 더 넓게 만들었다(conv layer의 필터를 더 많이 추가). 기존 ResNet에 block당 F개의 filter만 있었다면, 이제는 FxK개의 필터로 구성하였다. 그 결과, 50 레이어만 있어도 152레이어의 기존 resnet보다 더 좋은 성능을 보이는 것을 확인할 수 있었다. 또한 depth 대신에 filter의 width를 늘리면, 병렬화가 더 잘되기 때문에 계산 효율이 증가한다.
6-5-2) ResNeXt(ResNet + inEXeption) (Xie, 2016)
ResNeXt또한 residual block의 width를 파고들어, filter의 수를 늘리는 데 집중했다. ResNeXt는 하나의 bottleneck resnet block을 병렬로 여러개 묶은 모양을 하고 있다. 마치 ResNet과 VGG가 결합된 모습이다.
6-5-3) stochastic depth (Huang, 2016)
네트워크가 깊어질수록 vanishing gradient 문제가 발생한다. short network에서는 이러한 vanishing gradient의 위험성이 낮기 때문에, stochastic depth는 train시에 레이어의 일부를 제거한다(Dropout과 유사). 즉, 일부 네트워크를 골라서 identitiy connection으로 만들어버리는 것이다.. 이렇게 shrot netwrok를 만들어서 train 하면 gradient가 더 잘 전달될 수 있게된다. test time에서는 full deep 네트워크를 사용하며, 매우 효율적인 방법이 될 수 있다.
7. Non-ResNet
7-1) FractalNet (Larsson, 2017)
FractalNet residual connection이 쓸모없다고 주장하여, residual connection이 전혀 없다. 대신, shallow/deep network의 정보 모두를 잘 전달하는 것이 중요하다고 생각하였다(fractal한 모습). FractalNet에서는 shallow/deep 경로를 모두 연결하고, train에서는 일부 경로만 사용, test에서는 모든 경로를 사용한다(dropout과 유사).
7-2) DenseNet(DENSEly Connected Convolutional NETworks) (Huang, 2017)
DenseNet의 Main idea는 Dense Block을 도입하는 것이다. 모든 레이어는 그 레이어 하위의 다른 모든 레어이와 연결되어 있으며, 레이어의 출력이 각 레이어의 출력과 concat된다. 그리고 이 값이 각 conv layer의 입력으로 들어간다(이 과정에서 dimension을 줄여주는 과정이 포함됨). 이러한 dense connection을 사용하면, 각 레이어의 출력이 다른 레이어에서 다시 쓰일 수 있기 때문에 기울기 소실문제를 해결하고, feature를 더 잘 사용할 수 있게 한다고 주장한다.
7-3) SqueezeNet (landola, 2017)
GoogLeNet과 같이 효율성을 중시한 CNN 아키텍쳐이다. squeeze layer는 1x1 필터들로 구성되고, 이 출력 값이 1x1/3x3 필터들로 구성되는 expand layer의 입력이 된다. SqueezeNet는 ImageNet에서 AlexNet 만큼의 Accuracy를 보이지만 파라미터는 50배 더 적었으며, 압축 시 AlexNet보다 500배 더 작아지게 된다. 또한 용량은 0.5Mb 밖에 안된다고 한다.
8. 아키텍쳐 성능 요약 (2017)
8-1) Top-1 Accuracy
8-2) 계산성능
아래 그림은, 각 아키텍쳐의 성능을 나타낸 것이다. Y축은 top-1 Accuarcy, X축은 연산량, 원의 크기는 메모리 사용량이다.
-
GoogLeNet
-
가장 효율적인 네트워크.
-
x축의 가장 왼쪽에 붙어있으며 메모리 사용도 적음
-
-
AlexNet
-
Accuracy는 매우 낮은편이다.
-
아키텍쳐 자체의 몸집이 작아 계산량도 낮다.
-
그러나 메모리 사용량은 매우 비효율적인 모습
-
-
ResNet
-
적당한 효율성.
-
메모리 사용량, 계산량은 중간정도이다.
-
그러나 Accuaracy는 최상위인 모습이다.
-
8-3) forward pass 시간
8-4) 전력소모량
댓글남기기