Deep Learning - CNN
딥러닝의 활용 분야인 CNN (Convolutional Neural Network) 에 대해 알아보자.
영상을 볼 때 우리는 영상을 보지만, 컴퓨터는 숫자를 본다.
이미지는 행렬 기반으로 표현된다. 예시로 위와 같이 6x6 size의 행렬이 있을 때 3x3행렬을 * 연산 해 줄 수 있는데 이 연산을 Convolution이라고 한다. (선형대수의 곱셈과 convolution은 다름)
큰 수일수록 밝고 작은 수일수록 어둡다고 하자.
convolution 연산 과정을 살펴보자.
3x3행렬로 나눈 다음 각 요소에 따라 연산을 진행한다. 완료된 연산은 오른쪽의 결과 행렬에 적는다.
위 방법을 반복해서 4x4 행렬을 완성한다.
예시의 연산을 마치면 위와 같이 나온다.
여기서 3x3행렬은 Filter라고 하는데 딥러닝에서 W라고 이해하면 된다.
convolution 연산을 어떻게 하는 지는 알겠는데... 이 연산을 왜 할까?
Filter를 적절히 정의하고 convolution 연산을 수행하면 세로 원래 이미지에서의 세로 방향에서의 특정한 요소들을 기가막히게 추출해 낼 수 있다. (Filter를 정의하는거에 따라 가로방향도 가능)
지금은 6x6 행렬에 대해 예시를 들어서 별 차이가 없는 것 같지만, 10000x10000 처럼 스케일이 커지면 이 연산이 굉장히 도움이 된다.
위의 필터도 CNN 기술을 통해서 적절하게 구한다.
이를 활용하면 가로 세로 뿐만 아니라 필터를 적절하게 조합해서 30도 방향을 찾거나 74도 방향을 찾거나.. 정교한 작업을 할 수 있게 된다.
이 아이디어를 기반으로 CNN기술이 도입됐는데, 2차원의 이미지 처리에 매우 적합한 모델이다.
convolution 기술에 추가해 padding stride pooling 기술이 존재한다.
convolution을 거치면 사이즈가 작아지긴 하지만 특정 부분의 형태만 확인할 수 있다.
polling
2x2 사이즈로 원본 이미지를 자르고, 그 중에서 가장 큰 요소를 가져온다.
convolution 처럼 겹쳐서 진행하지 않고 겹치지 않도록 2x2 행렬을 설정해서 진행한다.
=> 크기가 반으로 줄어든다.
pooling 작업은 convolution 작업을 진행한 후에 진행한다. 처음 이미지에 적용하게 되면 중요한 정보가 손실될 가능성이 있다.
일반적으로 영상처리에서는 위에서 언급한 것 처럼 겹치지 않게 설정하고 pooling을 진행하지만 필요에 따라 stride를 설정하고 convolution 처럼 pooling을 진행하는 경우도 있다.
pooling은 정보를 추출하는 작업이다. 많은 경우에 최댓값으로 설정하는 max pooling을 사용하지만 다른 종류의 pooling도 존재한다. (ex 평균으로 설정하는 Average pooling)
pooling을 요약하면 위와 같다. 어떤 사이즈로 잘라서 파악할 지, 간격은 얼마로 설정할 지 를 Hyperparameter로 설정한다.
여기서 중요한 건 pooling layer는 W parameter(Learning parameter)가 없다는 것이다. (Hyperparameter는 사람이 결정하는 부분이다.)
convolution과 pooling에 대해 알아봤다. 이 기술들은 이미지 처리에 사용되는게 일반적인데, 이미지는 보통 색상이 있는 이미지인 경우가 많다. 색상이 있는 이미지에는 기술들이 어떻게 적용될까?
색에는 RGB 세 가지 요소가 있기 때문에 지금까지 한 작업들에 대해서 3차원으로 진행한다고 생각할 수 있다.
6x6의 이미지 행렬이 3 겹으로 있다.
filter도 3겹에 맞춰 3x3x3 크기로 있다. (layer에 맞춰야 함)
이를 통해 convolultion 연산을 진행하면 4x4 행렬이 결과로 나온다.
세 가지의 필터를 하나의 필터라고 생각하자. 이거에 맞춰 생각하면 왜 4x4x3 행렬이 아닌 4x4 행렬이 나오는지 이해할 수 있다. 전체를 필터라고 생각하는게 중요하다!!
전체를 하나의 필터라고 생각하고, 필터의 개수가 많아질수록 4x4x2... 이런 식으로 나오게 된다. 필터의 수에 따라서 달라진다. (필터를 10 개 사용하면 4x4x10)
convolution 한 결과물에 activation function을 사용할 수 있다. (ReLU function을 자주 사용하고, 이 때 bias도 추가된다.)
3x3x3 필터를 10 개 사용해서 학습을 진행했다고 하자.
이렇게 되면, 한 번의 학습 당 28개의 모르는 parameter가 생긴다. (bias 포함)
10번 하면 총 280개의 모르는 parameter가 생긴다.
즉, unknown parameter가 굉장히 줄어들었고 (convolution 과 pooling 에서는 입력과 다음 layer 사이의 관계가 독립적이지만, MLP 에서는 입력과 다음 layer 사이의 관계가 의존적이다) 입력받는 이미지의 해상도에 상관하지 않아도 되는 효과가 있다.
2차원 이미지 (흑백) 에 적용해보자.
우리가 하고 싶은 건 CNN 기술을 사용해서 Classification을 수행하는 것이다.
위에서 마지막 max pooling을 거친 후에 만들어진 행렬을 1차원으로 핀다. (4x4면 16x1로) 그 다음 MLP를 씌운다.
이를 통해 Classification을 수행할 수 있다.
위의 W parameter들은 unknown parameter이다. 이를 계산해서 우리가 학습해야 하는 파라미터의 개수를 구할 수 있다.
unknown parameter를 구할 때는 전에 공부했었던 MLP와 같고, 전체 framework는 Traditional Machine Learning과 같다.
N 개의 Training set에서 Cost function을 구하자.
그 다음 위를 Layer별로 쪼개서 backpropagation을 수행한다.
정리해보자.
CNN의 특성
1. 파라미터를 공유해서 파라미터의 개수가 적다. (같은 필터를 사용)
MLP를 사용하는것보다 훨씬 효율적이다.
그런데... 이렇게 Parameter를 줄여도 되나?
영상은 가능하다.
2. 고정된 크기의 입력을 filter를 사용해 잘 처리한다
CNN 은 어디에다가 쓸 수 있을까?
https://www.cs.toronto.edu/~kriz/cifar.html
위 사이트에서 CNN기술을 직접 사용해볼 수 있다.
10개의 클래스가 있고, 각 클래스 당 6000개의 이미지가 있다. (5000개는 학습데이터 1000개는 평가데이터)
CNN 기술 사용 시 동작 과정과 코드이다.
과정을 마친 후에는 Softmax 같은 함수를 적용시키고 확률이 가장 높은 클래스로 Classification을 수행한다.
좀 더 실용적인 예시를 살펴보자.
사진에 있는 글자와 숫자를 인지할 수는 없을까?
1. 텍스트를 인지하고
2. 텍스트를 분리하고
3. 분리한 텍스트를 인식한다.
Character classification은 이미 배웠는데.. 1과 2는 어떻게 해결해야 할까?
이 때 Sliding windows 방법을 사용한다.
Sliding windows 방법은 자율주행자동차에서 pedestrian detection을 수행할 때도 사용된다.
이미지가 입력되고, 사람이면 1 사람이 아니면 0 으로 간단하게 처리할 수 있다.
사람이 어딨는지 (텍스트가 어딨는지) 모르기 때문에 CNN기술의 필터처럼 적당한 사이즈를 잘라서 Supervised Learning에 집어넣어서 잘라 놓은 이미지가 사람인지 아닌지 판단하고, 조금씩 옮기며 계속 판단한다.
이 작업은 영상에 대해서 병렬로 작업되기 때문에 시간이 오래 걸리지 않는다.
텍스트에 대해서도 살펴보자. 먼저 텍스트에 대해서 학습을 진행하면, 위처럼 텍스트인지 아닌지 인식할 수 있다.
Supervised Learning에서 Positive Negative를 나누는것으로 Segmentation을 쉽게 진행할 수 있다.
'Machine Learning > AI Introduction' 카테고리의 다른 글
정리 (0) | 2021.12.13 |
---|---|
Machine Learning - RNN (0) | 2021.12.05 |
Advice for Applying ML/DL (2) (0) | 2021.12.04 |
Advice for Applying ML/DL (1) (0) | 2021.12.04 |
Deep Learning (4) (0) | 2021.12.03 |
댓글
이 글 공유하기
다른 글
-
정리
정리
2021.12.13 -
Machine Learning - RNN
Machine Learning - RNN
2021.12.05 -
Advice for Applying ML/DL (2)
Advice for Applying ML/DL (2)
2021.12.04 -
Advice for Applying ML/DL (1)
Advice for Applying ML/DL (1)
2021.12.04