머신러닝 & 딥러닝

Object detection 개요 및 모델 설명

에멜라 2023. 9. 5. 17:35

 

 

흔히들 AI 기술을 떠올리면, 이처럼 실시간으로 사람이나 물체를 인식해주는 이런 이미지를 떠올리기 쉽습니다. 즉 Object detection 분야는 굉장히 대중적으로 수요가 많고, 그만큼 역사도 오래된 기술인 셈입니다. 오늘은 object detection 컴페티션을 수행하기 위해 조사했던 내용들을 각색하여 object detection에 대해 전반적으로 설명해보고자 합니다.

 

 

1. Object detection task 의 이해

객체 탐지(Object Detection)는 컴퓨터 비전 기술의 세부 분야중 하나로써 주어진 이미지내 사용자가 관심 있는 객체를 탐지하는 기술입니다. 이 테스크에 대한 이해를 조금 더 해봅시다.

 

우리가 기존의 classification의 문제를 풀 때에는 기본적으로 한 이미지 내의 하나의 object 만을 가졌습니다. (ex Cat vs Dog) 그러나, object detection에서는 기본적으로 하나의 이미지 내에 여러 관심 object가 동시에 등장할 수 있습니다. 이를 multi object problem이라고 합니다.

 

 

그러면 위와같이 multi object 이미지에서 object detection을 어떻게 수행할 수 있을까요?

 

이는 localization과 classification으로 구분할 수 있습니다. 즉, object가 이미지 내에 어디에 존재하는지, 이미지의 어느 범위까지가 object인지를 탐지하는 것이 localization이며, 이 탐지된 박스 또는 object 픽셀들이 정확히 어떤 class를 갖는지 추측하는것이 classification입니다.

 

 

 

여기서 localization의 방법론에 따라 object detection은 크게 두가지, object detection, image segmentation으로 구분됩니다. object detection은 위와같이, object가 존재하는 범위를 box형태의 좌표값으로 나타내는 형태입니다. 이때의 box값은 왼쪽위의 (x1,y1) 좌표와, 오른쪽 아래의 (x2,y2) 좌표로 표기하기도 하고, 중앙 좌표와 높이 너비 (x_c,y_c, height, width) 로 표기하기도 합니다.

 

 

 

이와 반대로, image segmentation은 구분되는 object를 픽셀단위로 구분해냅니다.

 

보기에 segmentation이 detection보다 더 예쁘고 좋아 보이지만, segmentation같은 경우, 서로 다른 class에 대한 픽셀은 잘 구분하지만, 같은 class object 끼리는 독립된 object로의 구분이 힘든 문제가 존재합니다. segmentation을 목적으로하는 모델로 대표적으로 U-net 이 있습니다.

(ex 사람 세명이 뭉쳐서 가고 있을 때 사람 세명의 덩어리 윤곽선은 잘 따지만, 그 덩어리가 서로 다른 3명으로 구성된 사람임을 인식하지 못함.) 

 

 

 

2. 평가지표의 이해

그러면 Object detection이 얼마나 잘 이루어졌는지를 어떻게 알 수 있을까요?

 

아직 우리가 object detection 모델을 돌려보지 않았으므로 간단하게 설명드리면, 각 테스크마다 탐지하고자 하는 class 라벨과 함께, 모든 train test dataset에 존재하는 object에 대해 object의 box좌표와 class 정보를 제공하고 있습니다. 즉, 우리는 이 데이터셋을 잘 학습하여, 이미지가 주어졌을 때 모델이 object의 box좌표를 정답레이블과 최대한 유사하게 찾고, class까지 맞춘다면 제일 좋은 상황이겠죠.

 

즉 좀더 명확하게 보면 아래의 세가지를 충족시켜야 합니다.

  1. 개별 object를 모델이 얼마나 잘 감지하는가? 
  2.  object를 찾았다면, 실제 bounding box에 대해 모델이 얼마나 졍확하게 탐색했는가?
  3. bounding box 까지 잘 찾았다면, 개별 object를 얼마나 잘 classification 하는가?

 

이를 모두 평가하는 지표가 mAP score이고 보통 mAP@0.75 와 같이 논문에서 등장하고는 합니다. 여기서 mAP는 mean average precision, 즉 모델이 탐지한 box에 대한 precision이 높아야 한다는 의미이고, 0.75는 IoU의 threshold로, 정답 레이블로 제공된 box와 예측된 box 가 75% 이상 곂지지 않으면 예측한 박스를 정답으로 인정해주지 않겠다는 의미입니다.

 

 

