컨볼 루션 신경망 (CNN) 및 AlexNet 아키텍처 작업

공동 저자 : Divya Jain & Amelia Dong

Unsplash에 Clark Van Der Beken의 사진

CNN은 주로 이미지 분석에 사용되는 인기있는 인공 신경망 유형입니다. CNN이 다른 인공 신경망과 다른 점은 "컨볼 루션 계층"이라고하는 숨겨진 계층입니다. 컨볼 루션 레이어를 사용하면 CNN은 이미지에서 패턴 (예 : 가장자리, 모양 또는 개체의 질감)을 감지 할 수 있습니다. 이러한 패턴은 컨벌루션 연산에서 필터를 사용하여 결정됩니다.

다음 게시물에서는 CNN의 두 가지 주요 구성 요소 인 컨볼 루션 레이어와 풀링 레이어 (때로는 선택 사항이지만 매우 중요 함)에 대해 자세히 알아볼 것입니다. 그런 다음 Alex Krizhevsky의 이름을 딴 AlexNet이라는 유명한 CNN 아키텍처에 대해 설명합니다. 마지막으로 AlexNet의 종단 간 구현이 마지막에 시연됩니다.

그렇다면 "컨볼 루션"이란 정확히 무엇이며 CNN에서 어떻게 수행됩니까?

컨볼 루션 레이어는 어떻게 작동합니까?

6 * 6 * 1 이미지를 예로 들어 보겠습니다 (1은 색상 채널의 수를 나타내며이 경우 그레이 스케일 이미지로 가정합니다).

예 1 — 컨벌루션 연산

여기서 3 * 3 필터 ( 커널 이라고도 함 , 3 * 3은 커널 크기)가 시작됩니다. 필터의 숫자는 이것이 에지 검출기임을 나타내며 원래 입력에서 에지 특징을 추출합니다. 필터는 입력 이미지와 컨볼 루션되고 추천 이미지를 출력합니다. 컨볼 루션 프로세스는 예제 1에 나와 있습니다.

추천 이미지의 크기를 어떻게 알 수 있습니까?

컨벌루션 레이어 이후 출력 이미지의 크기를 계산하기 전에 먼저 패딩과 스트라이드라는 두 가지 중요한 개념을 이해해야합니다.

간단히 말해서 패딩은 컨벌루션 연산이 적용되기 전에 이미지의 각 테두리에 픽셀을 추가하는 것을 의미합니다. 패딩이 도입 된 두 가지 이유는 다음과 같습니다.

  1. 패딩이 없으면 신경망에서 컨벌루션 레이어의 수가 증가함에 따라 이미지가 1 * 1과 같은 매우 작은 크기로 축소 될 수 있습니다. 그러나 이전 기능 위에 새로운 기능이 설정 될 때마다 원본 이미지가 너무 크게 축소되는 것을 원하지 않을 수 있습니다.
  2. 패딩이 없으면 모든 단일 픽셀이 완전히 활용되는 것은 아닙니다. 예를 들어 위의 예에서 왼쪽 상단 모서리의 픽셀은 컨볼 루션에서 한 번만 사용됩니다. 그러나 일부 중앙 픽셀은 여러 번 사용할 수 있습니다. 즉, 이미지 가장자리 근처에서 많은 정보 손실이있을 수 있습니다.
예제 2.1 — Keras에서 Conv2D의 제로 패딩 및 패딩 옵션
예제 2.2 — 패딩을 사용한 컨벌루션 연산

걷기

스트라이드는 입력 이미지에서 이동하는 픽셀 수를 나타냅니다. 위의 예에서 모든 보폭은 (1,1)입니다. 전체 컨볼 루션 프로세스는 다음과 같으며 기능 이미지의 숫자는 프로세스의 결과입니다.

예제 3 : 하나의 필터로 컨볼 루션 된 이미지 처리

여기서 중요한 점은 스트라이드가 공간 특징을 축소하고 수용 필드가 너무 많이 겹치는 것을 방지한다는 것입니다.

