본문 바로가기
AI | 딥러닝/Concept

[AI/딥러닝] 객체 검출(Object Detection) 모델의 종류 R-CNN, YOLO, SSD

by 고뭉나무 2021. 8. 1.

 

지금까지 딥러닝의 모델과 그 중에서 CNN의 세부 모델까지 알아보았습니다.

2021.07.10 - [SW programming/Computer Vision] - AI, 머신러닝, 딥러닝 이란? 그리고 딥러닝 모델 종류

2021.07.11 - [SW programming/Computer Vision] - [딥러닝 모델] CNN (Convolutional Neural Network) 설명

2021.08.01 - [SW programming/Computer Vision] - [AI/딥러닝] CNN Network layer 모델들 (AlexNet, GoogLeNet, ResNet)

 

이번 포스팅에서는 객체 검출을 하는 CNN과 같은 선상의 개념이지만 조금 다른 YOLO에 대해 알아보도록 하겠습니다.

 

 

객체 검출(Object Detection)

정지영상 또는 동영상에서의 객체 검출(Object Detection)은 영상처리와 컴퓨터 비전 분야에서 기본적이면서 많이 활용되는 기술 중에 하나이다.

객체 검출 알고리즘에서는 주요 객체를 탐지하고 해당 객체를 중심으로 경계 박스(Bounding Box)를 표시하여 구분하며, 활용분야로는 차 량 감지/추적(Vehicle Detection), 감시 시스템(Surveillance)등이 있다. 최근에는 얼굴 인식(Face Detection), 이미지 분류(Image Classification), 비디오 인식(Video Recognition), 음성 인식(Voice Recognition) 등과 같은 다양한 응용 분야 에서 활용되는 주요 머신 러닝(Machine Learning) 도구로 CNN 알고리즘이 활용되고 있다.

 

아래 그림과 같은 파란 박스는 차로, 노란 박스는 사람으로 구분지어 감지를 하고 있다.

객체 검출(Object Detection) 예시

 

CNN의 한계

객체 탐지에서 가장 빈번하게 직면하는 문제 중 하나는 바로 이미지에 따라 달라지는 전면 객체 수 일 것이다. 객체 탐지의 작동 원리를 이해하기 쉽게 설명할 수 있도록 이미지 당 하나의 객체만 있다고 가정해보겠다.

우선 한 이미지당 오직 한 개의 객체가 있는 경우에는 경계박스를 설정해 객체의 카테고리를 분류하는 일은 매우 쉽게 해결될 수 있을 것이다. 경계박스는 4개의 숫자로 구성되어 있어 이를 통한 위치 학습은 자연스럽게 회귀(Regression) 문제로 모델링 될 것이다.

 

이미지 내 한 개의 객체를 탐지하는 네트워크 아키텍처

위 그림에서 설명해주는 CNN은 컴퓨터 비전의 핵심 기술이기도 하다. CNN 기술을 활용하면 제한된 객체 탐지에 대한 회귀와 분류가 가능하다. 제한된 객체 탐지는 이미지 인식(Image Recognition), 핵심 포인트 탐지(Key Points Detection), 시맨틱 분할(Semantic Segmentation) 등 기존 컴퓨터 비전 업무와 마찬가지로 정해진 수의 대상을 처리한다. 대상의 수가 정해져 있을 경우 분류 또는 회귀 문제로 모델링하면 된다.

하지만 진정한 객체 탐지 기술은 2개 이상, 즉 N개의 객체를 탐지해 분류할 수 있어야 한다. 위에서 설명한 CNN은 더욱 많은 객체를 탐지하는 데 한계가 있다. 다수의 사각형 상자 위치와 크기를 가정해 CNN을 변형한 후 이를 객체 분류(Object Classification)에 활용할 수는 있다. 이러한 사각형 상자들을 ‘윈도우(Window)’라고 부르는데 윈도우 가설은 이미지 상의 가능한 모든 위치와 크기를 포함해야 한다. 각 창의 크기와 위치는 객체의 존재 여부에 따라 결정될 수 있고 객체가 있는 경우에는 그 범주도 결정할 수 있다.

 

