Computer Vision/Deep learning

26. 객체 탐지

jwjwvison 2021. 6. 15. 20:27

 하나의 이미지에서 여러 물체를 분류하고 위치를 추정하는 작업을 객체 탐지(object dection)이라고 한다. 몇 년 전까지 널리 사용되던 방법은 하나의 물체를 분류하고 위치를 찾는 분류기를 훈련한 다음 그림 14-24처럼 이미지를 모두 훑는 것이다. 이 예에서는 이미지를 6x8 격자로 나누고 하나의 CNN(굵은 검정 사각형)이 모든 3x3 영역을 지나간다. 이 CNN이 이미지 왼쪽 상단을 지나갈 때 가장 왼쪽에 있는 장미꽃의 일부를 감지한다. 그다음 오른쪽으로 한 스텝 이동해서 같은 꽃을 다시 감지한다. 그다음 스텝에서 가장 위쪽에 있는 장미꽃을 감지하기 시작한다. 다시 오른쪽으로 한 스텝 이동해서 같은 꽃을 감지한다. 이런 식으로 CNN이 전체 이미지를 슬라이딩하면서 모든 3x3 영역을 본다. 또한 객체 크기가 서로 다르기 때문에 CNN이 다른 크기의 영역을 슬라이딩할 수 있다. 예를 들어 3x3 영역이 끝나면 CNN이 4x4 영역도 슬라이드할 수 있다.

 이 방식은 매우 쉽지만 앞에서 볼 수 있듯이 조금씩 다른 위치에서 동일한 물체를 여러 번 감지한다. 불필요한 바운딩 박스를 제거하기 위해 사후 처리가 필요하다. 흔히 사용하는 방법은 NMS(non-max suppression)이다. 방법은 다음과 같다.

 이런 간단한 객체 탐지 방식은 꽤 잘 동작하지만 CNN을 여러 번 실행시켜야 해 많이 느리다. 다행히 완전 합성곱 신경망(fully convolutional network(FCN))을 사용하면 CNN을 훨씬 빠르게 이미지에 슬라이딩시킬 수 있다.

 

 논문 저자들은 CNN맨 위의 밀집 층을 합성곱 층으로 바꿀 수 있다고 설명한다. 예를 들어 7x7 크기(커널 크기가 아니라 특성 맵 크기이다) 100개의 특성 맵을 출력하는 합성곱 층 위에 뉴런이 200개 있는 밀집 층이 있다. 각 뉴런은 합성곱 층에서 출력된 100x7x7 크기의 활성화 값(그리고 편향)에 대한 가중치 합을 계산한다. 이 밀집 층을 7x7 크기의 필터 200개와 'valid' 패딩을 사용하는 합성곱 층으로 바꾸면 이 층은 1x1 크기의 특성 맵 200개를 출력할 것이다.(커널이 정확히 입력 특성 맵의 크기와 같고 'valid' 패딩을 사용했기 때문이다). 다른 말로 하면 밀집 층과 마찬가지로 200개의 숫자가 출력되는 것이다. 이 합성곱 층의 수행하는 계산을 자세히 살펴보면 밀집층이 만드는 숫자와 완전히 동일하다. 유일한 차이는 밀집 층의 출력은 [배치 크기, 200] 크기의 텐서이고 합성곱 층은 [배치크기, 1,1,200] 크기의 텐서를 출력한다.

 

 이 네트워크의 역할은 무엇일까? 밀집 층은 (입력 특성마다 하나의 가중치를 두므로) 특정 입력 크기를 기대하지만 합성곱 층은 어떤 크기의 이미지도 처리할 수 있다(대신 합성곱 층은 입력 채널마다 커널 가중치가 달라서 특정 개수의 채널을 기대한다). FCN은 합성곱 층(그리고 동일한 성징을 가진 풀링 층)만 가지므로 어떤 크기의 이미지에서도 훈련하고 실행할 수 있다.

 

 < YOLO >

 YOLO는 매우 빠르고 정확한 객체 탐지 구조이다.