이 레슨과 관련된 학습 키워드
인공지능(AI) — 기계가 생각하는 법 → 딥러닝(Deep Learning) — 인공 신경망의 세계 → 합성곱 신경망(CNN) — 이미지를 이해하는 네트워크 → CNN 기초
합성곱, 풀링, 그리고 완전연결층(fully connected layer)을 포함한 완전한 CNN 분류기를 구축합니다.
self.features = nn.Sequential(nn.Conv2d(3,32,3,padding=1), nn.BatchNorm2d(32), nn.ReLU(), nn.MaxPool2d(2), ...)self.classifier = nn.Linear(2048, num_classes)이번 레슨에서는 씨엔엔을 처음부터 끝까지 직접 구현해볼 거예요.
먼저 전체 그림을 파악하는 게 중요해요.
그림 왼쪽을 보세요. 입력 이미지가 서른둘 곱하기 서른둘 곱하기 삼 크기로 들어옵니다.
씨파텐 이미지는 알지비 세 채널 컬러 이미지예요.
이 이미지가 첫 번째 블록을 통과하면 어떻게 될까요?
그림 가운데를 보시면, 블록 원에서 컨브투디가 세 채널을 열여섯 채널로 바꿔요.
그 다음 배치놈으로 정규화하고, 렐루로 비선형성을 추가해요.
마지막으로 맥스풀링이 해상도를 절반으로 줄여줍니다.
서른둘이 열여섯으로 줄었죠? 이게 핵심이에요.
블록 투를 보세요. 같은 패턴인데 채널이 열여섯에서 서른둘로 늘어나요.
해상도는 또 절반, 팔 곱하기 팔이 됩니다.
블록 쓰리도 마찬가지예요. 채널 육십사, 해상도 사 곱하기 사.
그림 오른쪽 분류부를 보세요.
플래튼이 사 곱하기 사 곱하기 육십사를 천이십사차원 벡터로 펴줍니다.
이 벡터가 두 개의 리니어 레이어를 거쳐 열 개 클래스 확률로 변환돼요.
그림 아래쪽 파라미터 수를 보세요.
컨브원은 겨우 사백사십팔개인데, 에프씨 레이어는 십삼만 개가 넘어요.
파라미터의 대부분이 에프씨에 몰려 있는 거예요.
맨 아래 텐서 차원 변화를 따라가 보세요.
비, 삼, 서른둘, 서른둘에서 시작해서 비, 열까지 줄어드는 흐름이 보이죠?
이 전체 흐름을 이해하면 씨엔엔 코드 구현이 훨씬 쉬워집니다.
선생님: 씨엔엔 전체 구조에서 가장 중요한 포인트가 뭘까요?
학생: 블록을 거칠수록 해상도는 줄고 채널은 늘어나는 패턴이요?
선생님: 정확해요! 공간 정보를 압축하면서 특징의 추상화 수준을 높이는 거예요.
학생: 그런데 파라미터가 에프씨에 집중되는 게 문제 아닌가요?
선생님: 맞아요. 그래서 현대 씨엔엔은 글로벌 에버리지 풀링으로 에프씨를 줄여요. 레즈넷이 대표적이죠.
학생: 아, 그래서 레즈넷이 파라미터 효율이 좋은 거군요!