IoU

IoU는 상대적으로 간단한 개념입니다. 정답 object 근처에 예측박스가 존재할때, 얼마나 근처에 있어야 정답으로 인정해줄 것이냐의 기준입니다. 간단하게 박스값의 좌표가 모두 주어져 있으므로 각 꼭짓점의 L2 distance를 사용하면 되지 않느냐고 반문하실 수 있지만, 이는 물체의 크기가 클수록 불리해지는 지표가 될 수 있습니다. 따라서, object의 표면젹에 영향을 받지 않는, 박스의 일치율을 평가할 수 있는 상대적 지표로서 IoU 가 제창되었습니다.

 

IoU는 아래와 같이, 정답박스인 빨간 박스와, 예측박스인 파란박스의 합집합 분의 교집합으로 표현합니다. 그러므로 이 값은 0 (두 박스가 전혀 곂치지 않음) 과 1 (두 박스가 완전히 동일) 사이의 값을 가지며, 보통 0.25, 0.50, 0.75를 threshold로 두어 이 일치기준을 넘어서는 경우에만 정답으로 인졍됩니다.

 

 

 

 

mAP

mAP에 대한 개념은, confuse matrix와 recall-precision curve 에 대한 어느정도의 이해를 요구하며, 설명이 굉장히 복잡하기에, 아래의 링크를 참조하시길 바랍니다.

 

github (영문설명) : github.com/rafaelpadilla/Object-Detection-Metrics

티스토리 (한글설명) : https://eehoeskrap.tistory.com/546

 

모델이 object bounding box를 잘 탐지했다고 하더라도, 이 모델이 class 분류를 제대로 하지 못한다면 이 모델의 성능은 당연히 낮아야 정상입니다. 그러나 실제 우리 모델의 결과물은 아시다시피 정확하게 어떤 class label을 뱉어주는 게 아닌, 모든 클래스에 대한 softmax값 즉 class confidence(특정 클래스일 확률)을 제공합니다. 예를들어, 강아지 이미지와 고양이 객체를 탐지하는 모델이 있을 때 이 box를 갖는 object는 확실하게 개 입니다 (prob : [1,0]) 와 같이 나오는 게 아닌, 이 box의 confidence score는 개일 확률이 높습니다 (prob : [0.75,0.25]) 이런 식으로 나온다는 의미입니다.

 

단순 생각헤 봤을 때, 정답 class에 대한 confidence score가 높은 모델이 훨씬 좋은 모델입니다. 이는 정답을 맞출 확률이 매우 높다는 의미이고, 또 이만큼 잘 푼다면 새로운 사진을 주더라도 정답을 잘 맞출 확률이 훨씬 높을테니 말이죠. 이를 개별 class에 대해 평균적으로 얼마나 높은 예측정확도를 갖는지를 평가하는 지표가 AP(Average Precision) 지표이고, 이를 모든 class에 대해 계산하여 평균낸 값이 mAP(mean Average Precision) 지표입니다.

 

아래의 그림에서 파란색 선이 Precision 지표이고 이를 Average, 즉 적분한 값이 AP값입니다. 다만 계산의 편의성을 위해 위의 빨간색 선과 같이 정사각형 형태로 보간하여 알고리즘을 간단하게 구성하기도 합니다.

 

 

 

3. 모델의 발전과정

모든 모델을 세세하게 다루면 너무 오래걸릴듯 하므로, 간단한 설명 이후 공부할 당시 적어둔 설명들을 끝에 적어둘까 합니다. 개별적인 모델의 디테일한 점들은 나중에 다뤄보도록 하겠습니다. 

 

최초의 object detection 모델은 sliding window 방식을 활용합니다. 쉽게 말해, 사진 위에 네모 틀을 두고, 격자(픽셀) 한칸씩 이동시키면서 이 네모 틀 안에 object가 포함되었는지 체크하는 방식입니다. 포함여부는 우리가 일반적으로 사용하는 image classification model인 resnet등을 사용합니다. 그리고 모든 그리드애 대한 탐지를 마쳤다면, CNN을 통해 featuremap을 줄인 상태에서 다시 동일한 네모틀을 슬라이딩해 가며 object를 탐지합니다. 이러면 격자틀이 최초이미지의 object에 비해 너무 작더라도, 어차피 feature map 자체가 계속 작아지기에 큰 상관 없습니다.

 

