오답노트

[DL] CNN (Convolutional Neural Network) 본문

Python/DL

[DL] CNN (Convolutional Neural Network)

권멋져 2022. 9. 19. 19:30

이미지

컴퓨터에서 표현하는 이미지는 픽셀 단위의 숫자로 되어 있다. 색이 없는 흑백은 1채널 색이 있는 RGB는 3채널로 이루어져 있다.

 

흑백 사진에 대한 표현
컬러 사진에 대한 표현

CNN

CNN

CNN 은 요약해서 말하자면 n*n 필터를 거쳐서 feature map을 만드는 것이다. 

 

Filter

위 gif는 5*5 이미지에 3*3 필터를 사용해서 합성곱을 하는 모습이다.

필터는 왼쪽 위에서 부터 시작하여, 1칸씩 움직이며 필터에 해당하는 영역에 대해 겹친 영역은 곱하고, 곱한 값들을 모두 더하여 1개의 픽셀로 출력한다.

 

Stride

stride는 필터가 움직이는 간격을 의미한다. 기본적으로는 1칸을 움직이지만 stride 값을 조절하면 1칸보다 더 크게 필터를 움직이게 할 수 있다. 

 

Padding

 

stride는 간격을 잘못 설정하면 원본 이미지 밖으로 나가버리는 오류가 있다. 이를 방지하기 위해 padding을 한다.

무엇보다 중요한 것은 가장자리의 데이터들의 중요도를 높혀준다는 점이다.

padding은 원본 이미지의 픽셀을 늘리는 것을 의미한다.

 

Pool

pool은 cnn과 비슷하게 필터를 통해 원본 이미지의 크기를 줄인다. 하지만 pool은 원본 이미지의 원소 값에 대해 연산을 하지 않고 가져오는 특징이 있다. 또한 stride도 기본적으로는 필터의 크기를 따라간다. 주로 연산량을 축소 시키는 의도가 크다

 

Max Pool

필터 안에 원본 이미지의 값들 중에 최대값을 추출하여 출력한다.

참고로 Min Pool은 존재하지 않는다. 그 이유는 Relu에서 찾을 수 있다.

Relu를 보면 0보다 큰 수만 가져가는 알고리즘이다. 그 이유는 의미있는 값을 가져가겠다는 의도가 있다.

그런데 굳이 최소값을 선택할 이유가 없는 것이다.

 

Avg Pool

필터 안에 원본 이미지의 값들의 평균값을 추출하여 출력한다.

Max Pool 같은 경우는 최대값만 가져가기 때문에, 작은 값들은 버려지게 된다. 하지만 Avg Pool은 평균값을 가져가기 때문에 작은 값들까지 고려할 수 있다는 장점이 있다.

 

'Python > DL' 카테고리의 다른 글

[YOLO] YOLO(You Only Look Once) - Object Detection  (2) 2022.09.21
[Keras] CNN 관련 레이어 - Conv2D, MaxPool2D  (2) 2022.09.21
[Keras] 모델 성능에 유용한 Layer  (0) 2022.09.19
[Keras] 연산 Layer  (0) 2022.09.18
[Keras] EarlyStopping  (0) 2022.09.15