마지막으로, 추천 이미지의 크기를 계산하는 방법에 대한 질문으로 돌아가서 일반 공식 ¹이 있습니다.

결과가 정수가 아니면 내림됩니다.

풀링 레이어에 대한 동기 및 작동 방식

풀링은 일반적으로 개별 컨볼 루션 레이어 이후에 CNN에 추가되는 작업입니다. 풀링 레이어가 모델에 추가되면 이전 컨벌루션 레이어의 출력 픽셀 수를 줄여 이미지의 차원을 줄입니다.

예제 3의 convoluted layer에 풀링 연산을 적용하려면 2 * 2 필터와 stride 2를 고려하십시오. 먼저 convolved 출력의 왼쪽 상단에서 2 * 2 영역을 가져옵니다. 최대 풀링을 적용하여 2 * 2 블록의 각 값에서 최대 값을 계산합니다. 이 값은 저장되며 최대 풀링 작업의 전체 출력을 구성하는 데 사용됩니다.

최대 풀링

이 2 * 2 블록은 숫자의 풀이며 각 풀에서 최대 값을 취하기 때문에 최대 풀링 작업이라고합니다.

크기가 4 * 4 인 복잡한 이미지의 경우 max-pooling을 수행 한 후 이미지의 크기가 2 배 감소되어 이제 2 * 2가됩니다.

풀링은 컨벌루션 계층의 출력 해상도를 감소 시키므로 유용합니다. 풀링 기술을 통해 네트워크는 계산 시간을 초과하지 않고 더 큰 차원의 이미지를 스캔 할 수 있습니다. 유사한 프로세스를 따르지만 최대 값을 찾는 것 외에 복잡한 이미지에 대해 다른 작업을 수행하는 다른 유형의 풀링이 있습니다. 예를 들어, 평균 풀링은 각 2 * 2 블록에서 평균 값을 가져옵니다.

평균 풀링

일반적인 CNN에서 AlexNet으로

배경 정보

AlexNet에서 사용되는 데이터 세트는 무엇입니까?

"ImageNet은 약 22,000 개 카테고리에 속하는 1,500 만 개 이상의 레이블이 지정된 고해상도 이미지로 구성된 데이터 세트입니다."²

AlexNet이 참여한 ImageNet 대규모 시각 인식 챌린지 (ILSVRC)에서는 1000 개의 카테고리 각각에 약 1000 개의 이미지로 구성된 ImageNet의 하위 집합이 사용됩니다. 약 120 만 개의 학습 이미지, 50,000 개의 검증 이미지 및 150,000 개의 테스트 이미지가 있습니다.

데이터 세트는 어떻게 전처리 되나요?

ImageNet의 데이터 세트에는 가변 해상도가있는 반면 AlexNet은 "일정한 내부 차원"이 필요합니다. 따라서 이미지는 256 * 256의 고정 해상도로 축소됩니다. 또한 AlexNet의 연구원들은 각 픽셀에서 설정된 훈련 이미지에 대한 평균 활동을 뺍니다. 이는 픽셀이 동일한 범위에 있도록 픽셀을 정규화하는 것입니다.

AlexNet 아키텍처

AlexNet에는 5 개의 컨볼 루션 레이어와 3 개의 완전 연결 레이어가 있습니다.

  • 첫 번째 컨벌루션 계층 :이 계층은 11 * 11 * 3 크기의 96 개 커널로 입력 이미지 (224 * 224 * 3)를 필터링합니다.
  • 2ed convolutional layer :이 계층은 5 * 5 * 96 크기의 256 개 커널로 로컬 응답 정규화되고 풀링 된 첫 번째 convolutional 계층의 출력을 필터링합니다.
  • 3ed convolutional layer : 로컬 응답 정규화 및 풀링 없음. 크기가 3 * 3 * 256 인 384 개의 커널이 있습니다.
  • 4 차 컨벌루션 계층 : 로컬 응답 정규화 및 풀링 없음. 크기가 3 * 3 * 384 인 384 개의 커널이 있습니다.
  • 5 번째 컨벌루션 레이어 :이 레이어에서 출력이 풀링됩니다. 크기가 3 * 3 * 384 인 256 개의 커널이 있습니다.
  • 첫 번째, 두 번째 완전 연결 계층 : 각각 4096 개의 뉴런을 포함합니다.
  • 세 번째 완전 연결 계층 : 이것은 "1000 등급 레이블에 대한 분포를 생성하는 1000-way 소프트 맥스에 공급되는"출력 계층입니다.
  1. ReLU 비선형 성

