본문 바로가기

AI

Convolution & CNN

- Image Filtering

각 픽셀별을 이웃 픽셀들을 포함하여 특정 함수에 넣어 output을 만드는 과정

linear filtering은 이웃 픽셀들의 weighted sum / difference 

노이즈제거, 스무딩, 대비 증가 등을 적용할 수 있다

 

- Point Spread Function

이미지 필터링에 사용하는 linear function

source 이미지의 값이 target 이미지로 분산

 

- Convolution

Source Image : H

Target Image : G

PSF : F

Convolution operator : *

 

G = H * F

필터를 상하좌우 뒤집어서 모든 위치에서 cross-correlation을 계산하는 것

cross-correlation은 element-wise weighted sum

구현이 쉬워 내부는 cross-correlation으로 구현되어 있는 경우가 많다

 

예시 

1. 노이즈 제거

 

 

이런 모양의 필터를 사용하여 노이즈를 제거할 수 있다

 

 

원본 이미지 H에 필터를 씌워 G와 같이 노이즈가 제거된 이미지를 만들 수 있다

필터 숫자의 합이 1이 되어야 전체 에너지가 유지된다

 

2. Edge 찾기

 

 

가장자리 정보를 뽑아내는 sobel filter

 

 

만약 좌우 이웃한 픽셀값이 수평으로 같다면 0이 되고 다르다면 0보다 절대값이 큰 수가 된다

이렇게 x축 y축을 계산한 후 절대값의 합을 구한다면 최종 가장자리가 만들어진다

 

3. 선명화

 

 

이런 필터를 적용해주면 사진을 더 선명하게 만들 수 있다

역시 필터 숫자들의 합이 1임을 알 수 있다

 

- Convolution 특징

a*b = b*a

a*(b*c) = (a*b)*c

a*(b+c) = a*b + a*c

ka*b = a*kb = k(a*b)

 

- Padding

이미지의 가장자리 부분은 필터가 남기 때문에 따로 패딩 처리가 필요하다

패딩 처리를 하지 않으면 convolution을 할 때마다 이미지가 작아진다

패딩의 종류에는 0이나 상수값을 채워주는 zero/constant, 반대편 바운더리에서 가져오는 wrap, 값을 복사해오는 clamp 등이 있다

 

이미지 크기 : n X n

필터 크기 : f X f

패딩 크기 : p X p

 

결과 : (n+2p-f+1) X (n+2p-f+1)

 

- Stride

매 픽셀에 convolution을 적용시켜주는 것이 아니라 몇 픽셀씩 건너뛰면서 진행하는 것

연산량이 감소하는 효과가 있다

패딩을 적용하였더라도 스트라이드를 적용하면 이미지크기가 작아진다

패딩에서 사용한 크기들에 추가로 스트라이드 크기 : s X s를 지정한다면

output은 $ \left \lfloor \frac{n+2p-f}{s}+1 \right \rfloor \times \left \lfloor \frac{n+2p-f}{s}+1 \right \rfloor $이 된다

 

- CNN ( ConvNet )

이미지의 픽셀 하나하나를 neural network의 Input으로 사용한다면 파라미터 수가 너무 많아진다

또한 이미지의 크기를 고정시켜야 하는 단점이 생긴다

이를 극복하기 위해 convolutional neural network를 사용한다

CNN은 local connectivity, weight sharing의 특징을 갖는다

컴퓨터 비전에서 이미지 인식을 위한 패턴을 찾는데 유용

 

 

local connectivity 특징은 그림에서도 볼 수 있듯이 unit의 개수가 같아도 파라미터의 수가 줄어든다

 

 

추가로 weight sharing을 적용한다면 파라미터수가 원래 21개에서 3개로 아주 작아지는 것을 알 수 있다

weight sharing은 이미지의 channel이 여러개라면 보통 share하지 않고 channel 내에서만 share 한다

 

위 그림의 input을 이미지, weight들을 filter로 생각해볼 수 있다

 

 

일반적인 neural network에서 봤던 것과 비슷하다

 

파라미터의 개수는 필터의 개수 * 필터 크기  + 필터의 개수 ( bias term )이다

특정 layer의 output의 크기를 임의로 정하기 원한다면 패딩, 스트라이드로 조절 가능하다

 

2D convolution layer는 height * width * channel(depth) 순서대로 나타낸다

filter의 depth는 input layer의 channel의 수와 같아야 한다

 

- Layer 종류

 

1. CONV

convolution을 적용하는 layer

ConvNet의 깊이를 셀 때 사용하는 layer

 

2. POOL

일반적으로 layer의 개수를 셀 때 포함시키지 않고 단순한 operation이라고 생각

 

 

가장 큰 값을 고르는 MAX pooling을 보통 사용한다

activation이 큰 feature가 좋은 feature 일 것이라는 가정!

 

gradient 업데이트 과정에서는 dropout처럼 max인 부분만 update 한다

하이퍼파라미터로는 filter size, stride가 있다

 

파라미터 수를 줄여주는 효과와 오버피팅을 억제하는 효과가 있다

 

3. FC

flattening 후 logistic/softmax 하여 class 구분할 때 사용

일반적인 DNN과 같다

 

ITE4053 : Deep Lerarning ( Hanyang University )

'AI' 카테고리의 다른 글

Supervised Learning vs Unsupervised Learning  (0) 2021.06.13
RNN  (0) 2021.06.01
Optimization Algorithms  (0) 2021.04.20
Batch Normalization  (0) 2021.04.18
Regularization 4 - Early Stopping  (0) 2021.04.18