파이썬 머신러닝 - 이미지 러닝 CNN , convolution , pooling
DNN ( ann의 히든레이어가 2개 이상) 는 이미지를 flat 하게 1차원 데이터로 학습을 합니다.
이렇게 1차원 으로 처리를 하게 되면 이미지의 위치 특성이 없기 때문에 정확도가 떨어지는 문제가 발생합니다.
따라서 1차원이 아닌 이미지 그대로를 학습시키기 위해서 CNN을 사용합니다.
CNN 은 Filter 를 통해 이미지를 한번 스캔을 해 얻은 특성으로 학습을 합니다.
예시를 들어 위와 같은 3 x 3 필터가 있어 이미지의 벡터 값과 곱하면서 새로운 feature map 을 만드는 Convolution 과정을 거치게 됩니다.
이렇게 필터를 이용해 스캔을 하게 되면 사이즈는 작아지게 됩니다.
위 사진은 5x5 인 이미지 데이터가 3x3 으로 스캔을 한칸씩 이동하면서 하기 때문에 결과물이 3x3 으로 나온 것을 볼 수 있습니다. 처음 5x5 인 데이터가 3x3 으로 줄기 때문에 이와 같은 문제를 해결하기 위해서는
zero padding 과정을 거치게 됩니다.
zero padding 은 위 5x5 를 3x3 으로 스캔한 결과가 5x5 가 되도록 할려면 7x7 인 이미지로 만들어 주면 됩니다.
0으로 채워진 테두리를 만들어 3x3 을 진행하게 되면 feature map 이 5x5 로 나오기때문에 손실이 없다고 판단하는 것 입니다.
다만 이렇게 필터가 1개라면 상관이 없으나 필터가 여러개가 되면 위와 이미지 1장을 학습 하는데 필터의 수만큼의 이미지 데이터가 쌓이게 됩니다. 이러한 방식은 학습의 효율성이 떨어지기 때문에 스캔하여 나온 결과값에서 특성만 이용할 수 있게 pooling 과정을 거치게 됩니다.
pooling 과정은 이미지를 스캔함에 따라 그 이미지의 특성이 낮은 데이터는 과감하게 버리는 것을 의미합니다.
pooling 은 2가지 방법이 있습니다.
Average , Max 두가지 방법으로 평균과 최대값만을 이용하게 됩니다.
이런 방법으로 convolution , pooling 과정을 거치면서 데이터의 크기가 어느정도 작아졌다 싶으면 ANN 컴파일 소프트맥스를 통해 학습치를 내놓게 됩니다.
여기서 ANN을 이용하는 이유는 데이터의 특성들로 이루어진 데이터이기 때문에 flat 하게 진행해도 관계 없기 때문입니다.