굴러가는 분석가의 일상

[Object Detection] One-stage detector(YOLO,SSD) 본문

Computer Vision

[Object Detection] One-stage detector(YOLO,SSD)

G3LU 2024. 3. 25. 18:32

※ 앞선 게시물에서는 합성곱 신경망(Convolutional Neural Networ)에 대해 알아보았습니다. CNN은 대체적으로 이미지 처리와 관련된 작업에 사용되지만, 이는 크게 3가지의 유형(이미지 분류, 객체 인식, 이미지 분할)으로 나뉘게 됩니다. 본 게시물에서는 객체인식에 사용되는 알고리즘에 대해 알아보도록 하겠습니다. 

 

💡 객체 인식(Object Detection) 

객체 인식(Object Detection)이란, 이미지 내의 객체나 장면 등을 분류하는데 그치지 않고, 해당 객체의 위치까지 표시하는 알고리즘을 말합니다. 객체 인식 알고리즘을 수행하기 위해서는 두 가지의 과정을 거치게 됩니다. 객체의 위치가 어디인지 Bounding Box로 나타내는 지역화(Localization)를 진행하고, 이 객체가 무엇인지 확인하는 과정인 분류(Classification) 과정을 통해 객체 인식(Object Detection)을 수행하게 됩니다. 이는 다양한 분야에서 활용됩니다. 자율주행 자동차에서는 주변 환경의 객체를 탐지하여, 자동차의 주행을 제어합니다. 또한, CCTV와 관련된 보안시스템에서는 감지된 객체를 식별하여, 위험한 상황을 조치할 수 있도록 합니다. 


💡 객체 인식의 구분 

객체인식의 모델은 크게 One-Stage Detector과 Two-Stage Detector으로 구분할 수 있습니다. 각각의 모텔 형태에 대해서 알아보도록 하죠.


📌 One-Stage Detector

 

One-Stage Dectector는 지역화(Localization)과 분류(Classification)를 동시에 수행하는 모델입니다. 위의 사진과 같이 입력 데이터가 Convolutional Layer를 거치게 되면서, 이미지의 객체에 대한 특징(클래스와 위치를) 예측하게 됩니다. 이에 대표적인 예시가 YOLO, SSD(Single Shot Detector), RetinaNet 등 존재합니다. 

✔️ YOLO

 

YOLO(You Only Look Once)는 이미지 내에 존재하는 객체와 위치를 한번 보고 예측할 수 있다는 의미를 가집니다. 위의 사진과 같이 Bounding Box와 Class Probability를 하나의 문제로 간주하기에 Unified Detection를 수행하게 됩니다. 이에 원본 이미지를 동일한 크기의 Grid(그리드)로 나눈 후, 각 그리드의 중심을 기반으로 2개의 Bounding Box가 생성됩니다. 이때 각각의 Bounding Box는 객체를 포함하는지에 대한 확률과 바운딩 박스의 위치의 정확성(IoU)를 기반으로 Confidence를 도출하게 됩니다. 

📚 Confidence란, 각 bounding box가 실제로 객체를 포함하고 있는 정도를 나타내는 값이다. 

 

.또한, Class Probability Map를 계산하게 되는데, 이는 객체가 있다고 가정할 때, 특정 객체(Class)인 확률 (즉, 조건부 확률)을 계산하게 됩니다. 이에 Prediction Tensor (Bounding Boxes + Confidence 및 Class Probability Map)가 생성이 되는데, 이를 기반으로 NMS(Non-Maximum Suppression)가 최종적으로 적용됩니다. 

 

여기에서 주목해야할 점은 이러한 과정이 Classification이 아닌 Regression 문제로 치환된다는 것 입니다. 원본 이미지의 그리드중심을 기반으로  경계박스를 예측하고, 신뢰도를 계산하게 됩니다. 하지만 이러한 과정에서 생성된 경계박스는 일반적인 좌표(x,y)와 크기(width,height)로 정의됩니다. 연속적인 값으로 이루어진 좌표와 크기는 실제 값과 모델 값의 차이를 계산해야하기 때문입니다. 

 

✔️ Single Shot Detector(SSD) 

 

Single Shot Detector(SSD) 또한 One-Stage Detector에 해당되며, 객체의 위치와 분류과정을 하나로 합친 모델입니다. 앞전에 소개되었던 YOLOv1이 선행개발 되었지만, 작은 객체를 잘 잡아내지 못하는 특성으로 인해 탐지 성능(mAP)이 현저하게 낮은 문제점이 있었습니다. 이러한 문제점을 개선하기 위해 SSD 모델이 개발되었습니다.

 

SSD모델 앞부분에서는 VGG16(즉, Base Model)를 사용하여, 입력 이미지로 부터 중요한 특징을 추출하게 됩니다. 이에 추출된 Base Model의 Feature Map은 Extra Feature Layer의 마지막 층까지 통과시켜 최종적으로 Feature Map를 뽑게 됩니다. 그리고 각각의 크기가 다른 Convolutional Layer에서 추출된 Feature Map으로 Detector&Classifier 과정을 수행하고, 마지막으로 NMS을 적용하여 최종적으로 객체인식 결과를 도출하게 됩니다. 

SSD 모델의 아키텍처를 살펴보시면, Convolutional Layer 계층의 크기가 점차적으로 줄어듭니다. 이는 다양한 스케일로 크기가 다른 객체를 탐지하기 위함 입니다. 예를 들어보도록 하겠습니다. 위의 사진을 보면 고양이(파란색 테두리)는 상대적으로 강아지(빨간색 테두리) 보다 더 작습니다. 이에 32 x 32 Feature Map에 해당하는 박스를 사용하여 작은 고양이(파란색 테두리)를 찾고, 16 x 16 Feature Map에서는 강아지(빨간색 테두리)를 탐지하게 됩니다. 정리하자면, 컨볼루션 과정이 깊어지면 깊어질수록 큰 영역의 이미지를 탐지하고, 초반에는 조그만한 영역의 객체를 탐색할 수 있게 됩니다.