딥러닝 프레임워크/이미지 처리

CNN(Convolution Neural Network)

Zoo_10th 2024. 4. 2.

1. CNN(Convolution Neural Network)

이미지 처리, 컴퓨터 비전 및 음성 인식 분야에서 많이 사용된다. CNN은 인간의 뇌가 이미지를 처리하는 방식과 유사하게 작동한다. CNN은 주로 convolutional layer, pooling layer 및 fully connected layer로 구성된다. Convolutional layer는 입력 이미지에서 필터를 사용하여 특징 맵을 생성한다. Pooling layer는 특징 맵을 축소하여 계산량을 줄인다. Fully connected layer는 분류 작업을 수행한다.

2. CNN 구조

2-1. 입력층

입력층은 이미지의 픽셀값을 받아들이는 역할을 한다. 이미지가 입력층으로 들어오면, 이를 기반으로 합성곱층에서 이미지의 특징을 추출한다.

2-2. 합성곱층(Convolutional layer)

합성곱층(Convolutional layer)은 입력 이미지에서 필터를 사용하여 특징 맵(feature map)을 생성한다. 이때 필터를 사용하여 이미지의 특징을 강조하거나 특정한 패턴을 찾는다. 필터는 이미지의 작은 영역을 나타내며, 이를 이동시켜가면서 이미지 전체를 스캔한다. 이렇게 만들어진 특징 맵은 다음 층으로 전달되어 더 복잡한 특징을 학습한다.

2-3. 풀링층(Pooling layer)

풀링층(Pooling layer)은 특징 맵을 축소하여 계산량을 줄인다. 주로 최대값 풀링(Max Pooling)과 평균값 풀링(Average Pooling)이 사용되며, 최대값 풀링은 특징 맵 내에서 가장 큰 값을 선택하여 출력하는 방식이다. 이를 통해 특징 맵의 크기를 줄이면서 중요한 정보를 보존한다. 평균값 풀링은 각 영역의 평균값을 계산하여 출력하는 방식이다.

2-4. 완전연결층(Fully Connected layer)

완전연결층(Fully Connected layer)은 분류 작업을 수행한다. 이전 층에서 추출된 특징들을 입력받아 분류기(Classifier)를 통해 최종 출력값을 계산한다. 이때 분류기는 주로 Softmax 함수를 사용하여 각 클래스에 대한 확률값을 계산한다.

2-5. 출력층(Output layer)

출력층(Output layer)은 최종 출력값을 계산하며, 분류 작업에서는 주로 Softmax 함수를 사용한다. Softmax 함수는 클래스별 확률값을 출력하며, 이를 기반으로 입력 이미지를 분류한다.

그리고 최근에는 자연어 처리 분야에서도 사용되고 있다.

3. CNN 특징

3-1. 합성곱

입력층 데이터에서 특징을 추출하는 역할을 하는 방법으로 입력 데이터의 크기보다 작은 필터/커널을 사용하여 입력데이터의 모든 영역을 훑으면서 특성을 추출하게 된다. 이때 추출되는 결과가 특성맵(feature map)이다.

일반적으로 필터의 크기는 33, 55를 주로 사용하고 스트라이드(Stride)는 지정된 간격에 따라 이동되는 간격을 의미한다.

3-2. 필터

필터(filter)는 합성곱층에서의 가중치 파라미터에 해당한다. 학습 단계에서 적절한 필터를 찾도록 학습되며, 입력 데이터에 필터를 적용하여 필터와 유사한 이미지의 영역을 강조하는 특성 맵(feature map)을 출력하여 다음 층으로 전달한다.

3-3. 패딩

패딩(Padding)은 합성곱 연산을 수행하기 전 입력 데이터 주변을 특정 값으로 채워 늘리는 기법이다. 패딩을 사용하여 출력 데이터의 공간적 크기를 조절할 수 있다. 예를 들어, 입력 데이터가 3x3 크기이고 필터가 2x2 크기인 경우, 합성곱을 수행하면 출력 데이터가 2x2 크기가 된다. 이때 패딩을 사용하면 입력 데이터의 주변을 0 또는 다른 값으로 채워서 입력 데이터의 크기를 유지할 수 있다. 따라서 출력 데이터의 공간적 크기를 조절할 수 있다.

패딩을 할 때 채울 값은 hyper-parameter로 어떤 값을 채울지 결정할 수 있다. 주로 사용되는 값은 0이다. 이를 zero-padding이라고 한다. zero-padding은 구현이 쉽고, 합성곱 연산 결과가 입력 데이터와 같은 크기가 되도록 보장한다.

패딩을 사용하는 이유는 Conv Layer를 지날 때마다 입력 데이터의 크기가 작아지기 때문이다. 이를 방지하기 위해서는 패딩을 사용해야 한다. 패딩이 없으면 가장자리의 정보들이 사라지는 문제가 발생하게 된다. 따라서 패딩은 Conv Layer에서 출력 데이터의 공간적 크기를 유지하면서 가장자리의 정보를 보존하는 역할을 한다. 이는 주로 합성곱 계층의 출력이 입력 데이터의 공간적 크기와 동일하게 맞춰지기 위해 사용된다.

3-4. 스트라이드(Stride)

