Search
Duplicate

시각적 이해를 위한 머신러닝/ Convolutional Neural Networks

Fully-connected는 모든 input이 모든 output에 영향을 준다.
Fully-connected를 다르게 시각화 하면 위와 같다. 모든 픽셀이 하나의 output에 영향을 줌.
이미지에서 패턴을 찾기 위해 —예컨대 눈— filter를 생각할 수 있다.
filter를 이미지 전체에 대해 돌면서 filter와 score를 계산해서 영역을 찾는 것.
그러한 이미지 내에서 패턴을 찾는 것을 Convolution이라고 한다.
filter를 어떻게 만들 것인가?
머신러닝에서는 아키텍쳐만 설계하고, 파라미터는 데이터로부터 학습해야 함.
fully-connected로는 spatial locality를 찾아낼 수 없음 —모든 픽셀이 영향을 주기 때문.
convolution의 몇 가지 가정
지역적으로 가까운 픽셀만 본다.
패턴은 위치와 무관하게 사용 가능하다. —눈이 어디에 있든 눈의 패턴은 동일하다. → 사실 각도가 바뀌면 다름.
만일 x-lay 처럼 위치가 정해진 이미지라면 굳이 모든 영역에 대해 패턴을 적용하게 계산량 낭비가 될 수 있음.
도메인 지식이 중요
Convolution의 연산 과정. 이미지 전체에 걸쳐 filter를 한칸씩 움직이면서 연산한다.
RGB 3채널을 쓴다면 filter를 3개를 쓴다.
바이어스가 1추가 된다는 것에 주의
컨볼루션 연산 과정
3개 filter의 값이 모두 합쳐지므로 activation map은 1이 된다.
만일 filter 자체를 여러 개 쓴다면 —사람, 개, 고양이, 코끼리 4개 filter— 최종 output이 filter 수만큼 나온다.
그렇게 만들어진 activation map 자체에도 convolution 연산을 할 수 있다.
마지막에 10개가 나오는거는 filter를 10개를 썼기 때문
앞선 layer의 결과에 대해 size를 맞는 filter를 설계해야 한다.
convolution을 중첩해서 학습 시키면, 앞쪽에 있는 layer는 low-level feature를 학습하고, 뒤로 갈수록 점점 high-level feature를 학습하게 된다.
가장 낮은 단계에서는 선, 방향, 색 변이 등을 배우고, 위로 올라갈 수록 그 low-level을 조합한 형태를 배움
Convolution에 대한 의문
layer가 깊어질수록 이미지 크기가 점점 줄어드는데, 이러면 layer가 깊어지면 이미지 자체가 없어진다.
요즘은 4k 처럼 높은 해상도의 이미지를 쓰는데, 이걸 다 계산하고 있으면 계산량은 큰데, 실제 계산 결과에는 큰 차이가 없을 가능성이 높음
기본 컨볼루션 연산
Stride를 주면 그만큼 건너 뛰면서 연산을 하기 때문에 계산량을 줄일 수 있음
Stride 계산 공식에 따라 값이 정수로 떨어지지 않으면 사용 불가.
이미지를 0으로 둘러싼 padding을 추가해 주면 Stride가 안 맞는 문제도 해결할 수 있고, conv layer를 지나면서 이미지가 점점 줄어드는 문제도 해결할 수 있음.
Stride와 Padding을 모두 적용한 공식.
패딩의 크기를 P=(F1)/2P = (F-1)/2 잡으면 input과 output의 크기를 갖게 할 수 있다.
위와 같은 설정일 때 convolution의 파라미터 계산.
같은 설정일 때 fully-connected를 사용하면 학습해야 할 parameter가 훨씬 늘어남.
고로 지역적 패턴을 학습할 때는 conv가 더 효율적이다.
Filter를 1x1 크기로 사용하는 예.
이거는 주변 픽셀 정보와 관계 없이 본인 자리의 channel-wise로만 연산을 수행하는데, 이 결과 이미지의 dimension이 바뀜. 이 방법은 dimension을 조절하는데 사용한다. —보통은 줄이는데 쓴다.
ConvNet에 쓰이는 주요한 4개 하이퍼파라미터 —filter 개수, filter 크기, stride, padding
filter 크기, stride, padding은 w, h 별로 따로 줄 수 있음. 하지만 보통 잘 안 씀.
Tensorflow의 conv 예제
Fully-connected와 Conv 비교
모든 conv는 fully-connected의 특별한 경우이고
동시에 모든 fully-connected는 conv의 특별한 경우임.
pooling layer는 downsampling 용으로 쓴다. 이때 denoising 효과도 있음. 계산량도 줄어듬.
stride와 filter 크기를 이용해서 큰 값을 취하거나(max pooling), 평균값(average pooling)을 취한다
풀링은 학습이 아니라 그냥 연산 과정임.
filter와 stride에 연산 예.
filter와 stride가 다르면 결과 크기가 같더라도 값은 다를 수 있음.
보통 이미지 반으로 줄이는 2x2, stride 2를 많이 쓴다.
풀링 계산 공식
풀링에서는 학습이 일어나지 않는다.