2. 로컬 응답 정규화

AlexNet에 로컬 응답 정규화가 필요한 이유는 무엇입니까?

  • 비 포화 활성화 함수 인 ReLU를 사용합니다. 즉, ReLU에는 값의 상한이 없습니다.
  • 뉴런 간의 경쟁을 장려하기 위해 "측면 억제"를 도입합니다.

ReLU 비선형 성 이전.

로컬 응답 정규화의 성능은 어떻습니까?

상위 1 개 오류율 : 1.4 % 감소 (상위 1 개 오류율 : 분류 기가 올바른 클래스에 가장 높은 점수를 부여하지 않은 시간의 백분율) .

상위 5 개 오류율 : 1.2 % 감소 ( 상위 5 개 오류율 : 분류 기가 상위 5 개 추측 중 올바른 클래스를 포함하지 않은 시간의 비율 )

3. 겹치는 풀링 레이어

위에서 설명한 것처럼 풀링 레이어는 이미지의 차원을 줄이는 데 도움이됩니다. 중첩 풀링 레이어는 풀링 작업이 수행되는 인접 필터 블록이 서로 중첩된다는 점을 제외하면 유사한 방식으로 작동합니다.

겹치는 풀링 레이어의 성능은 어떻습니까?

Top-1 오류율 : 0.4 % 감소 ³

Top-5 오류율 : 0.3 % 감소 ³

AlexNet을 사용한 데모

이 데모에서는 SVHN (Street View House Number) 데이터 세트를 사용하여 AlexNet 모델을 빌드합니다 . SVHN은 각 이미지에 분류 할 특정 번호가 포함 된 MNIST와 매우 유사하지만 Google 스트리트 뷰의 집 번호에서 얻은 실제 이미지라는 점에서 더 흥미로운 데이터 세트입니다.

SVHN 데이터 세트 및 라벨링의 예

1 단계 : 데이터 가져 오기

단순화를 위해 모든 숫자가 32x32 픽셀의 고정 해상도로 크기가 조정 된 잘린 숫자 형식을 선택했습니다.

2 단계 : 데이터 전처리

훈련 세트와 테스트 세트 모두에 대한 모양을 인쇄하면 모양이 원래 형태임을 알 수 (width, height, channels, size)있습니다. 그러나 CNN / AlexNet은 입력 형식 만 취 (size, width, height, channels)하므로 먼저 이미지 배열을 전치해야합니다. 이것은 다음을 사용하여 실현할 수 있습니다.

X_train, y_train = X_train.transpose((3,0,1,2)), y_train[:,0]
X_test, y_test = X_test.transpose((3,0,1,2)), y_test[:,0]

마지막으로 각 픽셀을 255로 나누어 X_train과 X_test를 모두 정규화했습니다. 결과적으로 각 픽셀은 [0,1] 범위에 속하므로 수렴 속도가 빨라집니다.

3 단계 : AlexNet 모델링

위에서 소개 한 AlexNet 아키텍처를 엄격하게 따랐습니다. 그러나 로컬 응답 정규화 레이어는 Tensorflow에만 존재하고 Keras에는 존재하지 않습니다. 데모는 처음부터 AlexNet을 만드는 것이 아니라 AlexNet의 힘과 유용성을 보여주기위한 것이기 때문에 대신 배치 정규화 계층을 사용합니다.

다음은 모델 요약입니다.

다음으로, 우리는 기본 옵티 마이저 adam(첫 번째 시도이며 꽤 괜찮은 결과를 생성했습니다!)와 손실 함수 sparse_categorical_crossentropy(원-핫 인코딩을 사용하지 않았기 때문에 )를 사용하여 모델을 컴파일 했습니다 .

