11-1. CNN (Convolutional Neural Networks)
이제는 이미지 검출 분류에 많이 사용되는 딥러닝 신경망인 cnn을 알아볼 것이다.
cnn의 등장 배경에는 고양이 실험에서 시작이 되었다. 고양이에게 어떤 형태의 그림을 보여줬더니 고양이 뇌의 뉴런이 특정 부분의 이미지에만 반응하는 것을 알게 되었다. 따라서 입력을 이미지의 전체가 아닌 일부분만 반응하는 것을 알게 되었고 이 생각을 conv에 적용을 해보았다.
위의 오른쪽 그림을 보면 알겠지만 각가의 이미지를 잘게 자르게 된다. 각가의 입력으로 넘기게 되며 네트워크의 연산을 거치게 되며 각가의 이미지는 특징을 가지게 된다. 네트워크에 사용되는 연산에 대한 것은 차후에 자세히 알아보자.
이미지의 예시로 32*32*3의 이미지를 가져온다 (3은 rgb 이다.) 이런 형태의 이미지에 우리는 필터를 사용해서 연산을 하게 된다. 여기서 나온 필터라는 개념은 들어온 이미지가 지나가는 것이라고 생각하면 편하다. 우리가 아는 일반적인 필터가 거쳐 지나간다고 하기 때문이다. 이러한 필터를 거쳐 연산된 이미지의 일부분은 핕터가 계속 이동하며 연산을 해준다. 필터의 크기는 각자 알아서 정하면된다.
필터를 거치게 된다면 하나의 값을 만들게 되며 그 값에 Wx + b 연산을 거치게 된후 relu 연산을 해주게 되면 최종적으로 하나의 값이 나오게 된다.
같은 방식으로 쭉쭉 옆으로 이동하며 진행하면 된다.
다음 줄도 쭉쭉 해주면 된다. 지금까지 대략적인 방식에 대하여 알아보았다.
이제 좀더 자세하게 들여다 보겠다.
이미지의 크기가 7*7 이며 필터의 크기가 3*3인 경우를 보겠다. 위의 그림들처럼 3*3 필터가 하나의 이미지를 지나가며 각각 연산을 하게 되고 하나의 값을 뽑아내게 된다. 이렇게 하게 된다면 이미지가 작아지지 않을까...?라고 생각을 할것이다. 당연히 이미지의 크기는 작아지며 위의 그림에서는 5*5의 이미지가 결과적으로 추출 될것이다.
이렇게 움직인다는 개념을 우리는 stride라고 말하게 되며 위의 그림은 1칸씩 이동하였으므로 stride가 1이라고 할수 있다.
위의 그림은 stride가 2라고 할 수 있다. 결과적으로 3*3의 결과가 나오게 된다.
결과적으로 이러한 연산 방법으로 계산을 할 수 있으며 외울 필요까지는 없다. 필요할 때 찾아서 사용하면 되기 때문이다. 그럼 여기서 나는 의문이 들었다. 이렇게 이미지를 계속 수정하는데 괜찮을까? 이렇게 stride를 하게 되면 이미지는 작아지게 되고 정보의 손실이 생기는 것은 맞다.
우리는 이러한 정보 손실을 방지하기위해 다음과 같은 아이디어를 생각하게 되었다.
이러한 아이디어를 padding 이라고 부르는데 이러한 방식은 이미지에 0을 둘둘 두르는 것이다. 우리가 패딩을 입을때 둘둘 두른다 라는 개념이란 비슷한 것이다. 이러한 패딩의 장점은
1. 급격히 작아지는 이미지 손실 방지
2. 이미지의 모서리,변 정보 제공 이 있다.
위와 같은 패딩을 사용하게 된다면 이미지는 출력 값이 7*7이 나오게 되며 이미지의 정보 손실이 줄어들게 된다.
일반적으로 이렇게 사이즈가 이전의 이미지와 같은 것을 추출하는 방식을 우리는 사용하고 있다. 하지만! 이거도 딥러닝 개발자 마음이다. 더 좋은 성능을 나타내는 방식을 사용하면된다.
우리가 하나의 필터를 인풋 이미지에 적용하면 하나의 결과물이 나올것이고 다음으로 필터 2를 다시 인풋 이미지에 적용하면 다른 이미지가 나올 것이다. 만약에 6개의 필터를 사용했다면 6개의 이미지가 나오게 되는 것이다. (각가의 필터는 w 값이 다르다.) 따라서 새로 생성된 이미지의 깊이는 6이 될것이며 크기는 stride의 값과 padding의 유무에 따라 달라진다. 예를 들어 이 예시에서는 32*32*3의 이미지를 stride 1 만을 적용하여 했다면 결과로 28*28*6의 하나의 이미지가 추출 될것이다.
이렇게 하게 된후 다음에 5*5*6의 필터를 사용해서 다시 10개를 적용하면 10개의 결과물이 나오게 되고 이렇게 계속 연산을 해주는 것이다.
그럼 이 이미지 연산에 사용되는 w 값 weight의 값은 얼마나 될까?라는 의문이 들것이다.
만약에 5*5*3 필터의 수가 6이기 때문에 5*5*3*6을 해주면 사용된 w의 수를 알 수 있다.
이러한 값들은 우리가 알고 있는 w 값 초기 선정방식과 같다.
이번장 끝
참고로 이러한 연산을 거쳐 만들어진 이미지는 학습을 하게 되면서 특징 점을 뽑게된다.