반응형

www.analyticsvidhya.com의 [] 내용임

A Step-by-Step Introduction to the Basic Object Detection Algorithms (Part 1)

Introduction

    어수선하고 엉망인 집에서 방 열쇠를 찾기위해 여태 얼마나 많은 시간을 허비했는가? 이러한 경험은 누구에게나 일어나고 여태까지 믿을 수 없을 정도로 좌절하게 되는 경험으로 남을 것이다. 하지만 간단한 컴퓨터 알고리즘으로 정확한 열쇠의 위치를 몇밀리초 안에 찾을 수 있다면 어떨까?

    그러한 것이 객체 탐지 알고리즘의 힘이다. 이것은 간단한 예이지만 객체 탐지의 응용분야는 스마트 시티에서 실시간 차량 탐지를 위한 24시간 감시에서 부터 여러 다양한 산업에 걸쳐있다. 간단히 말해 강력한 딥러닝 알고리즘이 있다.

    이 글에서는 특히 객체 탐지를 위해 사용할 수 있는 다양항 알고리즘을 깊이있게 볼 것이다. RCNN, Fast RCNN, Faster RCNN같은 RCNN 계열에 포함되는 알고리즘부터 시작할 것이다. 이 후 연재되는 글에서는 YOLO, SSD 같은 더 발전된 알고리즘까지 다룰 것이다.

    우선 기본 기술과 ImageAI 라이브러리를 사용하여 파이썬으로 구현하는 하는 [Understanding and Building an Object Detection Model from Scratch in Python]을 먼저 보는 것을 권한다.


Table of Contents

  1. (딥러닝을 사용하여) 객체 탐지 작업을 하는 간단한 방법
  2. 지역 기반 합성곱 신경망(Region-based Convolutional Neural Network) 이해하기
    1. 직관적 RCNN
    2. RCNN의 문제점
  3. Fast RCNN 이해하기
    1. 직관적 Fast RCNN
    2. Fast RCNN의 문제점
  4. Faster RCNN 이해하기
    1. 직관적 Faster RCNN
    2. Faster RCNN의 문제점
  5. 요약

1. (딥러닝을 사용하여) 객체 탐지 작업을 하는 간단한 방법

    아래 이미지는 객체 탐지 알고리즘의 동작을 설명하는 유명한 예제이다. 이미지내 사람에서부터 연(kite)까지의 각 객체애 대해서 특정 수준의 정밀도로 위치를 찾고 분류한다.


    이미지내 객체 탐지를 위해 가장 간단하고 폭넓게 쓰이고 있는 딥러닝 접근 방법인 합성곱 신경망(Convolutional Neural Networks or CNN)으로 시작해 보자.

    CNN의 내부 동작을 간략하게 요약하기 위해 우선 아래 그림을 보자.


    네트워크게 이미지를 전달하면 이미지는 다양한 합성곱과 풀링 레이어에 보내진다. 최종적으로 객체 분류의 형태로 출력을 얻는다.

    각 이미지에 대해 출력으로 일치하는 분류(class)를 얻는다. 객체내 다양한 객체를 탐지하기 위해 이 기술을 사용할 수 있을까? 물론이다. CNN을 사용하여 일반적인 객체 탐지 문제를 어떻게 해결할 수 있는지 보자.

  1. 우선, 입력으로 이미지를 가져온다.

  1. 그리고 이미지를 다양한 구역으로 나눈다.

  1. 분리된 이미지로 각 구역을 고려한다.

  2. 분리된 모든 구역(이미지)을 CNN에 전달하고 다양한 분류(class)로 분류한다.

  3. 각 구역이 일치하는 분류로 나누어진 후, 탐지된 객체를 가진 원본 이미지를 얻기 위해 모든 구역을 합친다.


    이 방법을 사용한 문제는 이미지내 객체가 다른 가로세로 비율(aspect ration)와 공간적 위치(spatial location)을 가질 수 있다는 것이다. 몇몇 경우, 객체는 전체 이미지 크기인 반면, 다른 경우 객체는 이미지의 작은 부분으로만 있을 수 있다. 객체의 모양 또한 다를 수 있다.(실제로는 많은 케이스가 발생한다.)

    이 요인들의 결과로써 엄청난 계산 시간이 걸리는 매우 큰 구역이 필요하게 될 것이다. 따라서 이 문제를 해결하고 구역의 수를 줄이기 위해, region-based CNN을 사용할 수 있다. 이는 제안 방법(proposal method)를 사용하여 구역을 선택한다.