그런 다음 batch_size=6410 세대 동안 모델을 훈련했습니다 . 10 세대가 끝날 때 우리 모델은 0.9444의 훈련 정확도와 0.9115의 검증 / 테스트 정확도를 달성했습니다.

다음은 에포크에 대한 손실 및 정확도에 대한 플롯입니다.

마지막으로 잘못 분류 된 사진을 살펴 보겠습니다.

모델별로 잘못 분류 된 이미지의 예

위의 결과를 통해 모델이 5와 6을 구별하는 데 어려움을 겪거나 그 반대의 경우도 마찬가지임을 알 수 있습니다. 그러나 많은 이미지가 본질적으로 불분명하고 이러한 오 분류는 여전히 해당 이미지의 일부 가장자리 특징을 캡처한다는 점에서 나쁘지 않습니다 (예 : 5를 6으로 분류하는 것이 5를 1로 분류하는 것보다 더 견딜 수 있다고 생각합니다). 따라서 우리는 AlexNet 모델이 일반적으로 꽤 잘 수행되었다고 결론 내릴 수 있다고 확신합니다.

여기에 노트북 형식으로 전체 코드를 첨부했습니다.

[1] Andrew Ng : 딥 러닝 전문화 https://www.coursera.org/learn/convolutional-neural-networks?specialization=deep-learning

[2] Deep Convolutional Neural Networks를 사용한 ImageNet 분류 http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf

[3] https://towardsdatascience.com/alexnet-the-architecture-that-challenged-cnns-e406d5297951

Suggested posts

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

가장 유명한 행동 강령 중 하나입니다. "마술사는 절대 비밀을 밝히지 않습니다." 그러나 청중이 너무나 놀라워 서 '방금 일어난 일'이라는 느낌에 놀라서 비밀을 밝히지 않는 것이 거의 잔인한 순간이 있습니다.

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Auto-TS 라이브러리를 사용하여 ARIMA, SARIMAX, FB Prophet, VAR 및 ML 모델 개발

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Automated Machine Learning (AutoML)은 기계 학습 파이프 라인의 일부 구성 요소를 자동화하는 것을 말합니다. AutoML은 일부 모델 개발 프로세스를 자동화하여 데이터 과학자의 워크 플로를 가속화합니다.

Related posts

Spotify의 마법 성분 : 기계 학습

Spotify의 마법 성분 : 기계 학습

면책 조항 :이 기사는 Spotify와 관련이 없으며 Spotify 및 현재 관련이 없을 수있는 과거 구조에 대한 확인되지 않은 정보로 구성 될 수 있습니다. 음악은 표현의 한 형태, 예술의 형태, 전체적인 문화 활동입니다.

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

신경 과학에서 자동 분화, 신경망 이론 및 신경 과정의 과소 적합에 이르기까지 현재 추구되고있는 다양한 딥 러닝 연구 흐름에 대한 더 나은 개요를 얻고 싶으십니까? 합리적으로 통과하기에는 열려있는 arXiv 탭이 너무 많습니까? 전체 동영상을 볼 시간이 너무 적습니까? 논문의 핵심 아이디어와 개념에 대한 간략한 요약 만 있다면. 그런 다음 '머신-러닝-콜라주'시리즈를 소개하게되어 기쁩니다.

내부의 관심 네트워크 그래프

수학에서 NumPy까지 단계별 가이드

내부의 관심 네트워크 그래프

그래프 신경망 (GNN)은 그래프 데이터에서 학습 할 수있는 표준 도구 상자로 등장했습니다. GNN은 콘텐츠 추천 또는 신약 발견과 같은 다양한 분야에서 영향이 큰 문제를 개선 할 수 있습니다.

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

안녕하세요! 이미지 분할에 대한이 짧은 시리즈의 첫 번째 부분을 읽지 않았다면 여기에서 읽으십시오. 이전 이야기에서 임계 값 및 색상 분할에 대해 논의 했으므로 2 부에서는 색도 분할과 이미지 차이에 중점을 둘 것입니다.