컴퓨터비전 4

풀링(Pooling) ft. Max & Average Pooling

합성곱 신경망에서 합성곱 연산과 활성화 함수 ReLU로 이루어진 합성곱층 다음에는 보통 풀링층이 존재한다. 풀링층은 각 특징맵에서 독립적으로 작동한다. 풀링은 특징 맵의 높이와 너비를 줄임으로써 특징 맵의 해상도를 낮추지만 분류에 필요한 맵의 특징은 유지시키는데 이를 다운 샘플링(Down-sampling)이라고 한다. 풀링층을 사용하는 이유 : 표현의 공간 크기를 점진적으로 줄여 네트워크의 매개변수 및 계산량을 줄이고 과적합을 제어할 수 있다. 최대 풀링(Max Pooling) 풀링에서 사용하는 일반적인 방법은 최대값을 추출하는 위와 같은 맥스 풀링이다. 필터와 겹치는 영역안에서 최대값만을 추출한다. 위의 예시는 2 x 2 의 필터로 4 x 4 의 크기를 가진 입력이미지에 스트라이드 = 2를 적용했을 때..

합성곱 신경망(Convolution Neural Network)

지난번에 다수의 필터를 사용한 합성곱 연산의 예시를 보았다. 사실 각 필터마다 나온 결과 특성맵이 쌓이기 전 각 특성맵들은 Relu 함수를 거친 다음에 합쳐진다. 즉 하나의 합성곱층은 합성곱의 연산으로만 이루어진 것이 아니라 Relu 함수인 활성화함수 이렇게 두가지로 이루어져있다. 합성곱 신경망의 한 계층(합성곱층)을 위의 예시로 구성해보자. 1). 입력 데이터를 필터와 합성곱 연산한다. (결과: 4 x 4) 2). 그 각각의 결과에 편향(+ b[실수])을 더해준다. 편향 ‘b’는 하나의 실수지만 파이썬의 브로드캐스팅을 통해서 4 x 4 행렬에 맞게 16 개의 요소에 동일한 수를 더해주어 행렬과의 계산이 가능하게 해준다. 4). 편향을 더 해준 그 값에 비선형성(활성화함수로 ReLU 사용)을 적용해준다...

패딩(Padding)

패딩 (Padding) 합성곱 연산에도 단점이 존재한다. 1). 위의 예시를 봐서도 알겠지만 합성곱 연산을 할 때마다 이미지가 축소된다. 이 작업을 여러 번 반복한다면 특성 맵은 초기 입력보다 매우 작아질 것이다. (1 x 1 크기만큼 축소될지도?) 윤곽선을 검출하거나 어떤 특성들을 찾아내려고 할 때마다 저렇게 이미지가 축소되는 걸 원하지는 않을 것이다. 2). 모서리 부분에 놓인 픽셀들의 정보들은 거의 날려버리게 된다. 입력 이미지의 모서리 부분에 있는 픽셀(파란 네모로 표기한)들을 보면 딱 한 번씩만 필터와 맵핑되니 결과 이미지인 특성 맵에 단 한번만 사용되는 것이다. 그만큼 다른 픽셀들과 비교했을 때, 결과 이미지에 덜 사용하게 되니 이 픽셀들의 정보들을 거진 사용하지 않게 되는 것이다. 이 두 문..

합성곱 연산(Convolution operation)

다충 퍼셉트론으로 이미지 인식 문제를 처리해야 한다고 가정해보자. 위의 고양이 이미지의 크기를 1000 x 1000이라 해보자. 추가로 칼라이미지라 채널을 3개를 가지니 해당 이미지의 차원은 1000 x 1000 x 3 으로 총 3백만 개의 픽셀값으로 이루어진 것이다. 따라서 신경망에서 입력층은 총 3백만개의 입력특징을 갖게 된다. 만일 이 신경망에서 첫 은닉층에서 1000개의 은닉노드가 있다면 첫번째 은닉층로 가는 매개변수의 수는 3,000,000 x 1000 = 삼십억개가 된다. 이렇게 변수가 크면 큰 만큼의 충분한 데이터를 얻어서 과적합을 방지하기가 어려워진다. 또한 메모리의 요구사항이 몇 십억개의 변수를 학습하기에는 적합하지 않을 수도 있다. 하지만 합성곱 연산을 통해 이미지의 크기에 대해 고민할..