글을 작성하는 시기는 연구실에 조인하여 공부한 지 약 한 달이 되는 시점입니다! 머신러닝에 대한 기본적인 공부와 함께 여러 딥러닝 모델에 대하여 학습을 하며 Computer Vision의 분야인 Object Detection에 많은 관심이 생겼습니다. 이번 글을 시작으로 Object Detection에 대한 개요부터 주요 논문에 대한 리뷰까지 시리즈로 작성해보도록 할 계획입니다!
Object Detection?
Object Detection이란 컴퓨터가 물체를 인식하는 것을 의미합니다. 위 사진은 Object Detection의 예시입니다. 컴퓨터가 기존에 학습되어있는 모델을 바탕으로 사람과 행글라이더를 타는 사람들을 Detection 한 모습을 볼 수 있습니다.
Computer Vision의 Object Detection은 물체의 위치를 찾는 단계와 그 물체가 어떤 물체인지 분류하는 두 단계를 거치게 됩니다. 사람의 눈으로 물체를 인식하고 그 물체가 어느것인지를 판단하는 것은 그렇게 어려운 일이 아닙니다. 하지만 0과 1만을 인식하는 컴퓨터에게 물체의 위치와 그 물체가 무엇인지 분류하도록 하는 일은 상당히 어려운 일에 속합니다. 이번 글에서는 Object Detection의 기본적인 개요들을 살펴보는 시간을 가지도록 하겠습니다.
용어 정리 : Classification/Localization/Detection/Segmentation
- Classification : 객체가 무엇인지 분류하는 것
- Localization : 객체의 위치를 예측하는 것
- Object Detection : 객체의 위치와 무엇인지를 모두 확인하는 것(Classification + Localization)
- Segmentation : 객체의 경계를 찾는 것
매우 간단한 용어들을 살펴보았습니다. 그렇다면 Classification과 Localization은 어떤 과정을 거쳐서 진행될까요? Classification과 Localization을 하는 방법에 대하여 간단하게 알아보도록 하겠습니다.
Object Detection의 진행 개요
위 동작과정을 간단하게 살펴보겠습니다.(사실 물체를 인식하는 일은 이보다 훨씬 복잡합니다.)
이미지를 학습할 때는 CNN(Convolution Nueral Network)이라는 머신러닝 알고리즘을 활용합니다. CNN의 구조가 사진과 데이터를 학습하기에 적합하기 때문입니다. CNN을 통과하여 image에 대한 feature map을 만들어줍니다.(만약 CNN을 자세히 알고싶으시면 여기를 한번 읽고 오시는 것을 추천드립니다.)
그 다음에는 feature map을 1차원의 벡터로 펴주는 과정을 거칩니다. 이 과정은 Fully-connected Layer에서 수행합니다. 만들어진 image에 대한 feature map을 활용하기 적합한 형태로 만들어주는 과정입니다.
만들어진 1차원 벡터로 Classification, Regression을 수행합니다. 이 때 Classification은 물체가 어떤 것인지를 판단하는 것이며, Regression은 물체의 위치를 box치기 적절한 곳을 찾아주는 과정입니다.
Object Detection의 난제
Object Detecion의 난제를 알아보기 위해 자율주행 상황을 예로들어보겠습니다. 자율주행을 위해서 다양한 센서를 활용하여 물체를 인식하게 됩니다. 이 때 특히 카메라를 활용해 물체를 감지해야되는 상황을 생각해보겠습니다. 가장 중요한 것은 속도입니다. 빠르게 달려가는 차는 실시간으로 주변의 물체들을 인식해야합니다. 하지만 Classification과 Regression을 동시에 수행하는 과정에서 굉장히 빠른 속도를 내는것은 약간의 한계가 있습니다.(이 과정을 한번에 한다면?) 그리고 실 세계에서는 객체가 1개가 아닙니다. 무수히 많은 객체들이 있을 수 있습니다. 그 객체들을 모두 Detect하기 위해서는 어떠한 새로운 복잡한 방법을 제시해야합니다. 그리고 실세계 객체들은 다양한 변화들을 합니다. 사람의 경우에도 옷을 다양하게 입을 수 있습니다. 종교적인 이유로 히잡을 두룬 사람도 있을 것 입니다. 자동차의 경우에도 다양한 경우가 있습니다. 어느 도로의 한줄로 평행주차된 차들을 생각해봅시다. 어떤 차는 모든 모습을 보여주지만 그 뒤에 차량은 뒤 문정도만 보여줄 수 있습니다. 이러한 객체들의 다양한 변신은 Object Detection을 어렵게 합니다. 마지막으로 이렇게 학습하게 되는 데이터를 만드는 과정이 쉽지 않습니다. 그냥 사진 데이터를 수집해서 넣어주면 되는 것 아닌가? 라는 생각을 할 수 있습니다. 하지만, 현실은 그렇지 않습니다. 사진에 있는 객체들을 학습하기 위해서는 그 객체들의 위치정보와 어떤 객체인지에 대한 정보를 제공해주어야 합니다. Annotation 정보를 넣어주어야 한다는 의미입니다. 따라서 학습 데이터가 부족하여 정확한 학습이 어렵게 될 수 있습니다.
Object Detection의 역사
Object Detection의 역사는 위와 같습니다. 2012년 Alex Net의 탄생을 기점으로 딥러닝을 활용하여 Object Detection을 하기 시작하였습니다. 이 때부터 One-stage detector과 Two-stage detector의 모델로 나누어지게 되었습니다.
Two-stage detector은 객체가 있을 것 같은 위치를 찾아 정보를 제공해주는 과정과 데이터를 분류하는 과정을 2단계로 수행하는 것을 의미합니다. 즉 물체가 있을법한 위치를 찾아주는 과정에서 Network를 사용하고 데이터를 분류하는 과정에서도 Network를 사용해 두번의 과정을 거치게 됩니다. 대표적으로는 Faster RCNN과 Pyramid Network가 있습니다.
One-stage detector는 객체가 있을것 같은 위치를 찾는 과정을 생략하고 진행합니다. 즉 Classification을 하기 위해 만들어지는 feature map에서 동시에 영역제안을 진행합니다. 굉장히 유명한 논문인 YOLO와 SSD가 있습니다.
Two-stage detector는 좋은 성능을 보여주지만 속도가 상대적으로 느립니다. One-stage detector는 반대로 좋은 속도를 보여주지만 성능이 안좋습니다. 하지만 최근에는 YOLO가 버전업을 하며 좋은 퍼포먼스를 내기 시작하였습니다.
Object Detection의 성능을 보면 딥러닝을 활용한 기점부터 굉장히 높은 성능을 보여줌을 알 수 있습니다. PASCAL이라는 데이터 세트를 활용하여 학습을 하였을 때 deep learning을 활용하기 시작한 2012년 이후에는 성능이 굉장히 좋아짐을 알 수 있습니다.
Reference
- https://deepbaksuvision.github.io/Modu_ObjectDetection/posts/01_00_What_is_Object_Detection.html
'Artificial intelligence > Etc' 카테고리의 다른 글
Attention - Query, Key, Value의 의미? (1) | 2022.09.24 |
---|---|
Hello RL : Frozen Lake 소개 및 기본 코드 (1) | 2022.09.15 |
모델 평가(Evaluation) (0) | 2022.07.12 |
Sklearn 라이브러리를 활용하여 데이터 전처리하기 (0) | 2022.07.08 |
파이썬으로 머신러닝 시작하기 (0) | 2022.07.03 |