2. 지역 기반 합성곱 신경망(Region-based Convolutional Neural Network) 이해하기

2.1 직관적인 RCNN

    많은 수의 구역에서 작업하는 것 대신, RCNN 알고리즘은 이미지내에서 박스의 묶음을 제안하고 이들 박스가 객체를 포함하는지를 점검한다. RCNN은 이미지로부터 이들 박스를 추출하기 위해 선택적 검색(selective search)를 사용한다.(이들 박스를 구역(region)이라 한다.)

    우선 선택적 검색이 무엇이고 이것이 어떻게 다른 구역을 확인하는지 알아보자. 기본적으로 다른 축척(scale), 색상(color), 질감(texture), 엔클로져(enclosure)를 형성하는 4가지 구역이 있다. 선택적 탐색은 이미지에서 이러한 패턴을 확인하고 이에 기초하여 다양한 구역을 제안한다. 아래는 선택적 탐색이 동작하는 방법에 대한 개략적인 내용이다.

  • 우선 입력으로 이미지를 가져온다.

  • 다음으로, 이미지로부터 다양한 구역을 얻기위해 초기 sub-segmentation을 생성한다.

 Classification, Localization, Detection, Segmentation

  • 그리고 비슷한 구역을 더 큰 구역(색상, 질감, 크기, 모양의 유사도에 기초하여)으로 만들기 위해 합친다.

  • 최종적으로 이 구역들은 최종 객체의 위치를 만든다.(RoI - Region of Interest)

    아래는 객체 탐지를 위한 RCNN의 진행 단계를 간결하게 요약한 것이다.

  1. 사전 훈련된 CNN을 준비한다.
  2. 탐지되어야 하는 분류수에 기초하여 네트워크의 최종 레이어를 훈련한다. - 모델이 재훈련된다.
  3. 각 이미지에 대한 RoI(Region of Interest)를 구하고 CNN의 입력 크기에 일치하도록 구한 모든 구역의 모양을 맞춘다(reshape).
  4. 구역을 구한 후, 객체와 배경을 구분하기 위해 SVM을 훈련한다. 각 분류는 하나의 이진(binary) SVM을 훈련한다.
  5. 최종적으로 이미지에서 각각 확인된 객체에 대해 좀 더 정확한 바운딩 박스를 생성하기 위해 선형 회귀 모델(linear regression model)을 훈련한다.

    아래와 같은 시각적인 예제로 위 단계에 대한 더 좋은 아이디어를 얻을 수 있다.([{이미지 소스}(http://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf)])

  • 우선, 입력 이미지를 가지고 온다.

  • 몇가지 제안 방법(proposal method)를 사용하여 ROI(Region of Interest)를 얻는다.(예를 들면 아래와 같은 선택적 검색 같은)

  • 이 모든 구역들을 CNN.의 일력으로 모양을 바꾸고 각 구역은 ConvNet에 전달된다.

  • 그러면 CNN은 각 구역에 대한 특징을 추출하고 SVMs는 이들 구역을 다른 분류(class)로 나누기 위해 사용된다.

  • 마지막으로 바운딩 박스 회귀(BBox reg)는 확인된 각 구역에 대한 바운딩 박스를 예측하기 위해 사용된다.

2.1 RCNN의 문제점

    지금까지 RCNN이 어떻게 객체 탐지를 하는지 보았다. 하지만, 이 기술은 제약이 있다. RCNN 모델을 훈련하는 것은 아래 단계로 인해 비싸면서 느리다.

  • 선택적 탐색을 기본으로 각 이미지에 대해 2,000개의 구역을 추출
  • 각 이미지 구역에 대해 CNN을 사용하여 특징 추출. 만약 N개의 이미지가 있다면 CNN의 특징은 N * 2,000개가 된다.
  • RCNN을 사용한 객체 탐지의 전체 프로세스는 3개의 모듈을 갖는다.
    • 특징 추출을 위한 CNN
    • 객체 확인을 위한 선형 SVM 분류기
    • 바운딩 박스를 정확하게 하기 위한 회귀 모델

    이 모든 프로세스들은 RCNN을 매우 느리게 만들기 위해 결합한다. 새로운 이미지 각각에 대한 예측을 위해 약 40-50초가 걸린다. 이는 근본적으로 모델을 크고 무겁게 만들고 사실상 거대한 데이터셋인 경우 구축이 불가능하다.


Fast RCNN 이해하기

3.1 직관적인 Fast RCNN

    RCNN 알고리즘이 필요한 계산 시간을 줄이기 위해 할 수 있는 다른 것은 없을까? 이미지당 2,000번 CNN을 수행하는 대신, 이미지당 단지 한번만 수행하고 모든 RoI를 얻을 수 있다.(구역은 약간의 객체를 포함한다.)

    RCNN의 저자 Ross Girshick은 CNN이 이미지당 단지 한번만 수행되고 2,000개의 구역에 대한 계산을 공유하기 위한 방법을 찾는 아이디어를 제시했댜ㅏ. Fast RCNN에서는 입력 이미지를 CNN에 제공하고 CNN은 특성맵을 생성한다. 이 특성맵을 사용하여 RoI를 추출한다. 그리고 모든 제안된(추출된) 구역을 고정된 크기로 만들기 위해 RoI 풀링 레이어를 사용한다. 그러면 이를 FCN(fully connected layer)에 전달할 수 있다.

    개념을 간단하게 하기 위해 세분화해 보면 아래와 같다.

  1. 입력 이미지를 가져온다.
  2. 입력 이미지는 ConvNet에 전달되고 이 ConvNet은 RoI를 생성한다.
  3. RoI 풀링 레이어는 ConvNet의 입력에 따라 생성된 모든 RoI를 변형한다. 그리고 각 구역은 FCN으로 전달된다.
  4. Softmax 레이어는 분류를 출력하기 위해 FCN의 가장 꼭대기에서 사용된다. Softmax 레이어와 함께 선형 회귀(linear regression)레이어 또한 예측된 분류에 대한 바운딩 박스 좌표를 출력하기 위해 병열로 사용된다.

    Fast RCNN은 구역에서 특징을 추출하고 그것들을 다른 분류로 나누며 동시에 확인된 분류에 대한 바운딩 박스를 반환하기 위해 하나의 모델을 사용한다.

    좀 더 세분화기 위해, 설명에 실질적인 각도를 추가하기 위한 각 단계를 시각화한다.

  • 입력 이미지를 가져온다.

  • 이 이미지는 그에 따라 RoI를 반환하는 ConvNet으로 전달된다.

  • 그리고 모든 구역이 동일한 크기가 되도록 추출된 RoI에 RoI 풀링 레이어를 적용한다.

  • 마지막으로 RoI 풀링레이어를 거친 구역은 분류를 위해 FCN에 전달되며 softmax와 선형회귀 레이어를 동시에 사용하여 바운딩 박스를 반환한다.

    이것이 Fast RCNN이 RCNN의 두가지 주요 문제점을 해결하는 방법이다. 즉, 이미지당 2,000개의 구역 대신 하나만을 ConvNet에 전달하고 특징 추출, 분류, 바운딩 박스 생성을 위해 3개의 모델 대신 하나만을 사용한다.

3.2 Fast RCNN의 문제점

    하지만 Fast RCNN조차도 확실한 문제 영역이 있다. Fast RCNN 역시 RoI를 찾기 위한 제안 방법으로 선택적 검색을 사용한다. 이는 느리고 시간을 소비하는 프로세스이다. Fast RCNN은 객체를 탐지하기 위해 이미지당 약 2초정도가 걸린다. 이는 RCNN과 비교해 매우 좋지만 실생활에서의 큰 데이터셋을 생각한다면 Fast RCNN은 더 이상 그렇게 빨라보이지 않아 보인다.


Faster RCNN 이해하기

4.1 직관적인 Faster RCNN

    Faster RCNN은 Fast RCNN의 수정버전이다. Fast RCNN과의 주요 차이점은 Fast RCNN이 RoI 생성을 위해 선택적 검색을 사용한 반면, Faster RCNN은 RPN(Region Proposal Network)를 사용한다는 점이다. RPN은 입력으로 이미지 특성맵을 사용하여 각각 출력으로 객체화 점수(objectness score)를 갖는 객체 제안(object proposal) 셋을 생성한다.

    아래는 전형적인 Faster RCNN 접근 방법의 진행 단계이다.

  1. 입력이미지를 가져오고 특성맵을 반환하는 ConvNet에 전달한다.
  2. 구역 제안(region proposal) 네트워크가 특성맵에 적용된다. 이 네트워크는 객체화 점수(objectness score)에 따라 객체 제안(object proposal)을 반환한다.
  3. 이들 제안을 같은 크기로 만들어 RoI 풀링 레이어를 적용한다.
  4. 마지막으로 맨 마지막에 Softmax 레이어뫄 선형회귀 레이어를 가진 FCN에 전달한다.

    이 RPN(Region Proposal Network)가 실제로 어떻게 동작하는지 설면하면,

    우선 첫째로, Faster RCNN은 CNN으로부터 특성맵을 가져와 이를 RPN에 전달한다. RPN은 이 특성맵에 슬라이딩 윈도우를 사용하고 각 윈도우에서 다른 모양과 크기의 k개의 앵커 박스(Anchor box)를 생성한다.


    앵커 박스는 이미지 곳곳에 위치한 고정된 크기의 다른 모양과 크기의 바운딩 박스이다. 각 앵커에 대해 RPN은 두가지를 예측한다.

  • 우선은 앵카가 객체일 가능성이다.(여기서는 객체가 어떤 분류에 속하는지는 고려하지 않는다.)
  • 두번째로 바운딩 박스가 좀 더 객체에 잘 맞도록 조절하는 바운딩 박스 회귀이다.

    이제 RoI 풀링 레이어로 전달될 다른 모양과 크기의 바운딩 박스를 얻었다. 이제는 RPN 단계 이후에 분류되지 않는 제안이 있을 수 있게 된다. 각 제안이 객체를 포함하도록 각 제안을 가져와 자를 수 있다(crop). 이는 RoI 풀링 레이어가 하는 것이다. RoI 풀링 레이어는 각 앵커에 대해 고정된 크기의 특성맵을 추출한다.


    그러면 특성 맵은 Softmax와 선형회귀 레이어를 갖는 FCN으로 전달 된다. 이는 마지막으로 객체를 분류하고 확인된 객체에 대한 바운딩 박스를 예측한다.

4.2 Faster RCNN의 문제점

    지금 까지 이 글에서 논의된 모든 객체 탐지 알고지즘은 객체를 확인하기 위해 구역(region)을 사용한다. 네트워크는 한번에 완전한 이미지를 보지 않지만 연속적으로 이미지의 부분에 조첨을 맞춘다. 이는 두가지 문제를 유발한다.

  • 알고리즘이 모든 객체를 추출하기 위해 하나의 이미지를 여러번 통과해야 한다.
  • 다른 시스템이 한번씩 차례로 동작하기 때문에 시스템의 성능은 더욱더 어떻게 이전 시스템이 처리되었는지에 의존하게 된다.

5. 요약

    아래 테이블은 이 글에서 다룬 알고리즘의 용약이다.

Algorithms
Featuures
Prediciton time/image
Limitations
CNN 이미지를 여러개의 구역으로 나누고 각 구역을 다양한 분류로 분류한다. - 정확하게 예측하기 위해서는 많은 구역이 필요하고 따라서 높은 계산 시간이 필요하다.
RCNN 구역을 생성하기 위해 선택적 검색(selective search)를 사용한다. 각 이미지에서 약 2000개의 구역을 추출한다. 40 ~ 50초 각 구역이 따로 CNN으로 전달되어 높은 계산 시간이 필요하다. 또한 예측을 위해 다른 세가지 모델을 사용한다.
Fast RCNN 각 이미지는 단지 한번 CNN에 전달되고 특성맺이 추출된다. 선택적 검색은 예측을 위해 이들 맵에서 사용된다. RCNN에서 사용된 세가지 모델을 모두 을 하나로 묶는다. 2초 선택적 검색이 느리기 때문에 계산 시간이 여전히 높다.
Faster RCNN 선택적 검색 방법을 알고리즘을 훨씬 더 빠른게 하는 RPN으로 대체한다. 0.2초 객체 제안(object proposal)이 시간이 걸리고 하나씩 차례로 다른 시스템이 동작하는 것이 있기 때문에 시스템의 성능은 이전 시스템이 어떻게 수행되느냐에 달려있다.
반응형

+ Recent posts