[Week3] 패딩
패딩은 합성곱 신경망을 변형하는 한 방식이라고 한다.
지금까지는 nxn 이미지를 fxf필터로 합성곱을 한 결과로 n-f+1x n-f+1이 나오는 것을 보았다.
그래서 6x6 이미지의 경우 6-3+1 = 4 이므로 4x4 이미지가 나온 것이다.
히지만 아주 치명적인 단점이 좀 있다. 첫 번째는 바로 합성곱 연산을 할 때마다 이미지가 작아진다는 것이다.
이 것이 왜 문제냐면, 합성곱 신경망에서 수백 개의 층에서 각 층마다 축소된다면 모든 층을 거치고 난 후에는 아주아주 작은 이미지가 나오게 되기 때문이다.
두 번째는 이미지의 어떤 부분, 그러니까 이미지의 가장자리 같은 경우는 결과값을 내는 데에 한번밖에 사용되지 않지만, 이미지의 중간 부분은 결과값을 내는 데에 여러 번 사용된다는 것이다.
따라서 가장자리나 모서리 픽셀의 정보는 거의 활용하지 못한다는 것이다.
이 두 문제를 해결하기 위한 방법이 바로 패딩, 즉 합성곱 연산을 하기 전에 이미지를 덧대는 방법이다. 1픽셀만큼 가장자리에 더해주는 것과 같은 방법으로 말이다. 일반적으로 0을 덧대준다고 한다.
이러한 방법으로 기존의 이미지는 6x6이 아닌 8x8 이미지가 되고, 결과 이미지는 기존 이미지와 같은 사이즈인 6x6 이미지가 나오게 된다. 그리고 이 때 p(padding)=1이다. 왜냐면 1픽셀씩 가장자리에 덧대줬기 때문에~
그럼 이제 결과 이미지는 n+2p-f+1xn+2p-f+1으로 일반화 할 수 있다.
그래서 6+2(*1)-3+1 = 6 이므로 6x6 이미지가 나온 것이다.
이 패딩을 통해서 가장자리 부분의 정보를 더 가져오게 하고, 결과 이미지의 크기 줄어드는 문제를 해결할 수 있음을 알 수 있다.
그렇다면 이번엔 패딩을 얼만큼 덧대줘야 할지에 대한 두 가지 선택지, Valid Convolution과 Same Convolution에 대해 알아보도록 하겠다.
Valid Convolution은 패딩이 없다는 뜻으로 6x6이미지와 3x3 필터를 합성곱 연산하여 4x4 이미지와 나오는 것이다.
Same Covolution은 위에서 한 것처럼 패딩을 덧대서 원본 이미지와 같은 크기의 결과 이미지가 나오도록 한다는 것이다. n+2p-f+1xn+2p-f+1 공식을 따라서 말이다.
그래서 만약 원본 이미지와 결과 이미지가 같은 사이즈로 나오게 하고 싶으면 n=n+2p-f+1 의 방정식을 풀면 된다. 이 방정식을 풀면 p = (f-1)/2가 나온다. p를 이와 같이 설정하면 결과 이미지가 원본 이미지와 같은 크기로 나온다는 것이다.
컴퓨터 비전에는 필터의 픽세를 나타내는 f값은 거의 홀수라고 한다.
그 이유 첫 번째는 f가 짝수면 패딩이 비대칭이 되기 때문이고, 두 번째는 홀수 필터들은 중심 픽셀을 두어 필터의 위치에 사용하는데에 용이하기 때문이다.
그래서 다들 보통 f를 홀수로 사용한다고 한다~