딥러닝 기반 FAST 객체 탐색 기법 - CNN, YOLO, SSD

posted Dec 31, 2017, 5:16 AM by laputa99999@gmail.com   [ updated Mar 2, 2018, 3:00 AM ]
최근 건설 자동화 이슈가 다시 부상하고 있다. 오래전에 로봇 기반 건설 연구가 유행이었던 적이 있었다. 그때는 지금보다 기술 수준도 낮았고, 특히, 비전 기술의 완성도가 낮아, 로봇 자율 시공이 아닌 운전자가 직접 조정하는 수준에서 크게 차이가 나지 않았다. 

현재, 구글, 페이스북 및 세계 선진 대학 연구소와 오픈소스 조직에서 개발한 인공지능, 빅데이터, BIM, IoT, 드론, 비전 및 역설계와 같은 기술이 실용화되면서, 지금까지 현장 컨트롤이 어려웠던 건설 분야에 이 기술을 활용할 수 있는 가능성이 크게 높아졌다.

특히, 건설 현장의 다양한 객체 변화를 기록하고, 변화 패턴을 확인할 수 있으려면, 최근 급격히 발전하고 있는 딥러닝 기반의 비전 기술을 활용해 볼 수 있다.
YOLO object detection demo

YouTube Video

웹캠을 이용한 YOLO 실시간 영상 객체 탐색

이 글은 인공지능 기반 비전 기술의 핵심이 되는 객체 추출 방법을 설명한다. 지난 기사에서 비전에 가장 많이 활용되고 있는 기술인 CNN(Convolutional Neural Network)와 다양한 응용 사례를 다루었기 때문에 좀 더 자세한 기술 요소를 확인해 보겠다. 특히, 카메라에서 얻은 이미지의 객체 추출을 위한 경계 상자(그리드) 개념과 YOLO(You only Look Once), SSD 등 알고리즘을 간략히 설명한다.

개요
이미지에서 객체들은 다양한 영역에 분포되어 있다. 이런 이유로, 이미지에서 객체를 추출하기 전에 객체가 어느 범위 내에 있는 지를 경계 상자를 먼저 확인해야 한다. 
다음 그림은 객체의 위치와 크기를 포함하는 경계 상자 예이다
경계 상자와 객체 탐색(CV-Tricks.com)

일반적으로, 경계 상자를 식별하기 위해서 다음 변수를 사용한다. 

object_class_name, 
bounding_box_top_left_x_coordinate,
bounding_box_top_left_y_coordinate,
bounding_box_width,
bounding_box_height

슬라이딩 윈도우 검출기 데모      

경계 상자를 예측하기 위한 여러 알고리즘이 있다. 

슬라이딩 윈도우 방식에서는 이미지의 슬라이딩 윈도우 영역 이미지가 객체 클래스 예측 함수에 전달된다. 슬라이딩 윈도우는 이미지의 객체 탐색을 위해, 이미지 좌상단부터 일정 크기의 경계 상자를 만들어, 그 안에 객체를 탐색하는 과정을 반복한다. 

객체는 다양한 크기가 될 수 있다. 경계 상자 내 이미지를 객체 인식 가능한 특정 크기로 정규화하기 위해, 보통 다음 그림과 같이 이미지 피라미드를 생성하여 문제를 해결한다. 이미지는 최소 크기에 도달 할 때까지 다운 샘플링된다. 이러한 이미지 각각에 대해 객체 검출이 실행된다. 피라미드는 최대 64 레벨을 가지는 것이 일반적이다.

이미지 피라미드(CV-Tricks.com)

사람은 서거나 잘 때 다른 화면 비율을 가진다. 경계 박스 크기는 비율도 고려해야 한다.

Hog Features를 이용한 객체 감지
컴퓨터 비전의 역사에서 획기적인 논문에서 Navneet Dalal & Bill Triggs는 Histogram of Oriented Gradients(HOG)가 실세계 문제를 저렴한 계산 비용으로 처리할 수 있음을 소개했다(2005). 이 개념은 피라미드 슬라이딩 윈도우를 실행해 각 윈도우에서 객체 분류를 하기 위해,  SVM(Support Vector Machine)의 Hog Feature를 계산한다. 이를 이용해, 보행자 감지, 얼굴 인식,물체 추출 등을 동영상에 대해 실시간으로 추출할 수 있다.
SVM 기반 이미지 인식 방법(CV-Tricks.com)

CNN은 정확도 높은 객체 추출이 가능하지만, 윈도우 검출 슬라이딩에서 획득한 수많은 이미지를 CNN으로 실행하는 것은 불가능했다. 영역(region)을 고려한 R-CNN라는 알고리즘을 사용하여 이 문제를 해결할 수 있다. 이 방법은 객체 분류에 필요한 경계 상자의 수를 줄일 수 있다. 이 방법은 선택적 검색을 위해, 질감, 강도, 컬러, insideness 등의 로컬 정보를 사용한다.


R-CNN 구조(CV-Tricks.com)

