ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 11강 탐지와 분리 (Detection and Segmentation) (3/4, 물체 탐지 (Object Detection))
    AI 2021. 4. 26. 20:38

    다음으로 얘기하고 싶은 작업은 물체 탐지입니다. 이건 정말 내용이 많은 주제죠. 이건 컴퓨터 시각 (computer vision)에 있어서 핵심 문제와 같은 것이라서 아마도 여러분은 전체 세미나 강좌를 물체 탐지 역서와 여기에 적용된 다양한 기법들로만으로도 가르칠 수 있을 겁니다. 저는 짦게 할거고, 지난 2년간 사용되었던 물체 탐지 더하기 딥러닝 (deep learning)의 주요한 큰 아이디어에 대해서만 볼겁니다. 그러나 물체 탐지에서의 아이디어는 우리가 신경쓰는 어떤 정해진 카테고리 집합을 가지고 시작한다는 겁니다. 아마도 고양이와 개, 물고기 혹은 뭐든지, 우리가 관심있는 어떤 정해진 카테고리 집합이죠. 이제 우리의 작업은 입력 이미지가 주어지고, 이미지에 저 카테고리 중 하나가 나타날 때마다, 우리는 그 주변에 상자를 그리고 싶은 겁니다. 그리고 그 상자의 카테고리를 예측하고 싶은거죠. 그래서 이건 분류 더하기 위치 찾기와는 다릅니다. 왜냐면, 모든 입력 이미지에 대해서 출력의 숫자가 변할 수 있기 때문이죠. 여러분들은 얼마나 많은 물체를 각 이미지에서 찾게 될지 미리 알지 못합니다. 그래서 이건 결국 꽤 도전적인 문제가 되는 거죠.

    이건 재밌는데요. 우리는 이 그래프를 여러번 봤죠. 이미지넷 분류 성능을 여러 해에 걸친 함수로 표현한 겁니다. 그리고 그게 매년 더 좋아지는 것을 봤죠. 물체 탐지에서도 비슷한 트렌드 (trend)가 있습니다. 왜냐면 물체 탐지가 다시 이런 컴퓨터 시각에서의 핵심 문제들 중의 하나가 되었는데, 그건 사람들이 오랫동안 신경쓰고 있었던 겁니다. 이 슬라이드는 로쓰 걸쉭 (Ross Girshick)의 것인데, 이 문제에 대해서 많이 연구한 사람이죠. 그건 PASCAL VOC라고 불리는 이 특정 데이타셋에 대한 물체 탐지 성능의 진보를 보여주고 있죠. 그 데이타셋은 비교적 오랫동안 물체 탐지 커뮤니티 (community)에서 사용되었습니다. 보다시피 2012년까지 물체 탐지에 대한 성능은 침체되고 약간 느려지는 것 같은데, 그리고 나서 2013년에 처음으로 물체 탐지에 대한 딥러닝 접근방법들이 몇 개 나왔을 때, 성능이 그냥 위로 매우 빠르게 올라가고 해마다 점점 더 좋아지는 것을 볼 수 있죠. 눈치챘겠지만, 이 플롯 (plot)은 2015년에서 끝나지만, 그건 사실 그 이후로도 계속해서 위로 올라갔죠. 현재 이 데이타셋에서의 최첨단 (state of the art)은 80을 넘습니다. 그리고 사실 최근의 많은 연구들은 이 데이타셋에대한 결과를 더 이상 보고하지도 않습니다. 왜냐면 그건 너무 쉽다고 생각되기 때문이죠. 이 데이타셋에 대한 최첨단 숫자를 확실히 모르겠지만, 이 플롯의 위를 넘어섭니다.

    앞서 얘기했듯이 이건 위치찾기와는 다른데, 각 이미지에 대해 여러 개의 물체가 있을 수 있기 때문이죠. 왼쪽 위의 이 고양이 예제에서는, 하나의 물체만 있으므로 우리는 4개의 숫자만 예측하면 되죠. 그러나 중간에 있는 이 이미지에 대해서는 3마리의 동물이 있으므로 우리는 12개의 숫자를 예측해야 합니다. 각 경계 상자에 대해서 4개의 좌표가 필요하죠. 혹은 이 많은 오리들의 예제에서는 망이 많은 숫자들을 예측하길 바랄겁니다. 오리마다 4개의 숫자죠.

    물체 탐지는 위치찾기와 꽤 다른데, 왜냐면 물체 탐지에서는 다양한 숫자의 물체가 이미지가 있고 미리 몇 개를 찾아야 하는지 모르기 때문이죠. 결과적으로, 만약 물체 탐지를 회귀 문제 (regression problem)로 생각하면 어렵습니다. 그대신 사람들은 물체 탐지에 대해서 생각할 때 다른 패러다임을 사용하곤 합니다.

    그래서 매우 흔한 접근방법이고 컴퓨터 시각에서 오랫동안 사용되었던 것은 물체 탐지에 대한 이 슬라이딩 윈도우 (sliding window) 아이디어입니다. 그래서 이건 작은 조각을 가져다가 의미적 분리를 위해 적용하는 이 아이디어와 유사한데요. 물체 탐지에도 비슷한 아이디어를 적용할 수 있습니다. 그 아이디어는 입력 이미지로부터 여러 개의 잘라낸 것을 취하는 거죠. 이 경우에는 이미지 왼쪽 아래 모서리에서 이 잘라낸 것을 가지고 그 잘라낸 것을 합성곱에 넣고 합성곱 망은 그 입력의 잘라낸 것에 대해 분류 결정을 합니다. 그건 여기에 개가 없다, 여기에는 고양이가 없다고 얘기할 거고 우리가 신경쓰는 카테고리에 더해, 우리는 배경이라고 부르는 추가적인 카테고리를 더할 겁니다. 이제 우리가 신경쓰는 카테고리 중 어떤 것도 보이지 않으면, 우리의 망은 배경을 예측할 수 있습니다. 그래서 우리가 왼쪽 아래 모서리에서 이 잘라낸 조각을 취하면, 우리의 망은 바라건데 배경을 예측하고 여기에 어떤 물체도 없다고 얘기할 겁니다.

    이제 우리가 다른 잘라낸 조각을 취하면 우리의 망은 개가 맞다고 예측할 거고, 고양이는 아니고, 배경은 아니라고 예측할 겁니다.

    다른 조각을 잘라내면, 우리는 개는 맞고, 고양이는 아니고, 배경을 아니라는 것을 얻죠.

    다른 조각에서는 개는 아니고, 고양이는 맞고, 배경은 아니라는 것을 얻죠. 여기서 문제가 보이는 사람이 있나요? 네 어떻게 잘라낼 조각을 결정하는지가 의문이죠. 이건 매우 큰 문제입니다.

    이미지에는 물체가 몇 개든지 있을 수 있기 때문에, 이 물체들은 이미지의 어떤 위치에도 나타날 수 있죠. 이 물체들은 또한 이미지의 어떤 크기로도 나타날 수 있죠. 이 물체들은 또한 이미지내의 어떤 화면비 (aspect ratio)로도 나타날 수 있습니다. 그래서 일종의 브루트 포스 (brute froce) 슬라이딩 윈도우 접근 방법을 한다면 결국 이 문제와 씨름하기 위해서는 수천장, 수만장, 많고 많고 많고 많은 여러 잘라낸 조각들을 테스트해야 할 겁니다. 그리고 이 경우엔 저 잘라낸 조각들 모두가 거대한 합성곱망을 통해 들어가므로, 이건 완전히 계산적으로 추적할 수 없게 될 겁니다. 그래서 실제에선 사람들은 합성곱 망을 사용하는 물체 탐지를 위해 절대 이런 종류의 브루트 포스 슬라이딩 윈도우 접근 방법을 사용하지 않습니다.

    그대신, 이런 멋진 라인이 있는데, 영역 제안 (region proposals)이라고 불리는 연구에서 나온 거죠. 이건 일반적으로 딥러닝을 사용하는 것이 아닙니다. 이건 약간 더 전통적인 컴퓨터 시각 기법이죠. 그러나 영역 제안 망은 좀 더 전통적인 신호 처리, 이미지 처리 종류의 것들을 사용하죠. 입력 이미지가 주어지면, 영역 제안 망은 물체가 있을 만한 곳에 수천개의 상자를 제안할 겁니다. 우리는 이미지에서 가장자리를 찾고 닫혀진 가장자리를 포함하는 상자를 그리려는 등의 시도를 하는 것을 생각할 수 있습니다. 이런 다양한 종류의 이미지 처리 접근 방법들을 하는 거죠. 그러나 이런 영역 제안 망은 기본적으로 입력 이미지내에서 흐릿한 (blobby) 영역을 찾을 것이고 어떤 제안 영역 후보들의 집합을 제공해 주는데, 거기에서 물체들이 아마도 발견될 겁니다. 그리고 이것들은 비교적 실행하기에 빠를텐데, 여러분이 보게 될 영역 제안 방법의 흔한 예 하나는 셀렉티브 서치 (Selective Search)라고 불리는 것이고, 이건 2000개의 영역 제안을 제공할 겁니다. 그래서 여러분은 이런 것들을 CPU에서 약 2초동안 실행하고 나면, 입력 이미지에서 2000개의 영역 제안을 내뱉는 것죠. 물체가 발견될 것 같은 것이죠. 그래서 거기에는 많은 노이즈 (noise)가 있을 겁니다. 그것들 중 대부분은 진짜 물체가 아닐 겁니다. 그러나 그러나 재현율 (recall)이 꽤 높습니다. 만약 이미지에 어떤 물체가 있다면, 그건 이런 셀렉티브 서치로부터의 영역 제안에 의해 커버되곤 합니다. 그래서 이제 분류 망을 모든 가능한 위치와 이미지의 모든 크기에 적용하기 보다는, 먼저 이런 영역제안 망을 적용해서 물체가 있을 것같은 제안영역 집합을 얻고 이 제안 영역 각각에 대해 분류를 위한 합성곱 망을 적용하는 겁니다. 이렇게 하면 결국 모든 가능한 위치와 크기를 시도해 보는 것보다 훨씬 더 계산적으로 추적가능해 집니다.

    그리고 이 아이디어는 모두 몇 년전의 이 R-CNN이라고 불리는 논문에 나옵니다. 저것이 바로 그것을 하는 거죠.

    이 경우 입력 이미지가 주어지면, 우리는 어떤 영역 제안 망을 실행해서 제안을 얻을 겁니다. 이것들은 또한 가끔 관심 있는 영역 (regions of interest) 혹은 RoI라고 불립니다. 그래서 셀렉티브 서치가 관심있는 영역 2000개를 알려주는 거죠.

    이제 여기서 하나의 문제는 입력 이미지의 이 영역들이 크기가 다를 수 있다는 겁니다. 그러나 만약 그것들 모두를 분류를 위한 합성곱으로 통과시기면, 완전 연결계층 같은 것때문에 일반적으로는 모두 같은 크기의 이미지들은 원하죠. 그래서 우리는 이 영역 제안의 각각을 취해서 그것들을 다운스트림 망에서 입력으로 기대하고 있는 고정된 정사각형 크기로 변환할 필요가 있습니다. 그래서 우리는 저 영역 제안들을 잘라내고, 그 영역 제안들에 해당하는 영역들을 고정된 크기로 변환하고

    그것들 각각을 합성곱 망을 통과시키고

    그 망은 이 경우에는 SVM을 사용해서 그것들 각각에 대해 분류 결정을 하고, 저 잘라낸 조각들 각각에 대해 카테고리를 예측하는 거죠.

    게다가 R-CNN은 회귀도 예측합니다. 경계 박스에 대한 수정 (correction)같은 거죠. 이 입력 영역제안뿐 아니라요. 왜냐면 입력 영역 제안은 일반적으로 물체에 대해서는 맞는 위치에 있지만 그것들은 완벽하지 않을 수 있다는 게 문제죠. 이 각각의 제안에 대한 카테고리 레이블 뿐만 아니라, 그것은 또한 영역 제안 단계에서 예측되었던 박스에 대한 오프셋이나 수정 같은 4개의 숫자도 예측할 겁니다. 이건 멀티태스크 손실이고 이 전체를 훈련시킬 겁니다.

    우리가 이것을 언급한 것 같지만, 이 R-CNN 프레임워크 (framework)에는 많은 문제가 있습니다. 그리고 사실 오른쪽의 그림을 보면, 추가적인 경계상자 헤드를 볼 수 있죠. 다시 제자리에 두겠습니다. 그리고 이건 여전히 계산적으로 꽤 비쌉니다. 왜냐면 우리가 2000개의 영역 제안을 받는다면, 우리는 그 제안들을 독립적으로 실행하는 거고, 그건 꽤 비싼거니까요. 또한 이런 고정된 영역 제안에 의존하는 것에 대한 의문이 있죠. 우리는 그것들을 학습하는 것이 아니고 그게 문제죠. 실제에서 그건 결국 꽤 느립니다. 그래서 초기의 R-CNN 구현은 사실 모든 피쳐 (feature)들을 디스크에다가 부었고, 그건 이 모든 피쳐들을 저장하기 위해 수백기가의 디스크 용량을 차지했죠. 그리고 훈련도 수퍼 느렸죠. 왜냐면 그 이미지를 통과하는 이 모든 여러가지 순방향과 역방향 전달을 해야 했으니까요. 그들이 훈련시간으로 보고한 숫자가 84시간 정도가 걸렸다고 했죠. 그러니까 이건 수퍼 수퍼 느린거죠. 그리고 이제 테스트시에도 또한 수퍼 느립니다. 대략 이미지당 30분이죠. 왜냐면 이 영역 제안 각각에 대해 합성곱망을 통과하는 수천개의 순방향 전달을 실행할 필요가 있어서. 이건 결국 매우 느리게 됩니다.

     

    고맙게도 우리는 빠른 R-CNN이 있습니다. 많은 이 문제들을 고친것이죠. 그래서 빠른 R-CNN을 할 때는 같은 것처럼 보일 겁니다.

    우리는 입력 이미지로 시작할 거지만 각 관심있는 영역을 별도로 처리하는 대신, 우리는 전체 이미지를 실행시켜서 어떤 합성곱 계층들을 한번에 통과시키고 전체 이미지에 해당하는 이런 고해상도 합성곱 피쳐 지도를 제공할 겁니다.

    우리는 여전히 셀렉티브 서치 같은 어떤 정해진 것으로부터의 어떤 영역 제안을 사용하고 있지만, 영역 제안에 해당하는 이미지의 픽셀들을 잘라내는 대신, 우리는 그 영역 제안들을 이 합성곱 피쳐 지도에 사영하는 (project) 것을 생각해 보죠. 그리고 나서 각 제안에 해당하는 합성곱 피처 지도로부터 잘라내는 겁니다. 이미지로부터 직접적으로 잘라내는 것이 아니라요. 이렇게 하면 이미지당 많고 많은 잘라낸 부분이 있을때, 전체 이미지에 대해 이 비싼 합성곱 계산의 많은 부분을 재사용할 수 있습니다.

    그러나 만약 우리가 어떤 완전 연결 계층 다운스트림 (downstream)을 가지고 있으면, 그 완전 연결 계층들은 어떤 고정된 크기의 입력을 기대하고 있을거고, 이제 우리는 그 합성곱 피쳐 지도로부터 잘라낸 것의 모양을 변경해야 할 필요가 있고 미분가능한 (differentiable) 방법으로 그것을 합니다. 관심영역 (RoI) 풀링 계층이라고 부르는 것을 사용해서요.

    일단 이런 합성곱 피쳐 지도로부터 잘라낸 것을 변환하면, 이것들을 어떤 완전 연결 계층으로 통과시킬 수 있고 분류 점수와

    경계 상자에 대한 선형 회귀 오프셋을 예측할 수 있습니다.

    이제 이것들을 훈련시킬 때, 우리는 멀티태스크 손실을 가지는데, 이 두 제약사항 사이에서 트레이드 오프 (trade-off)가 있습니다.

    역전파 동안 우리는 이 전체를 역전파할 수 있고 그 모두를 같이 학습할 수 있습니다.

    이 관심 영역 (RoI) 풀링은, 최대 풀링처럼 보입니다. 지금 그것에 대한 세부사항을 보고 싶지는 않네요.

    속도 측면에서, R-CNN 대 (vs.) 빠른 R-CNN 대 (vs.) 이 둘 중간의 SPP망이라고 불리는 이 다른 모델을 보면, 훈련 시간에 빠른 R-CNN은 10배정도 훈련하기 빠릅니다. 왜냐면 여러 피쳐 지도들 간의 이 모든 계산을 공유하기 때문이죠.

    이제 테스트시에 빠른 R-CNN은 수퍼 빠른데 그것의 연산시간은 사실 영역 제안에 의해 대부분 결정되죠. 그래서 셀렉티브 서치를 사용하는 이 2천개의 영역 제안은 2초 정도가 걸리고 우리가 이모든 영역제안을 얻고 나면, 그것들 모두를 전체 이미지에 걸쳐서 이 비싼 합성곱을 공유하는 일종의 공유 방식으로 처리하기 때문에, 이 모든 영역 제안을 모두 1초 이내에 처리할 수 있습니다. 빠른 R-CNN은 결국 이 영역 제안의 계산에 의해 병목현상이 생기는 거죠.

    고맙게도, 우리는 이 문제를 더 빠른 R-CNN으로 해결했습니다. 이 고정된 함수를 사용해서 영역 제안을 계산하는 것이 병목이 된다는 것이 문제였죠. 그대신, 망 자체가 그 자신의 영역 제안을 예측하도록 만들었습니다. 그래서 이게 동작하는 방식은, 입력 이미지를 받아서 전체 입력 이미지를 어떤 합성곱 계층으로 통과시기고 전체 고해상도 이미지를 나타내는 어떤 합성곱 피처 지도를 얻는 거죠. 이제 별도의 영역 제안 망이 있는데, 이런 합성곱 피쳐 위에서 동작하고 망내에서 그 자신의 영역 제안을 예측합니다. 일단 영역 제안을 예측하고 나면, 그런 빠른 R-CNN처럼 보이는데, 합성곱 피처들로부터 나온 저 영역 제안들에서 잘라낸 것을 가지고 망의 나머지 부분으로 전달합니다. 여러가지를 한번에 하기 위한 멀티태스크 손실과 멀티태스트 훈련망에 대해 얘기했습니다. 이제 우리는 망에게 4가지를 한번에 하도록 얘기하고 있습니다. 이 4방향의 멀티태스크 손실의 균형을 맞추는 것은 좀 어렵습니다. 그러나 영역 제안 망은 두가지를 해야 하는데요. 하나는 각 잠재적인 제안에 대해 얘기해야 하죠. 그것이 물체인지 아니면 물체가 아닌지를요. 또, 그것은 사실 저 제안들 각각에 대해 경계 상자의 좌표를 회귀해야 합니다. 이제 최종 망은 끝에서 이 둘을 다시 해야 합니다. 이 제안들 각각에 대한 클래스 점수가 무엇인지에 대해 최종 분류 결정을 하는 것과 두번째 라운드의 경계 상자 회귀를 해서 영역 제안 단계로부터 발생할 수 있는 오류를 다시 수정하는 거죠.

    이런 것을 훈련시키고 나면 더 빠른 R-CNN은 결국 꽤 빨라집니다. 이제 망 밖에 있는 영역 제안에 대한 오버헤드를 제거했기 때문에, 이제 더 빠른 R-CNN은 결국 다른 대안에 비해 매우 매우 빠르게 됩니다. 또한, 한가지 재밌는 것은 여기서 영역 제안을 학습하고 있기 때문에, 만약 고정된 영역 제안 알고리즘과 데이타 사이에 맞지 않는 무언가가 있다면 무슨일이 벌어질까를 생각해 볼 수 있죠. 이 경우에는 일단 여러분의 영역 제안을 학습하게 되면, 만약 영역 제안이 다소 이상하거나 다른 데이타셋과 조금 다르더라도, 그 맞지 않는 무언가를 극복할 수 있죠. 그래서 이 전체 R-CNN 방법 족 (family)은, R은 영역 (region)을 나타내는데요, 이것들은 모두 영역기반 방법이죠. 왜냐면, 일종의 영역 제안이 있으면 우리는 저 잠재적인 영역 각각에 대해 어떤 독립적인 처리를 하고 있으니까요. 그래서 이 전체 방법족은 물체 탐지를 위한 영역기반 방법이라고 불립니다.

    그러나 가끔 보게 되는 물체 탐지를 위한 다른 방법족 (family)이 있는데요. 그건 일종의 단일 전달에 있어서 모두 피드포워드입니다. 이것들중 하나가 욜로 (YOLO)인데, 여러분은 한번 본다 (You Only Look Once)는 뜻이죠. 다른 하나는 SSD (Single Shot Detection)이죠. 이 둘은 비슷한 시기에 나왔습니다. 이런 잠재적인 영역 각각에 대한 독립적인 처리를 하기 보다는 우리는 이것들을 회귀 문제로 다루려고 합니다. 그냥 이 모든 예측을 한번에 커다란 합성곱 망으로 하는거죠. 이제 입력 이미지가 주어지면, 그 입력 이미지를 어떤 성긴 (coarse) 그리드 (grid)로 나누는 것을 생각할 수 있죠. 이 경우에는 7 x 7 그리드입니다. 이제 각 그리드 셀내에서 기본 경계 상자 (base bounding box) 집합을 생각해 봅시다. 여기서 저는 3개의 경계 상자를 그렸는데, 길쭉한 것, 넓은 것, 그리고 정사각형인 것이죠. 그러나 실제에선 3개 이상을 사용할 겁니다. 이제 이런 그리드 셀의 각각에 대해, 그리고 이런 베이스 경계 상자 각각에 대해, 여러분은 몇가지를 예측하고 싶을 겁니다. 하나는 베이스 경계 상자에서 떨어진 오프셋을 예측하고 이 베이스 경계 상자로부터 떨어져 있는 물체의 진짜 위치를 예측하고 싶을 겁니다. 또한 분류 점수를 예측하고 싶은 겁니다. 아마 이런 기본 경계 상자들 각각을 위한 분류 점수죠. 이 카테고리의 물체가 이 경계 상자에서 얼마나 나타날 것 같은지이죠. 그래서 결국은 입력 이미지로부터 7 x 7 그리드 x 5B + C의 거대한 텐서를 예측할 겁니다. 여기서 B는 기본 경계 상자고, 5개 숫자는 오프셋을 주는 각각의 숫자와 기본 경계 상자에 대한 신뢰도 (confidence)이죠. 그리고 C는 C 개의 카테고리에 대한 C개의 분류 점수죠. 그다음 물체 탐지를 이런 이미지의 입력, 이 3차원 텐서의 출력으로 보게 되고, 이 전체의 것을 거대한 합성곱 망으로 훈련시키는 것을 생각할 수 있습니다.

    이것이 이런 단일 샷 (single shot) 방법이 하는 일입니다. 여기서, 정답 물체를 이런 잠재적인 기본 상자와 매칭하는 (matching) 것은 약간 아슬아슬하지만 이게 이 방법들이 하는 일이죠. 그런데, 더 빠른 R-CNN에서 사용되는 영역 제안 망은 결국 이런 것들과 비슷하게 보이게 됩니다. 여기서 그것들은 어떤 그리드로 잘려진 이미지에 대한 어떤 기본 경계 상자 집합을 가지게 되죠. 또다른 영역 제안 망은 어떤 회귀 더하기 약간의 분류를 합니다. 여기에 약간 겹치는 아이디어들이 있는데요. 더 빠른 R-CNN에서는 영역 제안 단계를 일종의 이런 고정된 엔드 투 엔드 (end to end) 회귀 문제로 다루고 있죠. 그리고 나서 우리는 별도의 영역마다의 처리를 합니다. 그러나 이런 단일 샷 방법으로는 우리는 단지 첫번째 단계만 하고 우리의 모든 객체 탐지를 단일 포워드 전달로 합니다.

    물체 탐지는 수많은 여러 변수들이 있습니다. VGG, ResNet 같은 여러 기본 망 (base network)이 있을 수 있죠. 우리는 물체 탐지에 대한 여러 메타 전략들 (meta strategies)을 봤는데, 이런 더 빠른 R-CNN 타입의 영역 기반 방법 족 (familiy)과 이런 단일 샷 탐지 방법 족이 포함됩니다. 얘기하지는 않았지만 하이브리드 종류도 있는데, R-FCN이라고 불리는 것이고, 그 둘 사이에 있는 어떤 것이죠. 이미지 크기가 어떤지, 얼마나 많은 영역 제안들을 사용하는 지 등에 대한 많은 다양한 하이퍼파라미터들이 있습니다. 그리고 사실 이런 진짜 멋진 논문이 있는데, 올해 여름에 CVPR에 공개될 겁니다. 이 논문은 이 많은 여러 변수들에 대해서 정말 통제된 실험들을 하고 얼마나 이런 여러 번수들하에서 이 방법들이 어떻게 성능을 내는지 얘기하려고 합니다. 관심이 있다면 한번 보세요. 한가지 기억할 만한 주요한 사실은 더 빠른 R-CNN 스티일의 영역 기반 방법들이 더 높은 정확도를 내지만 단일 샷 방법들에 비해 훨씬 느립니다. 왜냐면, 단일 샷 방법들은 이런 영역별 처리를 요구하지 않기 때문이죠. 그러나 더 세부사항을 알고 싶으면 이 논문을 보길 바랍니다.

    저는 안드레이 (Andrej)와 몇 년전에 이 재미있는 논문을 썼는데, 그건 물체 탐지와 이미지 캡셔닝을 조합한 거죠. 그리고 밀도높은 캡셔닝 (dense captioning)이라고 불리는 이 문제를 했습니다. 각각의 영역에 대해 고정된 카테고리 레이블을 예측하기 보다는 각 영역에 대한 캡션을 작성하고 싶은 거죠. 우리는 이런 종류의 데이타가 있는 데이타셋이 있었는데, 영역들과 캡션이 같이 있는 데이셋을 가지고 있었죠. 그다음 우리는 이런 캡션들을 다 같이 예측하는 거대한 엔드-투-엔드 모델을 훈련시켰죠. 그리고 이것은 결국 더 빠른 R-CNN처럼 보이는 것이 되었는데, 여기에는 어떤 영역 제안 단계와 경계 상자가 있고, 그다음 어떤 영역별 처리가 있엇죠. 그러나 SVM이나 소프트맥스 손실 (softmax loss) 대신 그 영역별 처리는 RNN 전체 언어 모델을 가지고 각 영역에 대한 캡션을 예측하죠.

    그래서 그건 결국 더 빠른 R-CNN처럼 보이게 되었습니다.

    시간이 없어서 비디오는 건너 뛰겠습니다만, 아이디어를 소개하자면, 일단 이것을 가지면, 많은 이런 아이디어들을 묶을 수 있죠. 그리고 밀도높은 캡셔닝 같이 씨름하고 싶은 새로운 문제가 있으면, 물체 탐지와 이미지 캡셔닝 같은 다른 문제들에서 배운 것으로부터 배운 많은 컴포넌트들 (components)을 재사용하고, 문제를 위해 여러분이 신경쓰는 출력을 만들어내는 엔드 투 엔드 망을 연결할 수 있죠.

    댓글

Designed by Tistory.