스트라이드(Stride)는 입력 데이터에 필터를 적용할 때 필터가 이동할 간격을 조절하는 것을 말한다. 스트라이드의 값은 일반적으로 1과 같이 작은 값을 사용하여 특성을 잘 유지하도록 한다.

3-5. 출력 데이터의 크기

 - 입력 크기 : (H, W)​

 - 필터 크기 : (FH, FW)​

 - 출력 크기 : (OH, OW)​

 - 패딩, 스트라이드 : P, S​

3-6. 연산과정

1) 각 채널(Channel)마다 합성곱 연산을 적용

2) 각각의 결과를 더해서 하나의 결과 생성

3) 마지막으로 최종 결과에 편향을 더함

4. AlexNet

AlexNet은 8개의 레이어로 구성되어 있다. 5개의 컨볼루션 레이어와 3개의 full-connected 레이어로 구성되어 있다. 두번째, 네번째, 다섯번째 컨볼루션 레이어들은 전 단계의 같은 채널의 특성맵들과만 연결되어 있는 반면, 세번째 컨볼루션 레이어는 전 단계의 두 채널의 특성맵들과 모두 연결되어 있다

1) 첫번째 레이어(컨볼루션 레이어)

96개의 11 x 11 x 3 사이즈 필터커널로 입력 영상을 컨볼루션해준다. 컨볼루션 보폭(stride)를 4로 설정했고, zero-padding은 사용하지 않았다. zero-padding은 컨볼루션으로 인해 특성맵의 사이즈가 축소되는 것을 방지하기 위해, 또는 축소되는 정도를 줄이기 위해 영상의 가장자리 부분에 0을 추가하는 것이다. 결과적으로 55 x 55 x 96 특성맵(96장의 55 x 55 사이즈 특성맵들)이 산출된다. 그 다음에 ReLU 함수로 활성화해준다. 이어서 3 x 3 overlapping max pooling이 stride 2로 시행된다. 그 결과 27 x 27 x 96 특성맵을 갖게 된다. 그 다음에는 수렴 속도를 높이기 위해 local response normalization이 시행된다. local response normalization은 특성맵의 차원을 변화시키지 않으므로, 특성맵의 크기는 27 x 27 x 96으로 유지된다.

2) 두번째 레이어(컨볼루션 레이어)

256개의 5 x 5 x 48 커널을 사용하여 전 단계의 특성맵을 컨볼루션해준다. stride는 1로, zero-padding은 2로 설정했다. 따라서 27 x 27 x 256 특성맵(256장의 27 x 27 사이즈 특성맵들)을 얻게 된다. 역시 ReLU 함수로 활성화한다. 그 다음에 3 x 3 overlapping max pooling을 stride 2로 시행한다. 그 결과 13 x 13 x 256 특성맵을 얻게 된다. 그 후 local response normalization이 시행되고, 특성맵의 크기는 13 x 13 x 256으로 그대로 유지된다.

3) 세번째 레이어(컨볼루션 레이어)

384개의 3 x 3 x 256 커널을 사용하여 전 단계의 특성맵을 컨볼루션해준다. stride와 zero-padding 모두 1로 설정한다. 따라서 13 x 13 x 384 특성맵(384장의 13 x 13 사이즈 특성맵들)을 얻게 된다. 역시 ReLU 함수로 활성화한다.

4) 네번째 레이어(컨볼루션 레이어)

384개의 3 x 3 x 192 커널을 사용해서 전 단계의 특성맵을 컨볼루션해준다. stride와 zero-padding 모두 1로 설정한다. 따라서 13 x 13 x 384 특성맵(384장의 13 x 13 사이즈 특성맵들)을 얻게 된다. 역시 ReLU 함수로 활성화한다.

5) 다섯번째 레이어(컨볼루션 레이어)

256개의 3 x 3 x 192 커널을 사용해서 전 단계의 특성맵을 컨볼루션해준다. stride와 zero-padding 모두 1로 설정한다. 따라서 13 x 13 x 256 특성맵(256장의 13 x 13 사이즈 특성맵들)을 얻게 된다. 역시 ReLU 함수로 활성화한다. 그 다음에 3 x 3 overlapping max pooling을 stride 2로 시행한다. 그 결과 6 x 6 x 256 특성맵을 얻게 된다.

6) 여섯번째 레이어(Fully connected layer)

6 x 6 x 256 특성맵을 flatten해줘서 6 x 6 x 256 = 9216차원의 벡터로 만들어준다. 그것을 여섯번째 레이어의 4096개의 뉴런과 fully connected 해준다. 그 결과를 ReLU 함수로 활성화한다.

7) 일곱번째 레이어(Fully connected layer)

4096개의 뉴런으로 구성되어 있다. 전 단계의 4096개 뉴런과 fully connected되어 있다. 출력 값은 ReLU 함수로 활성화된다.

8) 여덟번째 레이어(Fully connected layer)

1000개의 뉴런으로 구성되어 있다. 전 단계의 4096개 뉴런과 fully connected되어 있다. 1000개 뉴런의 출력값에 softmax 함수를 적용해 1000개 클래스 각각에 속할 확률을 나타낸다.

728x90

'딥러닝 프레임워크 > 이미지 처리' 카테고리의 다른 글

CNN_고급활용(2)  (2) 2024.04.12
CNN_고급활용  (1) 2024.04.08
CNN_전이학습  (0) 2024.04.04

댓글