하지만, 선택적 검색에 의해 생성된 2000개의 region은 CNN처리에 많은 시간이 소요된다. SPP-net(SPP-net. Spatial Pyramid Pooling)은 한 번만 전체 이미지에 대한 CNN을 계산한다. 이외에 FAST RCNN은 SPP-net RCNN의 아이디어를 사용한다. 공간 풀링 통해 구배를 계산한다.

SPP-net 구조(CV-Tricks.com)

YOLO(You only Look Once)
YOLO는 각 이미지를 S x S 개의 그리드로 분할하고, 그리드의 신뢰도를 계산한다. 신뢰도는 그리드 내 객체 인식 시 정확성을 반영한다. 다음 그림과 같이 처음에는 객체 인식과는 동떨어진 경계 상자가 설정되지만, 신뢰도를 계산하여 경계 상자의 위치를 조정함으로써, 가장 높은 객체 인식 정확성을 가지는 경계 상자를 얻을 수 있다. 
YOLO 객체 검출 시스템 (YOLO)

그리드에 객체 포함 여부를 계산하기 위해, 객체 클래스 점수를 계산한다. 이 결과로 총 S x S x N 객체가 예측된다. 이 그리드의 대부분은 낮은 신뢰도를 가진다. 신뢰도를 높이기 위해 주변의 그리드를 합칠 수 있다. 이후, 임계값을 설정해 불필요한 부분은 제거할 수 있다. 아래 그림과 같이 30% 신뢰도를 설정하면, 많은 그리드는 제외된다.

그리드 신뢰도 계산 후 제거된 모습 (YOLO)
YOLO 신경망 구성 (YOLO)

YOLO는 단순한 처리로 속도가 매우 빠르다. 기존 다른 real-time 비전 기술과 비교할 때, 2배 정도 높은 성능을 보인다. 이미지 전체를 한 번에 바라보는 방식으로 클래스를 분별한다. 

YOLO는 Darknet 프레임웍 기반으로 동작하며, 자세한 내용은 다음 링크를 참고하여 실행할 수 있다.

YOLO 설치 후 객체 비전 인식 결과

참고로, 리눅스 우분투에서 dark와 YOLO 설치는 그리 어렵지 않다. 다만, NVIDIA, CUDA설치가 만만치 않은 데, 이는 아래 링크와 본문 마지막의 레퍼런스(16 - 20번)들을 참고하길 바란다.

우분투에서 OpenCV 설치도 복잡하고 에러도 많이 난다. 관련해 무한 구글링으로 찾은 다음 링크를 참고해 설치하길 바란다. 기준은 Ubuntu 16.04, OpenCV 3.4 이다. 

  • OpenCV 3.4 설치. 디펜던시(depend) 에러는 sudo apt-get install 시 해당 라이브러리의 버전을 명시해 해결할 것(참고 링크)
  • 운이 없다면, 앞의 디펜던시 에러를 링크 참고해 처리하면, Black screen(참고 링크), Failed to start session 등 문제가 발생하는 경우가 있다(본인의 경우-.-).
  • Black screen은 보통 unity 를 purge해서 없애고 다시 재설치하면 해결된다. 하지만, Failed to start session 이 발생하여 로그인 안되는 경우가 발생하기도 하는 데, 이 경우 ubuntu-desktop, ubuntu-session 을 다시 설치해야 한다.
  • 이때 다시 디펜던시 에러가 나면, 다시 해당 버전에 대한 링크가 되도록 apt-get install 시 해당 패키지 버전을 명시해 주어야 한다.  

제대로 설치되면 YOLO를 이용해 다음 그림과 같이 실시간 동영상에서 객체 등을 추출할 수 있다.

YOLO WebCAM 실시간 동영상 객체 인식 장면

Single Shot Detector(SSD)
SSD는 객체 검출 속도 및 정확도 사이의 균형이 있는 알고리즘이다. SSD는 한 번만 입력 이미지에 대한 CNN을 실행하고 형상 맵(feature map)을 계산한다. 경계 상자 및 객체 분류 확률을 예측하기 위해 이 형상 맵을 3 × 3 크기로 CNN을 수행한다. SSD는 CNN처리 후 경계 상자를 예측한다. 이 방법은 다양한 스케일의 물체를 검출 할 수 있다.

비전에서 객체를 검출할 때, 속도와 정확도는 다음 그림과 같이 trade-off 관계가 있다. 그러므로, 활용 목적에 따라 적절한 알고리즘을 응용하는 것이 필요하다. 

딥러닝 기반 비전 알고리즘 성능 비교 (CV-Tricks.com)

마무리
지금까지 간략하게 딥러닝 기반 FAST 객체 탐색 방법을 살펴보았다. 이와 관련해 다수의 딥러닝 알고리즘이 오픈소스로 공유되고 있으며, 다양한 운영체제에서 개발할 수 있는 환경이 제공되고 있다. 시간이 된다면, 각자 도메인에서 소개한 기술을 적용해 보는 것도 좋을 듯 하다. 

레퍼런스 
Comments