Sliding window 예시

 위 그림은 이와 같은 접근법으로 객체 탐지를 할 때 나타나는 윈도우의 일부를 보여준다. 각 이미지에는 서로 다른 개수의 픽셀이 있어 총 윈도우의 수도 커지는데 물론 셀 수 있는 정도의 수이기는 하지만 계산 상 비효율적이다.

 

 

윈도우를 활용해 객체를 찾는 효율적인 방법

그렇다면 윈도우의 일부만을 활용해 객체 탐지를 효율적으로 할 수 있는 방법은 무엇일까?

윈도우의 하위집합을 찾는 두 가지 있다. 이 방법들은 각기 다른 두 개의 객체 탐지 알고리즘 카테고리로 이어진다.

 

첫 번째 알고리즘 카테고리는 먼저 영역 제안(Region Proposal)을 하는 것이다. 객체를 포함할 가능성이 높은 영역을 선택적 탐색(Selective Search)같은 컴퓨터 비전 기술을 활용하거나 딥러닝 기반의 영역 제안 네트워크(RPN; Region Proposal Network)를 통해 선택하는 것이다. 후보군의 윈도우 세트를 취합하면 회귀 모델과 분류 모델의 수를 공식화해 객체 탐지를 할 수 있다. 이 카테고리에는 Faster R-CNN, R_FCN 그리고 FPN-FRCN 같은 알고리즘이 포함된다. 이단계 방식(Two-Stage Methods)이라고 불리는 이 알고리즘들은 높은 정확도를 제공하지만 단일 단계 방식(Single-Stage Methods)보다는 처리 속도가 느리다.

 

두 번째 알고리즘 카테고리는 정해진 위치와 정해진 크기의 객체만 찾다. 이 위치와 크기들은 대부분의 시나리오에 적용할 수 있도록 전략적으로 선택된다. 이 카테고리의 알고리즘은 보통 원본 이미지를 고정된 사이즈 그리드 영역으로 나누는데 알고리즘은 각 영역에 대해 형태와 크기가 미리 결정된 객체의 고정 개수를 예측한다. 이 카테고리에 속하는 알고리즘은 단일 단계 방식(Single-Stage Methods)이라고 불리며 YOLO, SSD, RetinaNet 과 같은 알고리즘이 포함된다. 앞서 설명한 이단계 방식 보다는 정확도가 떨어지지만 빠른 처리가 가능하다. 이 알고리즘 유형은 보통 실시간 탐지를 요구하는 애플리케이션에 활용된다.

 

이제 두 카테고리의 대표적인 객체 탐지 알고리즘에 대해 살펴보자.

 

 

단일 단계 방식의 객체 탐지 알고리즘, YOLO

YOLO(You Only Look Once)는 대표적인 단일 단계 방식의 객체 탐지 알고리즘이다. 이미지 내에 존재하는 객체와 해당 객체의 위치는 이미지를 한 번만 보고 예측할 수 있다는 의미를 지닌다.

 

YOLO 객체 탐지 알고리즘

YOLO 알고리즘은 원본 이미지를 동일한 크기의 그리드(grid)로 나눈다. 각 그리드에 대해 그리드 중앙을 중심으로 미리 정의된 형태(predefined shape)으로 지정된 경계박스의 개수를 예측하고 이를 기반으로 신뢰도를 계산한다. 이미지에 객체가 포함되어 있는지, 또는 배경만 단독으로 있는지에 대한 여부가 포함되며 높은 객체 신뢰도를 가진 위치를 선택해 객체 카테고리를 파악한다.

 

앵커 박스

