Object Detection Systems: YOLO (욜로)
포스트 난이도: HOO_Senior
# Introduction
이번 포스트는 YOLO(욜로)에 대한 전반적인 내용을 담고 있다. 특히 욜로의 첫 번째 버전이 나오던 시점의 2015년을 기준으로 욜로가 왜 나오게 되었는지, 욜로와 다른 Object detection systems들의 차이가 무엇인지에 대해서 살펴보았다. YOLO와 Object detection systmes에 대한 배경 지식이 있으면서 구체적으로 어떤 차이와 욜로만이 가진 특징이 무엇이었는지를 살펴보고 싶다면 해당 포스트를 참고하는 게 도움이 되는 부분들이 있을 수도 있으니, 가볍게 읽어보기에 좋다고 본다. (여담으로 포스트 작성과 더불어 연구 발표를 하면서 글쓴이의 성과와 사용했던 모델들을 살펴보는데 불과 몇 년 사이에 글쓴이는 Object detection에 있어서 화석이 되었다는 것에 다소 충격적이었다.)
# Object detection, 2015
Object detection은 YOLO가 나오기 다양한 시스템들 (e.g, R-CNN, Fast or Faster R-CNN, Multigrasp, Deep Multibox, Overfeat or etc.)이 있었고 대표적으로 많이 알려진 R-CNN 시스템 방식을 사용해 왔다. 다만 2015년 첫 번째 버전 욜로가 출시되었고 이후에 2023년 현재 우리는 YOLOv8을 다양한 산업 분야에서 사용하고 있다. 사실 2015년, 2016년만 하더라도 YOLO는 새롭게 나온 루키 같은 녀석이었기 때문에 CNN을 사용하고 있음에도 R-CNN과 다른 Grid cells 방식을 사용하면서 Single model을 통해 Region of Proposals (RoP) 문제의 소지를 없앴다. 이러한 부분을 흥미롭게 생각할 뿐이었지 사실상 실무에서는 다른 주요 Object detetion을 사용해었고 글쓴이 또한 YOLOv3 때부터 욜로를 활용하기 시작했지 그전까지는 다른 방식의 Object detection을 사용해 왔었다.
이러한 이유로는 YOLO 사용에 익숙해지기 위해서는 시간이 걸린 점도 있었겠지만 기술적인 부분에서는 YOLO가 가진 정확도와 작은 사물에 대한 인식 오류 문제가 남아 있었기도 했다. 그럼에도 Joseph Redmon, 2016이 작성한 페이퍼를 살펴보면 첫 번째 버전의 욜로가 가진 장점들과 욜로만이 가진 특징적인 구조가 충분히 다른 Object detection systems들의 문제점을 보완하고 있었다. 물론 해당 페이퍼에서 작성된 내용은 2015년 기준의 YOLOv1이기 때문에 이 점에 대해서 이해해야 하지만 페이퍼 안에 있는 YOLO의 기본적인 구조는 현재까지도 가지고 있기 때문에 특징과 구조적인 부분에 대해서 살펴보기에 아주 간단하고 좋은 페이퍼이다. 그림들을 첨부하고 싶지만 저작권 문제로 욜로 구조와 특징에 대해서는 아래의 페이퍼를 참고하면 확인할 수 있다.
Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
# YOLOv1: Speed and Simplicity
글쓴이가 욜로에 대해서 크게 두가지 특징을 뽑으라고 한다면 YOLOv1의 경우 가장 큰 특징이 바로 속도와 단순화이다. 이전의 다른 Object detection의 경우 Multiple model을 사용하고 있었기에 RoP에 대한 문제가 발생하고 이로 인해 사물 인식에 대한 왜곡이 발생할 수 있었다. 왜냐하면 단계가 나뉘다 보니 처음 Input image에서 추출한 사물과 다음 단계의 사물 간의 distraction이 발생하기 때문이다. 이러한 이유로 사실상 이전 object detection systems에서는 사물을 실시간으로 인식한다는 것 자체에 어려움을 가지고 있었다.
반면에 욜로는 single model을 사용하고 수많은 grid cells을 통해서 여러 사물들을 인식해 냈고 이 과정에서 confidence score를 통해서 필터링 과정을 거쳐 최고의 점수를 가진 bounding box의 결과를 산출해 냈다. 그렇다 보니 프레임 속도만 비교해 보더라도 Object detection systems에서 빠른 속도의 결괏값을 산출해내고 있었다.
또한 detecting progresses을 단순화하였는데, 주요하게 세가지세 가지 network 방식을 살펴볼 수 있다. backbone과 neck networks들의 경우 이미지를 단순화하여 head network가 사물을 인식하는 과정을 최대한 간단하게 만들어주었다. 물론 이 과정에서 loss 되는 값들이 많아지게 되고 그러면 RoP 문제가 아니더라도 distraction, 즉 왜곡되는 결과가 산출될 수 있었다. 하지만 이 부분을 고려해서 YOLO는 다양한 Loss functions들을 통해서 정확도, 속도, 심플함 세 가지를 확보했다. YOLO가 가지고 있는 특징적인 loss fuctions에는 크게 세 가지가 있는데 Regression loss funciton, confidence loss function 그리고 classification loss function 등이 있다. 아래 Figure 1을 살펴보면 Regression loss function에 대한 식을 볼 수 있는데, predicts the coordinates를 하고 있는 걸 확인할 수 있다. x, y는 위치를 의미하며 width와 height까지도 예측하고 있는 걸 확인할 수 있다. Regression loss function은 localization loss, bounding box loss라고도 불리는데 결과적으로 예측된 bounding boxes들의 정확도를 측정하기 위해서 사용하는 function이다. 이때 확인하는 과정 자체가 regression, 회귀가 이루어지기 때문에 우리는 regression fuction이라고도 부른다.
두 번째로 Confidence loss function은 모델의 confindence를 평가하는 loss function으로써 object detection의 예측된 결과를 비교하고 검증하는 역할을 담당한다. Cross-entropy나 sigmoid cross-entropy loss를 사용하고 있기에 Detected 된 사물을 1과 0을 통해서 확인한다. 한마디로 target value 1이면 true이고 target value가 0이면 false 되어 인식이 되지 않는다. 아래의 Figure 2를 살펴보면 Confindence loss function의 fomula를 볼 수 있고 C는 confindence를 의미하며 앞에 +가 있는 이유는 사실상 loss function들은 하나로 연결되어 있기 때문이다. 왜냐하면 사실상 시스템에서 function이 독립적으로 따로 작동하는 게 아니라 연결되어 작동하기 때문에 function들을 이해하기 쉽게 나눠서 볼 뿐이지 한 번에 프로세싱이 된다.
마지막으로 이왕 본 김에 Classification loss 또는 Cross-entropy loss라고 불리는 loss function은 Object class predictions들을 검증하는 역할을 담당한다. 따라서 실제 사물과 예측된 사물 간에 유사성이 얼마나 있는지를 확인하는 역할을 담당한다.
Loss functions들과 더불어 앞서 언급한 세 가지 특징들을 모두 확보했다는 말은 결과적으로 기존의 그저 사물 인식을 넘어서 실시간 사물 인식이 가능한 시대로 도래했다고 볼 수 있다. 이 점에 있어서 글쓴이는 그 당시에 감동했고 주변에 이야기해 봤자 그냥 너드남 그 잡채였다. YOLOv1의 Architecture의 경우 (Redmon, 2016)의 페이퍼에서 Figure3을 살펴보면 이해하는데 도움이 되며 모델에 대한 프로세스를 그림으로 확인하고 싶다면 (Redmon, 2016)의 Figure 2를 살펴보는 것을 추천한다.
# Combine YOLO with R-CNN
YOLO가 가진 AP 또는 mAP와 FPS 등에 대한 문제와 R-CNN이 가진 Speed와 Simplicity에 대한 문제를 해결하는 데 있어 어려움이 있었다. 지금이야 서로가 다른 방향성과 특징을 가지고 개선해 나가면서 많이 좋아졌지만 불과 5년 전까지만 해도 YOLO는 grid cells을 사용함으로써 발생하는 문제점들을 완벽히 해결할 수 없었다. 그렇기에 (Redmon, 2016)에서 보듯이 combine이라는 관점을 토대로 YOLO와 Fast R-CNN을 합친 방법을 제안하기도 했었다. R-CNN에 대한 기본적인 내용은 (Grishick, Ross, et al, 2014)를 참고하면 매우 좋다. 아마 페이퍼를 읽다 보면 너무나도 친숙하게 느껴지는 Figures들이 많을 텐데 왜냐하면 R-CNN을 대표하는 페이퍼 중 하나이기 때문이다.
Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.
# Current Version of YOLO
YOLO에 대한 문제점을 해결하지 못한채 끝이 났던 2015, 2016년도와 달리 현재는 많이 달라진 YOLOv8을 경험할 수 있다. 욜로는 버전을 거듭해 나가면서 구조적 네트워크의 변화와 grid cells size를 수정하거나 바꾸기도 하고 아예 Anchor를 없애기까지도 하면서 기존의 정확도를 유지한 채 속도와 심플함을 지속적으로 가져가려고 노력해 왔다. 그 결과 YOLOv8의 AP가 첫 번째 버전보다 많이 높아지지도 안 하고 반대로 낮아진 것으로 나오지만 실질적으로 작은 물체들의 인식 어려움이 있거나 특정화된 사이즈의 물체만 인식해 오던 욜로가 더 이상 아니게 되었다. 한마디로 실질적으로 욜로의 정확도가 많이 높아졌으며, 이전 연구 페이퍼에서 다루고 있던 문제점들을 많이 개선해 온 걸 확인할 수 있다.
이해를 돕기 위해서 아래의 Figure 1 이미지를 간단하게 준비해 보았다. 글쓴이의 오래된 포스트를 읽어봤다면 봤을법한 이미지들인데 rough 하게 욜로 버전들을 비교해 보더라도 차이가 눈에 보이는 걸 확인할 수 있다. 우선 글쓴이 모습의 정확도가 높아진 걸 확인할 수도 있지만 가장 크게 중점적으로 봐야 할 부분은 멀리 떨어진 작은 물체에 대한 인식이 많이 좋아진 걸 확인할 수 있다. 이전 버전에서는 물체 인식이 되지 않았지만 최근 버전에서는 이러한 부분이 개선되어 가능해졌다는 게 가장 큰 특징이라고 본다.
'Computer Science > AI & Data' 카테고리의 다른 글
[Computer Vision Examples] Convert PyTorch: pt to onnx (0) | 2023.11.15 |
---|---|
[Computer Vision] YOLO랑 Fast R-CNN을 합쳐보았습니다. (2) | 2023.11.15 |
[Computer Vision] R-CNN vs Fast R-CNN vs YOLO (2) | 2023.10.31 |
[Computer Vision] Data Augmentation (데이터 증강) (2) | 2023.10.28 |
[Data Science] 엑셀에서 데이터 분석하기 (Data Analysis on Excel) (0) | 2023.10.26 |
댓글