CS/DL
[DL] 합성곱 신경망을 사용한 컴퓨터 비전
sliver__
2022. 7. 3. 12:46
728x90
[합성곱 층]
- Convolution layer는 입력 이미지의 모든 픽셀에 연결되는 것이 아니라 합성곱 층 뉴런의 수용장 안에 있는 픽셀에만 연결된다.
- 두 번째 convolution layer에 있는 각 뉴런은 첫 번째 층의 작은 사각 영역 안에 위치한 뉴런에 연결된다.
- 일너 구조는 네트워크가 첫번째 은닉층에서는 작은 저수준 특성에 집중하고, 그 다음 은닉층에서는 더 큰 고수즌 특성으로 조합해나가도록 도와준다.
- 패딩 ( padding )
- 높이와 너비를 이전 층과 같게 하기 위해 입력의 주위에 0을 추가하는 것
- 스트라이드 ( stride )
- 수용장 사이에 간격을 두어 큰 입력층을 훨씬 작은 층에 연결하는 것도 가능하다.
- 모델의 계산 복잡도를 크게 낮추어 준다
[필터]
- 뉴런의 가중치는 수용장 크기의 작은 이미지로 표현될 수 있다.
- 필터를 거치고나면 하나의 특성 맵 ( feature map )을 만든다.
- 훈련하는 동안 합성곱 층이 자동으로 해당 문제에 가장 유용한 필터를 찾고 상위층은 이들을 연결하여 더 복잡한 패턴을 학습합니다.
[여러가지 특성 맵 쌓기]
- 실제 합성곱은 여러 가지 필터를 가지고 필터마다 하나의 특성 맵을 출력하므로 3D로 표현하는 것이 더 정확하다.
- 하나의 합성곱 층이 입력에 여러 필터를 동시에 적용하여 입력에 있는 여러 특성을 감지할 수 있다.
- $ z_{i, j, k}$는 합성곱 층의 k 특성 맵에서 i행, j열에 위치한 뉴런의 출력이다.
- $ s_{h}, s_{w} $ 는 수직과 수평 스트라이드이고 $ f_{h}, f_{w} $ 는 수용장의 높이와 너비이다. 그리고 $ f_{n^{`}}는 이전 층 ( l - 1 ) 층에 있는 특성 맵의 수이다.
[메모리 요구사항]
- 합성곱 층이 많은 양의 RAM을 필요로 한다.
- 훈련 동안 역전파 알고리즘이 역방향 계산을 할 때 정방향에서 계산했던 모든 중간값을 필요로 하기 때문이다.
- 메모리 부족으로 훈련이 실패한다면 미니배치 크기를 줄여본다.
- 또는 스트라이드를 사용해 차원을 줄이거나 몇 개 층을 제거할 수 있다.
- 32비트 부동소수 대신 16비트 부동소수를 사용할 수 있다.
- 아니면 여러장치에 CNN을 분산시킬 수 있다.
[풀링 층]
- 목적은 계산량과 메모리 사용량, 파라미터수를 줄이기 위해 입력 이미지의 부표본( subsample ) 을 만드는 것이다.
- 풀링 뉴런은 가중치가 없다.
- 최대, 평균 같은 합산 함수를 사용해 입력값을 더하는 것이 전부이다.
- Max pooling layer
- 각 수용장에서 가장 큰 입력값이 다음 층으로 전달되고 다른 값은 버려진다.
- Stride, padding 설정이 가능하다.
- 입력 채널에 독립적으로 적용되므로 출력의 깊이가 입력의 깊이와 동일하다.
- 불변성 ( invariance ) 를 제공한다.
- 회전, 확대, 축소에 약간의 invariance를 제공한다.
- 입력값의 대부분을 잃는다.
- 시맨틱 분할의 경우 입력 이미지가 이동하였다면 추척이 필요하므로 등변성 ( eqivariance ) 가 필요하다.
- Average pooling layer
- 평균을 계산하여 다음 층으로 전달한다.
- Max pooling layer가 일반적으로 더 성능이 좋아서 대부분 Max pooling layer를 사용한다.
- Global average pooling layer
- 각 특성 맵의 평균을 계산하는 것이다.
[CNN 구조]
- 전형적인 CNN 구조는 합성곱 층을 몇 개 쌓고 ( 각각 Relu 층을 그 뒤에 놓고 ), 그 다음에 풀링층을 쌓고를 반복한다.
- 맨 위층에는 몇 개의 완결 연결 층 ( + Relu ) 으로 구성된 일반적인 feedforward neural network 추가되고 마지막 층에서 예측을 출력한다.
[LeNet-5]
[AlexNet]
- 데이터 증식을 수행했다.
- 데이터 증식은 진짜 같은 훈련 샘플을 인공적으로 생성하여 훈련 세트의 크기를 늘린다.
- 데이터 증식은 과대 적합을 줄이므로 규제 기법으로 사용할 수 있다.
- 생성된 샘플은 진짜에 가까워야 한다.
- 훈련 세트의 이미지를 변경, 이동, 회전, 명암을 조정을 한다.
- LRN ( Local response normalization )
- 가장 강하게 활성화된 뉴런이 다른 특성 맵에 있는 같은 위치의 뉴런을 억제한다.
[Google LeNet]
- 인셉션 모듈 ( inception module ) 을 사용했다.
- 각 합성곱 층의 합성곱 커널의 수는 하이퍼 파라미터이다.
[ResNet]
- 잔차 네트워크 ( residual network ) 를 사용했다.
- skip - connection : 어떤 층에 주입되는 신호가 상위 층의 출력에 더해진다.
- 스킵 연결을 추가하면 네트워크는 입력과 같은 값을 출력한다.
- 초기에는 항등 함수 ( identitiy function ) 을 모델링한다.
- 목적 함수가 항등 함수에 매우 가깝다면 훈련 속도가 매우 빨라진다.
- 스킵 연결을 많이 추가하면 일부 층이 아직 학습되지 않았더라도 네트워크는 훈련을 시작할 수 있다.
- 스킵 연결 덕분에 입력 신호가 전체 네트워크에 손쉽게 영향을 미친다.
[사전 훈련된 모델을 사용한 전이 학습]
- 충분하지 않은 훈련 데이터로 이미지 분류기를 훈련하려면 사전훈련된 모델의 하위층을 사용하는 것이 좋다.
- github 참조
[분류와 위치 추정]
- 사진에서 물체의 위치를 추정하는 것은 회귀 작업으로 나타낼 수 있다.
- 물체 주위의 바운딩 박스 ( bounding box ) 를 예측하는 방법은 물체 중심의 수평, 수직 좌표와 높이, 너비를 예측하는 것이다. 즉 네 개의 숫자를 예측해야 한다.
- 데이터 셋에 바운딩 박스를 추가하여야 한다..
[객체 탐지]
- 하나의 이미지에서 여러 물체를 분류하고 위치를 추정하는 작업을 객체 탐지 ( object detection ) 이라고 한다.
- 몇 년 전까지 널리 사용되던 방법을 하나의 물체를 분류하고 위치를 찾는 분류기를 훈련한 다음 이미지를 모두 훑는 것이다.
- 조금씩 다른 위치에서 동일한 물체를 여러 번 감지한다.
- 불필요한 바운딩 박스를 제거하기 위해 사후 처리가 필요하다. NMS ( Non max supression )
- CNN에 또 다른 꽃이 정말 이미지에 존재하는지 확률을 추정하기 위해 존재여부 ( objectness ) 출력을 추가한다.
- 시그모이드 활성화 함수를 사용하고 이진 크로스 엔트로피 손실을 사용해 룬련한다.
- 그 다음 존재여부 점수가 어떤 임곗값 이하인 바운딩 박스를 모두 삭제한다. => 실제로 꽃이 들어있지 않은 바운딩 박스가 모두 삭제될 것이다.
- 존재여부 점수가 가장 높은 바운딩 박스를 찾고 이 박스와 많이 중첩된 다른 바운딩 박스를 모두 제거한다.
- 제거할 바운딩 박스가 없을 때까지 반복한다.
728x90