미리 정의된 형태를 가진 경계박스 수를 ‘앵커 박스(Anchor Boxes)’라고 한다. 앵커 박스는 K-평균 알고리즘에 의한 데이터로부터 생성되며, 데이터 세트의 객체 크기와 형태에 대한 사전 정보를 확보한다. 각각의 앵커는 각기 다른 크기와 형태의 객체를 탐지하도록 설계되어 있다. 위 그림을 보면 한 장소에 3개의 앵커가 있는데 이 중 붉은색 앵커 박스는 가운데에 있는 사람을 탐지한 것이다. 이 알고리즘은 앵커 박스와 유사한 크기의 개체를 탐지한다는 뜻이며 최종 예측은 앵커의 위치나 크기와는 차이가 있다. 이미지의 피쳐(Feature) 맵에서 확보한 최적화된 오프셋이 앵커 위치나 크기에 추가된다.

 

YOLO 네트워크 아키텍처

위 그림을 통해 YOLO 알고리즘의 아키텍처를 설명할 수 있는데 탐지 레이어는 많은 회귀 및 분류 최적화 도구를 포함하고 있으며 레이어의 개수는 앵커의 개수에 따라 결정된다.

 

 

 

이단계 방식의 객체 탐지 알고리즘, Faster RCNN

Faster RCNN은 이단계 방식의 객체 탐지 알고리즘이다. 아래 그림에서 Faster RCNN의 단계를 살펴보겠다. 이 알고리즘 이름에 ‘빠른(Faster)’이라는 단어가 포함되어 있지만 단일 단계 방식보다 빠른 처리가 된다는 뜻이 아니고 이전 버전이라 할 수 있는 RCNN 알고리즘과 Fast RCNN 알고리즘 보다 빠르다는 것을 뜻하는데 각 관심 영역(RoI; Region of Interest)에 대한 피쳐 추출의 계산을 공유하고 딥러닝 기반의 RPN을 도입해 구현할 수 있다.

Faster RCNN 단계

많은 CNN 레이어를 사용해 피쳐 맵을 추출하고 나면 RPN을 통해 개체를 포함하고 있을 가능성이 높은 윈도우가 다량으로 생성된다. 그런 다음 알고리즘은 각 윈도우에 있는 피쳐 맵을 검색하고, 고정 크기로 조정한 뒤(RoI 풀링) 클래스 확률과 해당 객체에 대한 더욱 정확한 경계박스를 예측한다.

여기서 고려해야 할 점은 RPN이 윈도우를 생성하는 방법인데 RPN은 YOLO와 마찬가지로 앵커 박스를 사용한다. 하지만 YOLO 알고리즘과 다른 점은 앵커 박스가 데이터로부터 생성되는 것이 아니라 고정된 크기와 형태로 생성된다는 것이다. 이 앵커 박스는 이미지를 보다 조밀하게 커버할 수 있다. RPN은 여러 객체 카테고리에 대한 분류 대신 윈도우의 객체 포함 유무에 대한 이진 분류(Binary Classification)만 수행한다.

 

 

객체 검출 모델들이 우선적으로 당면한 문제는 실제 서비스를 할 수 있을 만큼 탐지 속도와 정확도를 올려야 한다.

하지만 이건 Trade-off 관계에 놓여있기에 이를 극복할 새로운 기법을 계속 해서 연구해나가고 있다.

 

 


아래는 참고 사이트

https://www.koreascience.or.kr/article/JAKO202011161035249.pdf

https://arxiv.org/pdf/1506.02640.pdf

https://blogs.sas.com/content/saskorea/2018/12/21/%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EA%B0%9D%EC%B2%B4-%ED%83%90%EC%A7%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

 

딥러닝을 활용한 객체 탐지 알고리즘 이해하기 - SAS Korea Blog

인공지능의 기반 기술 중 하나인 딥러닝은 눈부신 혁신을 거듭하고 있습니다.

blogs.sas.com

https://curt-park.github.io/2017-03-26/yolo/

 

동영상 설명

https://www.youtube.com/watch?v=EJy0EI3hfSg&t=73s 

https://www.youtube.com/watch?v=L0tzmv--CGY 


위 글이 도움 되셨다면, 광고 한 번만 눌러주세요.

블로그 관리에 큰 힘이 됩니다:)

감사합니다 \( ˆoˆ )/​

반응형

댓글