이러한 방식은 정확도는 높지만 매 feature map마다 모든 그리드(픽셀 단위)에 대해 sliding을 시키는 점, 모든 step에서 별도로 resnet과 같은 classification 모델이 작동해야 한다는 점 때문에 굉장히 오랜 시간이 걸리게 됩니다.

 

그렇기 때문에, 그리드를 옭기는 방식 대신에, object가 있을만한 곳을 간략하게 탐지하는 알고리즘인 regional proposal algorithm을 적용하고, 이를 이용해 탐지한 object box들을 동일한 크기로 변경 (RoI pooling) 하여 최종적으로 물체 영역 탐색과 분류에측이 순차적으로 이루어지는 방식을 채택한 RCNN이 최초로 등장하게 됩니다. 이때, 물체 영역 탐지 모델과 분류예측 모델이 각각 분리되어 구성되어있었기 때문에, Two-Stage-Detection 방식이라고 불립니다. 

 

 

한편 RCNN이 높은 정확도를 가진 것에 반해, 속도가 느린 점 때문에 실시간 작동이 가능한 더 빠른 방식의 모델이 필요했습니다. 이를 개선하여 가장 먼저 등장한 모델이 You Only Look Once 즉 YOLO 입니다. yolo는 이미지를 특정 갯수의 그리드까지 CNN을 통해 feature map을 줄이고, 각 그리드에서 물체영역탐지와 모델 분류예측을 동시에 진행합니다. 두 예측값을 계산하기 때문에 One-Stage Detector 방식이라고 불립니다. 정확도는 RCNN 기반의 모델보다는 낮은 편이나, 사용하기 편리하며 실시간 처리가 가능하기 때문에 굉장히 다양한 분야에서 활용되고 있습니다.

 

 

한편 Two-Stage, One-Stage detection은 여전히 object detection 과정에서 많은 가정을 포함하고 있습니다. 가장 대표적으로 Anchor Box와 NMS가 있습니다. 기존에 네모 틀을 기준으로 슬라이딩 하며 object를 탐지한다고 표현했지만, 사실은 object가 어떤 형태를 가질 지 모르기 때문에, 여러 다양한 크기를 곂쳐놓은  Anchor Box를 슬라이딩하는 방식을 취했으며, 사실 이는 SSD나 Retina net에서도 사용되는 방식입니다. 또한 이렇게 탐지한 매우 많은 예측박스들 중 유의미한 박스를 후차적으로 선별해주는 알고리즘이 NMS입니다.

 

 

이처럼 기존 방식들은 사람의 가정에 의해 처리되는 알고리즘이 존재하는것에 반해, 하나의 모델로 end-to-end 방식으로 object detection을 수행한 모델이 있었으니 그것이 바로 DeTR, 즉 transformer 기반 OD 모델입니다. DeTR은 ViT와 유사한 방식으로 모든 픽셀정보에 대한 global attention 을 취해 object를 탐지하며, decoder에서 각 object의 외곽선정보에 집중하여 최종적으로 boundingbox와 confidence score를 계산합니다. 즉 사전 가정 없이 모델이 자체적으로 object 를 이해하고 bounding box를 추측하는 것입니다. DeTR은 자체적인 매칭 알고리즘과 아키텍쳐를 수정한 것을 제외하면 original Transformer를 그대로 활용하여 높은 성능을 냈고, 아직까지 sota급 성능을 보여주고 있습니다.

 

 

 

 

간단한 소개는 위와 같고, 아래는 쪼금 더 자세한 내용들이 담겨 있으니 조금이지만 더 깊게 알고 모델을 선택하고 싶으신 분들을 아래의 docs를 참고하시기 바랍니다.

 

https://docs.google.com/document/d/1vvPcyv-bErjQSvarrEktN7lBQ43wdJT_67SriKrzIGk/edit?usp=sharing 

 

Object detection 정리

Object detection 정리 1.각자 조사한 Object Detection 기술 정리 컴페티션 목표 object detection, mAP@0.75 score + 발표 (최종적으로 어떤 모형을 사용하던지, 어떤 사전학습된 가중치를 사용하던지 상관 X) 이미

docs.google.com

 

DETR 소개 및 발표 ppt

https://docs.google.com/presentation/d/1VK7ZYkdboE5HFV2___ehRTsDW4XrE7UbgJs9NlXTH6s/edit?usp=sharing 

 

Yuja_comp3의 사본

Object Detection with DETR : Detection with Transformer 유자차 김승호, 김재형, 박원영 백승림, 전상민, 한상희

docs.google.com