안녕하세요.

이번 글에서는 2019년도 이후 부터 현재 글을 쓰고 있는 시점인 2021년 (9월) 까지object detection (based on deep learning) 모델에 대해서 소개하려고 합니다.

 

현재 제 블로그에 작성한 Object detection 모델은 YOLOv3까지입니다. 그 이유는 제가 2018.05월에 석사 졸업논문을 쓸 당시 주로 사용되던 최신모델이 YOLOv3, SSD, RetinaNet이었기 때문이죠. (RetinaNet은 아직 업로드가 안되어 있는데, 추후에 빠르게 업로드 하도록 하겠습니다!)

 

그럼 지금부터 2021년까지의 Object Detection model trend 변화를 설명해보도록 하겠습니다.

 

Note1. 참고로 모델의 trend만 설명드리는거라 디테일한 설명은 하지 않을 예정입니다. 디테일한 기술부분은 차후에 따로 해당 모델에 대한 논문을 리뷰하는 방식으로 업로드 하도록 하겠습니다!

Note2. 이 글에서 trend라고 설명되는 모델들은 저의 주관과 paperwithcode를 기반으로 선택된 모델들임을 미리 말씀드립니다!  

 

 

 

 

1. Object Detection History (From 2013 ~ 2019)

2013년최초의 딥러닝 기반 object detection 모델R-CNN등장했습니다. 이 후, R-CNN 계열의 object detection 모델인 Fast R-CNN, Faster RCNN 모델들이 좋은 성과를 보여주고 있었죠. 그러다, 2016년에는 YOLOSSD등장하면서 새로운 계열의 딥러닝 기반 object detection 모델이 등장하게 됩니다. 2017년에는 RetinaNet이 등장하면서 높은 성능을 보여주기도 했죠. (Mask-RCNN 모델도 등장하긴 했지만, Mask-RCNN 모델은 segmentation 분야에서 더 설명할 수 있는게 많은 모델이라 여기에서는 따로 object detection 모델의 mile stone으로 언급하진 않겠습니다)

<그림1 출처:&nbsp; https://mlai.iptek.web.id/2019/01/20/object-detection-state-of-the-art-progress/>

 

<그림2 출처. YOLOv3 논문>

 

2018.04월 치매환자 행동패턴 분석연구를 하기 위해 이용했던 딥러닝 모델들이 SSD, RetinaNet, YOLOv3 정도가 있었던거 같습니다. (당시에 TF 1.5 버전을 쓰면서 좋아했던 기억이.... )

 

"그럼 언제부터 새로운 object detection 모델들이 등장하기 시작했나요?"

 

앞서 언급했던 모델들이 오랜 시간동안 사용되다가  2019년 후반부터 새로운 object detection model 등장하기 시작했습니다. 2019년부터 CNN 모델에 다양한 변화가 일어나기 시작했는데, 이러한 변화가 object detection 모델에 영향을 주었습니다. (Object detection 모델classification task와 bounding box regression task가 결합된 multi-task loss로 구성되어 있기 때문에 CNN의 변화가 생기면 classification task에 영향을 주게 되겠죠? 만약 좋은 영향을 주면 그만큼 object detection 모델의 성능도 좋아질테니까요!)

 

<그림3 출처. CS231n>

 

그럼 지금부터 해당 모델들을 순차적으로 설명해보도록 하겠습니다.

 

 

 

 

 

 

 

2. EfficientDet (2020 CVPR)

2-1. EfficientNet

2019.03월 arXiv에 EfficientNet이라는 논문이 등장합니다.

  • 2019.03.28 arXiv 등록
  • 2019 ICML accept

https://arxiv.org/abs/1905.11946

 

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

Convolutional Neural Networks (ConvNets) are commonly developed at a fixed resource budget, and then scaled up for better accuracy if more resources are available. In this paper, we systematically study model scaling and identify that carefully balancing n

arxiv.org

 

 

보통 CNN은 224×224 크기로 training&evaluation을 진행했는데, CNN의 입력크기를 키워줄 수록, 성능이 좋아진다는 사실을 알게 됐습니다. 입력 크기를 키워주려면 CNN의 규모(scale) 자체를 크게 키워야 하는데, 어떻게 하면 적절하게 규모를 키워 줄 수 있을지에 대한 방법론이 연구되었습니다. 이 과정에서 AutoML 기법을 도입하여 적절한 CNN 모델을 만들게 되었고, 이것을 EfficientNet이라고 부르게 되었습니다. 드디어 EfficientNet의 등장으로 CNN 모델이 84% top-1 accuracy를 넘어서는 성능을 보여주기 시작했죠

 

 

 

(↓↓↓입력이미지 크기에 따라 Efficient 모델 버전(ex: B0, B1, ..., B7)을 나눈 것↓↓↓) 

<그림4 출처.&nbsp; https://developpaper.com/keras-efficient-net-introduces-that-the-rising-point-of-imagenet-task-is-obvious/>

 

 

2-2. EfficientDet

2019.03 EfficientNet 모델이 등장하고 8개월 후, EffcientNet을 backbone (for classification task)으로 한 EfficientDet이 등장하게 됩니다.

  • 2019.11.20 arXiv 등록
  • 2020 CVPR accept

https://arxiv.org/abs/1911.09070

 

EfficientDet: Scalable and Efficient Object Detection

Model efficiency has become increasingly important in computer vision. In this paper, we systematically study neural network architecture design choices for object detection and propose several key optimizations to improve efficiency. First, we propose a w

arxiv.org

 

 

(↓↓↓EfficientDet 논문을 보면 Bacbone Network로 EfficientNet을 사용한 걸 확인할 수 있습니다↓↓↓)

 

 

EfficientDet의 등장으로 50 AP넘는 object detection 모델이 등장하기 시작했고, EfficientDet 모델은 2020년 초반까지 object detection SOTA 모델의 자리를 유지합니다. 

 

 

 

 

 

 

3. Deformable DETR

기존 object detection은 CNN을 기반으로 다양한 bounding box regression 기법을 연구하는 방향으로 진행되어왔습니다. 하지만, 2020년 초반부터 NLP 분야에서 사용되던 attention기반의 transformer 기법을 object detection에 적용해보려는 시도가 이루어지면서 새로운 object detection 모델들이 등장하게 됩니다.

 

3-1. Transformer (Feat. Attention)

2017.06월GoogleNLP(자연어처리) 분야에서 attention mechanism을 기반으로한 Transformer 모델을 소개합니다.

  • 2017.06.12 arXiv 등록
  • 2017 NIPS accept

 

https://papers.nips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html

 

Attention is All you Need

Attention is All you Need Part of Advances in Neural Information Processing Systems 30 (NIPS 2017) Authors Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin Abstract The dominant seque

papers.nips.cc

 

 

 

 

3-2. DETR

2020.03월Facebook NLP (자연어처리) 분야에서 사용하던 Transformer 기술들을 CV (컴퓨터 비전)에 적용하기 시작합니다.

  • 2020.03.22 arXiv 등록
  • 2020 ECCV accept

https://arxiv.org/abs/2005.12872

 

End-to-End Object Detection with Transformers

We present a new method that views object detection as a direct set prediction problem. Our approach streamlines the detection pipeline, effectively removing the need for many hand-designed components like a non-maximum suppression procedure or anchor gene

arxiv.org

 

 

 

 

하지만, 성능자체는 기존 object detection 모델의 성능보다 높게 나오지는 않았습니다. 사실 EfficientDet(←2019.11월 출현 & 50 AP)에 비하면 성능이 많이 뒤쳐지는 편이죠. 여기서 인지해야 하는 부분이 DETR에서 transformer를 사용했다는걸 ViT모델을 사용했다는 걸로 착각하시면 안된다는 점입니다. (참고로 ViT 모델은 DETR가 나오고 7개월 후인 2020.10월에 등장합니다. )

 

 

3-3. Deformerable DETR

DETR 모델이 등장하고 7개월 후에, DETR 모델의 후속연구로 Deforma DETR출현합니다.

  • 2020.10.08 arXiv 등록
  • 2021 ICLR accept

https://arxiv.org/abs/2010.04159

 

Deformable DETR: Deformable Transformers for End-to-End Object Detection

DETR has been recently proposed to eliminate the need for many hand-designed components in object detection while demonstrating good performance. However, it suffers from slow convergence and limited feature spatial resolution, due to the limitation of Tra

arxiv.org

 

 

Deformable DETR에서는 deformable attention module을 이용하여 성능을 높이려고 시도했습니다.

 

 

Deformable DETR의 성능이 EfficientDet보다 조금씩 더 나은 것을 볼 수 있었습니다. 이것을 통해 Transformer를 CV에 접목하려는 연구가 주목을 받기 시작했죠.

 

 

 

 

4. YOLOS

2020.10월 ViT 모델의 등장으로 object detection 모델의 backbone을 기존 CNN에서 Transformer 계열로 바꾸려는 시도가 이루어지기 시작합니다.

 

4-1. ViT

2020.10월 Deformable DETR로 인해 object detection 분야에서 Transformer의 관심을 보이기 시작했다면, 동시에 classification 분야에서는 2020.10월 ViT 모델의 등장으로 Transformer에 대한 관심이 뜨거워졌습니다. (Transformer라는 개념을 처음 소개한 것도 google이고, Transformer를 object detection에 처음 접목시킨 DETR도 google이고, Transformer를 (vision) classification에 처음 접목시킨 것도 google이네요 ㅎㄷㄷ...)

  • 2020.10.22 arXiv 등록
  • 2021 ICLR accept

 

https://arxiv.org/abs/2010.11929

 

An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

While the Transformer architecture has become the de-facto standard for natural language processing tasks, its applications to computer vision remain limited. In vision, attention is either applied in conjunction with convolutional networks, or used to rep

arxiv.org

 

 

 

 

하지만, ViT의 단점 중 하나는 모델이 지나치게 크기 때문에 학습을 시키기 위해서 방대한 양의 데이터를 필요로 한다는 점이었죠. (물론 모델이 크기 때문에 transfer learning에 적합하지 않다는 지적도 받았습니다.)

 

 

 

4-2. DeiT (Data-efficient Image Transformer)

기존에 ViT에서 지적된 것 중 하나가 방대한 양의 데이터셋을 필요로 한다는 점이었습니다. Transfer learning 관점에서 보면 pre-training을 위해 방대한 양의 데이터셋이 필요한 것이라고 볼 수 있죠. 이러한 단점극복하기 위해 FacebookDeiT이라는 classification 모델 제안하게 됩니다.

  • 2020.12.23 arXiv 등록
  • 2021 ICML accept

https://arxiv.org/abs/2012.12877

 

Training data-efficient image transformers & distillation through attention

Recently, neural networks purely based on attention were shown to address image understanding tasks such as image classification. However, these visual transformers are pre-trained with hundreds of millions of images using an expensive infrastructure, ther

arxiv.org

 

 

DeiT 모델 구조 자체는 ViT와 유사합니다. 대신, vision transformer 계열의 모델을 학습 시킬 때 기존의 CNN 방식과 다른 학습 기법을 적용했다는 것이 ViT와 큰 차이라고 볼 수 있습니다. 예를 들어, vision transformer 모델에 적합한  augmentation, optimization, regularization 등의 기법을 찾으려고 시도했고, 효율적인 학습을 위해 knowledge distillation 기법을 transformer 모델에 적용 (←Transformer-specific distillation) 하려는 노력도했습니다. (참고로 knowledge distillation을 적용했을 시에 teacher 모델로 RegNet을 이용했다고 하네요)

 

 

위와 같은 ViT와 같이 방대한 양의 학습 데이터 없이도 EfficientNet 보다 classification 성능이 좋은 vision transformer 모델을 선보이게 됩니다.  

 

 

4-3. YOLOS

Note1. 기존에 알고 있는 YOLO 모델 계열과 전혀 관계가 없다는 것을 알아두세요!

 

2021년에 들어서자 object detection 모델의 backone으로써 vision transformer 계열의 모델을 사용하는 연구가 진행됩니다. 

  • 2021.06.01 arXiv 등록
  • 2021 ICML accept

 

https://arxiv.org/abs/2106.00666

 

You Only Look at One Sequence: Rethinking Transformer in Vision through Object Detection

Can Transformer perform $2\mathrm{D}$ object-level recognition from a pure sequence-to-sequence perspective with minimal knowledge about the $2\mathrm{D}$ spatial structure? To answer this question, we present You Only Look at One Sequence (YOLOS), a serie

arxiv.org

 

항저우 대학은 앞서 소개되었던 DeiT이라는 classification 모델을 object detection 모델의 backbone으로 사용하여 YOLOS라는 object detectioin 모델을 만듭니다. 하지만, 기존 object detection 모델에 비해 좋은 성과를 거두지는 못합니다 (오히려 EfficientNet, Derformalbe DETR 성능이 더 좋은 것 같네요).   

 

 

 

 

 

5. Scaled YOLO v4

YOLO계열의 object detection 모델은 real-time이라는 측면에서 많은 사랑을 받아왔습니다. 하지만, 상대적으로 낮은 AP 성능으로 인해 YOLO v3 이후 많은 외면을 받아오기도 했는데요. 올해 제안된 YOLO 계열의 object detection 모델이 56 AP 성능을 기록하면서 다시 한 번 주목을 받고 있습니다. 

 

5-1. YOLO v1, YOLO v2, YOLO v3

2015년 첫 real-time object detection 모델인 YOLO v1이 출현합니다. 하지만, real-time에 초점을 맞춘 나머지 정확도 측면에서 많은 아쉬움을 주었죠.

  • 2015.06.08 arXiv 등록
  • 2016 CVPR accept

https://arxiv.org/abs/1506.02640

 

You Only Look Once: Unified, Real-Time Object Detection

We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabili

arxiv.org

 

그리고, 1년 뒤 YOLO v1의 정확성보완YOLO v2 모델등장합니다. 이때부터 YOLO 계열의 object detection 모델이 많은 연구자들에게 관심을 받기 시작하죠.

https://arxiv.org/abs/1612.08242

 

YOLO9000: Better, Faster, Stronger

We introduce YOLO9000, a state-of-the-art, real-time object detection system that can detect over 9000 object categories. First we propose various improvements to the YOLO detection method, both novel and drawn from prior work. The improved model, YOLOv2,

arxiv.org

 

YOLO v2의 개발자 Joseph Redmon은 Ted 나가서도 자신의 모델을 강연하는 등 대중들에게 YOLO 라는 모델을 각인시키는 노력도 합니다.

https://www.youtube.com/watch?v=Cgxsv1riJhI 

 

 

Joseph Redmon은 YOLO v2가 나온 후 2년이 지난 2018년에 YOLO v3를 보여줍니다. 

  • 2018.04.08 arXiv 등록

https://arxiv.org/abs/1804.02767

 

YOLOv3: An Incremental Improvement

We present some updates to YOLO! We made a bunch of little design changes to make it better. We also trained this new network that's pretty swell. It's a little bigger than last time but more accurate. It's still fast though, don't worry. At 320x320 YOLOv3

arxiv.org

 

 

YOLO v3는 다른 학회에 제출하지는 않고 Tech Report 형식으로 arXiv에 올리기만 했는데 그 이유는 다음과 같습니다. 사실, Joseph Redmon은 YOLO v3 Tech Report에서도 computer vision 분야에서 object detection 모델을 개발하는 것에 대한 윤리적 책임감을 강조했습니다. 어떤 이유가 결정적이었는 지는 모르겠지만, YOLO v3 모델을 개발하고 2년 후 자신은 object detection 모델을 개발하는 것을 그만두겠다는 트윗을 올리게 되죠. 그 이유는 아래와 같이 군사적 목적으로 쓰이는걸 원치않았기 때문이라고 합니다. 

 

 

 

 

5-2. YOLO v4

2018년 석사시절에 필자는 YOLO v3를 사용할 때, Joseph Redmon의 official site를 이용하지는 않았습니다. (질문을 올려도 답을 잘 안해줬던 기억이...) 이 당시에 Alexey라는 russian reseacher의 github에서 YOLO v3를 자주 이용했습니다. 

 

 

질문하면 정말 빠르게 피드백 해주어서 연구할 때 많은 도움을 받았던 기억이 있네요...ㅎ (사실, 설치나 코드 파악하기에도 Alexey의 코드가 더 보기 편했던 것 같습니다.)

 

 

2020.02월에 Joseph Redmon이 YOLO v4에 대한 개발 포기를 선언하자, 2달뒤 2020.04월에 Alexey가 YOLO v4 모델을 개발합니다.

  • 2020.04.23 arXiv 등록
  • 2020 CVPR accept

https://arxiv.org/abs/2004.10934

 

YOLOv4: Optimal Speed and Accuracy of Object Detection

There are a huge number of features which are said to improve Convolutional Neural Network (CNN) accuracy. Practical testing of combinations of such features on large datasets, and theoretical justification of the result, is required. Some features operate

arxiv.org

 

EfficientDet에 비교하면 아직 아쉬운 수준이었지만, 기존 YOLO v3보다는 더 좋은 성능을 보여주었습니다. 아래 figure1을 보면 GPU V100 모델 기준으로의 높은 FPS 성능을 보여주고 있기 때문에 충분히 낮은 GPU 성능이 장착된 작은 device에 임베딩해서도 사용될 수 있음을 예상 할 수 있습니다.

 

 

 

5-3. YOLO v5

YOLO v4라는 논문이 2020.04월에 나온 후, 곧바로 한 달뒤인 2020.05월에 YOLO v5가 나왔습니다.  그런데, YOLO v5는 arXiv와 같은 paper형식이 아닌 blog site에 소개가 됩니다.

https://blog.roboflow.com/yolov5-is-here/

 

YOLOv5 is Here

State of the art object detection at 140 FPS.

blog.roboflow.com

 

https://docs.ultralytics.com/

 

YOLOv5 Documentation

Introduction To get started right now check out the Quick Start Guide What is YOLOv5 YOLO an acronym for 'You only look once', is an object detection algorithm that divides images into a grid system. Each cell in the grid is responsible for detecting objec

docs.ultralytics.com

 

AP와 FPS 측면에서 모두 성능향상을 이루긴 했지만, machine learning commuity에서 여러 의견이 있었던 것 같습니다. 특히, YOLO v4의 저자인 Alexey가 성능을 측정하는 것에 대해 여러 문제점을 제기했다고 합니다. (자세한 내용은 아래 사이트의 "Controversy in machine learning community" section에서 확인해주세요!)

https://towardsdatascience.com/yolo-v4-or-yolo-v5-or-pp-yolo-dad8e40f7109

 

YOLO v4 or YOLO v5 or PP-YOLO?

What are these new YOLO releases in 2020? How do they differ? Which one should I use?

towardsdatascience.com

 

 

5-4. Scaled YOLO v4

Alexey는 YOLO v4를 개발하고 7개월 뒤 (2020.11) 후속연구인 Scaled YOLO v4를 발표합니다. 

  • 2020.11.16 arXiv 등록
  • 2021 CVPR 

https://arxiv.org/abs/2011.08036

 

Scaled-YOLOv4: Scaling Cross Stage Partial Network

We show that the YOLOv4 object detection neural network based on the CSP approach, scales both up and down and is applicable to small and large networks while maintaining optimal speed and accuracy. We propose a network scaling approach that modifies not o

arxiv.org

 

YOLO 모델이 EfficientDet의 AP 성능을 뛰어 넘는 것 까지 보여줌으로써 object detection 모델이 FPS, accuracy 모두 잡을 수 있다는 것을 보여주게됩니다. (YOLO 계열의 모델이 SOTA를 기록할 수 있다는 것을 보여준 것이죠.)

 

5-5. YOLOR

YOLO v4 때부터 같이 개발에 참여한 팀원들은 Taiwan의 nataional academy인 Sinica academy 소속이었습니다. (참고로 Alexey의 약력은 아래와 같습니다) 

 

[Alexey]

  • 2001~2008: MISIS University
  • 2019.11~현재: Lead Machine Learning Engineer: Academica Sinica, Taiwan
  • 2020.07~현재: Intel Research Engineer

 

해당 팀원들이 Scaled YOLO v4를 같이 개발 한 후,  6개월 뒤 후속 연구로써 YOLOR 라는 논문을 arXiv에 등록하게 됩니다. 

  • 2021.05.10 arXiv 등록

https://arxiv.org/abs/2105.04206

 

You Only Learn One Representation: Unified Network for Multiple Tasks

People ``understand'' the world via vision, hearing, tactile, and also the past experience. Human experience can be learned through normal learning (we call it explicit knowledge), or subconsciously (we call it implicit knowledge). These experiences learne

arxiv.org

 

논문의 결과나 paperwithcode에서 살펴봤을 때, 모델의 성능 자체는 크게 개선되지 않았던것 같습니다.

 

 

하지만, Scaled YOLO v4 모델을 좀 더 representation 관점에서 다양한 해석을 시도하려고 했기 때문에 이를 기반으로 후속 연구들이 나오지 않을까 기대하고 있습니다.

 

 

 

 

 

6. Soft Teacher+Swin-L

2021년에 들어서면서 Transformer 계열의 object detection 모델이 CNN 계열의 object detection 모델을 밀어내고 독주하기 시작합니다. 필자가 조사를 했을 당시 (2021.08) paperwithcode에서 object detection SOTA 모델Soft Teacher+Swin-L 이었는데, 이 모델 역시 Transformer 계열의 objecte detection 모델이었습니다.

 

6-1. Swin Transformer

2021.03월에 Microsoft Reseaerch Asia에서 새로운 vision Transformer 모델 Swin Transformer 모델을 선보입니다.

  • 2021.03.25 arXiv 등록
  • 2021 ICCV accept 
    • 2021.10.11~2021.10.17 온라인 개최 예정
    • Oral 3 Strong Accepts

https://arxiv.org/abs/2103.14030

 

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

This paper presents a new vision Transformer, called Swin Transformer, that capably serves as a general-purpose backbone for computer vision. Challenges in adapting Transformer from language to vision arise from differences between the two domains, such as

arxiv.org

 

Swin Transformer는 사실 semantic segmentation 분야에 Transformer 모델을 적용시키기 위해 고안되었습니다. Segmentationdense prediction을 해야하기 때문에 계산량이 많은데, 기존 Transformer 모델 자체도 계산량이 많기 때문에 sementic segmentation과 Transformer 기술 까지 같이 접목시키면 intractable 문제로 바뀐다고 합니다. 이러한 intractable 문제를 극복하기 위해서 Swin Transformer 논문은 hierarchical feature mapShifted window (Swin) block을 이용했다고 합니다.

 

 

 

 

Swin Transformer 모델은 2021.03월에 58 AP를 기록하면서 object detection SOTA 모델로 등극하게 됩니다.

 

 

6-2. Soft Teacher+Swin-L

Swin Transformer 모델이 나온 후 3개월 뒤 후속 연구로써 Soft Teacher+Swin-L 모델이 등장합니다.

  • 2021.06.16 arXiv 등록
  • 2021 ICCV (제출예정)

https://arxiv.org/abs/2106.09018

 

End-to-End Semi-Supervised Object Detection with Soft Teacher

This paper presents an end-to-end semi-supervised object detection approach, in contrast to previous more complex multi-stage methods. The end-to-end training gradually improves pseudo label qualities during the curriculum, and the more and more accurate p

arxiv.org

 

Swin Transformer의 저자 중 한 명이 Soft Teacher+Swin-L 모델 연구 개발에 참여한 것으로 보이고, Micro Soft와 항저우 과기대 (HUST) 팀원들이 같이 참여 한 것으로 보이네요. (올해는 항저우 과기대라는 이름을 더 자주 보는 듯합니다)

 

 

Pseudo label 기반의 Semi-Supervised Learning 방식을 Swin Transformer에 적절히 잘 적용Soft Teacher+Swin-L 모델이 제안됩니다

 

 

기존에는 Semi-Supervised Learning이 Supervised Learning의 성능을 뛰어 넘지 못했던 것과 달리, Soft Teacher+Swin-L 모델에 Semi-Supervised Learning을 적용했을 때는 더 좋은 성과를 보여준 것이 고무적입니다. 또한, 드디어 60 AP 고지를 돌파한 object detection 모델을 선보이기도 했죠. 

 

 

 

 

 

7. ETC

2021.08월을 기준으로 현재 paperwithcode에서 object detection 1, 2, 3등 모델 모두 Swin Tranformer기반으로 하고 있습니다.

 

  • DyHead 
    • 2021.06.15 arXiv 등록
    • 2021 CVPR accept
  • Dual-Swin-L
    • 2021.07.01 arXiv 등록

 

 

 

1, 2 3등을 기록한 연구들은 서로 별개의 독립적인 연구였던 것 같습니다.

 

 

 

 

지금까지 2021.08월까지 object detection 모델의 trend에 대해서 소개해드렸습니다.

앞으로 object detection 관련 글을 쓰게 되면 Swin Transformer 또는 EfficientDet 부터 쓰게되지 않을까 싶습니다.

 

읽어주셔서 감사합니다! 

 

 

 

[Reference Site]

1) Vision Transformer 관련 글

https://hoya012.github.io/blog/Vision-Transformer-1/

 

Transformers in Vision: A Survey [1] Transformer 소개 & Transformers for Image Recognition

“Transformers in Vision: A Survey” 논문을 읽고 주요 내용을 정리했습니다.

hoya012.github.io

 

 

 

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

13. YOLO V3  (0) 2021.08.26
11. SSD  (3) 2020.02.06
10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06

안녕하세요. 

이번 글에서는 YOLO V3 object detection "TECH REPORT"를 설명하려고 합니다.

 

지금까지 리뷰한 object detection 모델은 어떤 학회나 저널에 제출된 논문들이었습니다.

하지만, YOLO V3 저자는 YOLO V3가 YOLO V2를 약간 업데이트한 버전이라서 논문이 아닌 TECH REPORT 개념으로 작성한다고 언급했습니다.그래서, 현재 어떤 학회에 제출되지 않고 arXiv에만 올라와 있는 상태 입니다.

그렇게 때문에 YOLO V2를 잘 이해하고 있으시다면 어렵지 않게 이해하실 것으로 판단됩니다.

 

그럼, 지금부터 YOLO V3 TECH REPORT를 리뷰해보도록 하겠습니다.  

 

 

Paper: YOLOv3: An incremental Improvement

2018. 04. 08 arXiv  

[영어단어 및 표현 정리]

  • Incremental: Incremental is used to describe something that increases in value or worth, often by a regular amount.

 

 

 

0. Abstract

YOLO V3는 YOLO(V2)의 디자인을 약간씩 변경했다고 언급하고 있습니다. 대표적으로 변경한 부분은 새로운 네트워크 부분인데, 뒤에서 자세히 언급하겠지만 YOLO V2에서 사용했던 darknet19 darknet53으로 발전시켜 YOLO V3의 backbone 네트워크로 사용했습니다.

 

이러한 변경들로 인해 YOLO V2에 비해 모델이 약간 커지긴 했지만 정확성이 높아졌다고 합니다.

  • 320×320 (input resolution) YOLO V3 performance
    • Speed1 (mAP 기준): 22ms ← three times faster than SSD
    • Accuracy1 (mAP 기준): 28.2 mAP ← same as SSD
    • Speed2 (\(AP_{50}\) 기준):: 51ms (on Titan X) ← about four times faster than RetinaNet
    • Accuracy 2 (\(AP_{50}\) 기준):: 57.9 \(AP_{50}\) ← same as RetinaNet

 

 

이 논문에서는 YOLO V3를 mAP가 아닌 \(AP_{50}\)강조하고 있는데요. 이 이유에 대해서는 뒤에서 자세히 설명하도록 하겠습니다.

 

 

[영어단어 및 표현 정리]

  • swell: an old word that basically means fantastic, generally used by old people or hipsters to try to sound hip. 
    • YOLO V3 글 자체가 TECH REPORT다 보니까 슬랭(slang)어를 자주 사용하는 경우가 있습니다. 그래서, 공식사전같은 곳에서 swell의 뜻을 대입해 해석하면 이상해지는 경우가 많죠. 보통 영어 슬랭어는 Urban dictionary 라는 사전을 이용하면 잘 찾을 수 있습니다.

https://www.urbandictionary.com/

 

Urban Dictionary, August 25: milves

plural of milf.

www.urbandictionary.com

 

 

 

 

 

 

1. Introduction

[첫 번째 문단]

역시 official paper가 아니기 때문에 처음에 친숙한 어투로 글 전개를 시작 하는것 같습니다.

 

"가끔 그냥 너도 1년 동안 다른 짓만 할때도 있잖아? 나도 올해에는 research 많이 안하고 트위터만 한 듯... 뭐 물론 GAN 같은 것도 조금 해보긴 했지만...."

"그래도 여력이 조금 남아있어서 YOLO (V2) 성능을 조금 개선시키긴 했어~"

"근데 뭐 막 엄청 interesting한 기법을 쓴건 아니고, 조금씩 변화만 줘서 실험했어~"

 

 

 

[영어단어 및 표현 정리]

  • kinda: (구어) kind of ((발음대로 철자한 것))
  • momentum: If a process or movement gains momentum, it keeps developing or happening more quickly and keeps becoming less likely to stop. (=impetus)

 

 

 

[두 번째 문단]

 

대부분 학회에서는 "Camera ready due"가 있습니다.

학회같은 곳에서 다루는 paper 종류는 두 가지 입니다.

  • Accepted paper
  • Camera-ready paper

아래 그림1을 보면 "Paper Submission Deadline"이라고 나와있을 겁니다. 일반적으로 학회에 제출하여 논문에 accept되면 이를 "Accepted paper"라고 합니다. 

 

그런데, "accepted paper"를 최종 인쇄하기 위해서는 "폰트 종류, 크기", "대소문자" 등의 양식을 다시 통일시켜주어야 합니다. 이때 최종 인쇄를 위해 통일된 양식으로 바꾼 paper를 "Camera-ready paper"라고 보시면 됩니다.

그림1. CVPR (2021) Submission Timeline

 

YOLO V3 저자가 Camera-ready를 하긴했지만, "a source"가 없어서 TECH REPORT로 내기로 했다고 한 것 같네요. (정확히 "a source"가 무엇을 의미하는지는 모르겠습니다....)

 

 

 

[세 번째 문단]

이 tech report는 크게 세 가지 section으로 구성되어 있습니다.

 

  1. Deal: Method (YOLO V3에 대한 전반적인 architecture를 설명)
  2. How we do: Experiment (YOLO V3 결과 해석)
  3. Things we tried that didn't work: Ablation Study 개념
  4. What this all means: Conclusion + 기존 evaluation 방식 불만 제기

 

[영어단어 및 표현 정리]

  • intros: an introduction의 복수형 
  • y'all: you-all의 축약형
  • contemplate: 생각하다

 

 

 

 

 

 

2. Deal

Section2("2. The Deal) 에서는 YOLOv3의 아키텍처에 대해 설명합니다. Secion2 구성을 미리 설명하면 다음과 같습니다.

  • 2.1. Bounding Box Prediction: 제목 그대로 bbox prediction 할 때 사용되는 수식들을 설명합니다 (미리 말씀드리면, 이 부분은 YOLOv2와 동일합니다.
  • 2.2. Class Prediction
  • 2.3. Predicitons Across Scales: darknet-53으로 feature extraction 한 후, bounding box를 찾을 때 다양한 resolution에서 boundinb box를 찾는 방식을 설명합니다. 이 부분이 YOLOv2와 다른 첫 번째 특징입니다.
  • 2.4. Feature Extractor: YOLOv2에서 feature extractor로 사용한 darknet-19를 업그레이드 한, new classifier인 darknet-53을 소개 합니다. 이 부분이 YOLOv2와 다른 두 번재 특징입니다.
  • 2.5. Training: YOLOv3를 어떻게 학습시켰는지 설명합니다.

제가 글을 읽어보면서 순서를 조금 변경시키면 좋겠다고 판단하여, 이 블로그에서는 순서를 아래와 같이 변경하여 설명하려고 합니다.

  • 2.4. Feature Extractor
  • 2.3. Predictions Across Scales
  • 2.2. Class Prediction
  • 2.1. Bounding Box Prediction
  • 2.5. Training

 

 

2-4. Feature Extractor

YOLO V2에서는 feature extractor로써 darknet-19를 사용했었습니다. 아래 그림(테이블)에서 darknet-19를 보면 convolutional layer 19개인 것을 확인할 수 있습니다. YOLO V3에서는 residual connection을 이용하여 layer를 더 deep하게 쌓게 되었고, 그 결과 darknet-53을 만들 수 있게 되었습니다. 아래 그림에서 darknet-53convolutional layer가 총 52개인데, 아마 Avgpool(=average pooling layer) 직전에 1×1×1000 convolutional layer가 생략된 듯 합니다. 이렇게 추측한 이유는 다음과 같습니다.

  • Connected가 softmax 직전에 위치한 것을 보면 logit인 것을 알 수 있습니다. 
  • Connected는 average pooling 결과라고 볼 수 있는데, 아래 그림상으로는 average pooling에 들어가기 직전의 convolutional channel 수 는 1024개 입니다.
  • Average pooling 연산 후 1000개의 neuron을 출력하기 위해서는 입력 직전의 convolutional channel 수가 1000개여야 하기 때문에, 1000개의 채널을 갖는 1×1 convolutional layer가 생략되었다는걸 추측 할 수 있습니다.
  • 즉, 아래 그림의 convolutional layer 총 개수와 Avgpool 직전에 생략된 하나의 1×1 convolutional layer를 더하면 총 convolutional layer 개수가 53개인 것을 확인할 수 있습니다.   
  • (참고로, Size 부분에 "/2"라고 되어 있는 부분은 convolution filter의 stride=2라는 뜻입니다. Pooling이 아닌 conv filter의 stride를 통해 downsampling을 진행했네요)

 

 

Darknet-53을 자세히 도식화하면 다음과 아래 그림과 같이 표현할 수 있습니다. (제가 임의대로 그린거라 틀린부분이 있으면 말씀해주세요!)

 

그림2

 

 

위의 결과표를 보면 darknet-53이 darknet-19보다 좋은 accurcay를 기록하고 있다는걸 알 수 있습니다. ResNet-152보다는 accuracy가 조금 떨어지기는 하지만 더 효율적이라고 하는데, 이 부분은 바로 다음 문단에서 설명하도록 하겠습니다. 

 

 

 

Darknet-53이 ResNet 모델들 보다 efficient하다고 하는 이유는 FPS, BFLOP/s 에 있습니다 (BFLOP의 B는 Billion의 약자입니다. FLOPS에 대한 설명은 아래 글을 참고해주세요!)

 

https://89douner.tistory.com/159

 

4.NVIDIA GPU 아키텍처(feat.FLOPS)

안녕하세요~ 이번글에서는 NVIDIA에서 출시했던 GPU 아키텍처들에 대해 알아볼거에요. 가장 먼저 출시됐던 Tesla 아키텍처를 살펴보면서 기본적인 NVIDIA GPU 구조에 대해서 알아보고, 해당 GPU의 스펙

89douner.tistory.com

 

컴퓨터가 초당 연산할 수 있는 능력을 "BFLOP/s"로 나타내는데, "BFLOP/s"가 높을 수록 GPU가 1초에 더 많은 연산을 실행해준다는 것과 같으니 GPU utilization을 잘 활용한다는 것을 뜻하기도 합니다. 결국, darknet-53이 ResNet-152보다 성능이 약간 떨어지긴 해도 (개인적으로는 0.4%의 오차는 편차에 따라서 큰 의미가 없을 수 있다고 생각하긴 합니다만...), FPS (or GPU utilization)이 월등이 높기 때문에 더 "efficient"하다고 주장하는 것이지요.

 

 

 

 

[영어단어 및 표현 정리]

  • newfangle
    • 형용사로 쓰이는 경우: Eager for novelties; desirous of changing
    • 동사로 쓰이는 경우: To change by introducing novelties

 

 

 

 

2-3. Predictions Across Scales

 

 

위의 두 문단을 정리한 그림을 도식화해서 보여드리겠습니다. (아래 그림에서 "conv[3,3,32,64]/2"라고 되어 있는 부분에서 "/2"가 의미하는 바는 conv filter의 stride가 2라는 뜻힙니다 (즉, conv filter의 stride를 크게 설정함으로써 downsampling을 해주겠다는 뜻이죠))

<그림3 이미지 출처:  https://arxiv.org/ftp/arxiv/papers/1812/1812.10590.pdf>

 

 

 

<그림4 이미지 출처:  https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/>

 

 

 

우선 저 "We perform the same design~ " 문단은 정확히 무엇을 의미하는 내용들인지 모르겠네요. 

"We still use k-means ~" 문단은 YOLOv3가 학습 전에 bounding box의 aspect ratio를 각 scale마다 어떻게 설정해 줄 지 사전정의한 hyper-parameter 입니다. (제 생각으로는, (10×13), (16×30), (33×23) 이렇게 3개는 small object (52×52 feature map과 관련된 bounding box 정보인듯 합니다. 아니라면 답변주세요!)

 

 

 

 

2-2. Class Prediction

 

우선 위의 문장에서 의미하는 바들을 이해하기 쉽게 풀어서 설명해보도록 하겠습니다.

 

COCO dataset80개의 클래스를 갖고 있습니다. 즉, COCO dataset의 이미지들을 분류하겠다는 것은 80개의 class들을 분류하는 multi-classification task인 것이죠. 그런데, 80개의 클래스들이 모두 서로 전혀관계가 없는 것은 아닙니다. 예를 들어, 80개에 "Person", "Man"이라는 클래스가 포함될 수 도 있는데, 이 두 클래스는 서로 독립적인 클래스가 아니죠. 왜냐하면, "Man"은 "Person"의 부분집합 개념이기 때문입니다. 그래서, '앨론 머스크' 이미지를 classification하면 "Man"이 나올 수 도 있고, "Person"이 나올 수 도 있는 것이죠. (보통 이러한 관계를 지닌 클래스들은 서로 hierarchy한 구조를 갖고 있다고 합니다)

 

일반적으로 classification 방식은 softmax를 취해준 후, cross entropy를 계산하는 경우가 대부분입니다. 그런데, softmax를 취해주면 logit값(=softmax 입력 값: \(z_{i}\))이 제일 높은 하나의 클래스 확률 값만 지나치게 높게 설정해주는 경우가 있습니다. 이렇게 하나의 클래스 확률 값만 높여주는 이유는 입력 이미지에는 하나의 클래스만 있을 것이라는 가정을 하기 때문입니다. 

 

<그림5 이미지 출처: https://gombru.github.io/2018/05/23/cross_entropy_loss/>

 

 

 

그런데, 앞서 설명했듯이 위의 '앨론 머스크' 이미지는 두 가지 클래스(=레이블)를 갖고 있을 수 있다고 했습니다. 즉, muti-label 이미지인 것이죠. 그래서, 이 경우는 multi-label을 모두 정확하게 예측하기 위해서 independent logistic classifiers를 사용합니다. 

 

<그림6>

 

 

 

 

2-1. Bounding Box Prediction

※"2-1.Bounding Box Prediction" 파트는 총 두 문단으로 구성되어 있는데, 여기에서는 문단 순서를 바꾸어 설명하도록 하겠습니다.

 

 

위의 문장을 요약하면 아래 그림으로 표현할 수 있습니다.

YOLOv3는 한 번 연산할 때, feature map의 한 cell당 총 3개의 box에 해당하는 3d-tensor들을 출력합니다. 이론적으로, 한 번 학습 시 생성되는 bounding box 개수는 (10647=52×52×3+26×26×3+13×13×3) 일겁니다. 여기서 IOU가 제일 높은 box의 3d-tensor만 loss function을 위해 사용하게 됩니다. 또한, IOU가 제일 높은 3d-tensor의 objectness score(=confidence score)를 1로 설정해줍니다. (이 과정을 굉장히 간단하게 설명했지만, 실제로 bounding box 후보군을 가려내는 작업은 훨씬 복잡합니다. 이 부분은 코드 구현 부에서 좀 더 자세히 다루도록 하겠습니다)

 

<그림7>

 

YOLOv3에서는 IOU의 threshold를 0.5로 설정하고 있습니다. 그렇기 때문에, 초기에는 10647개 box들의 IOU가 모두 0.5가 넘지 않을 수 도 있습니다. 이 경우에는 아래 YOLO loss에서 objectness loss 부분을 제외한 regression loss, classification loss를 발생시키지 않습니다. (아마, loss를 발생시키지 않는다는 것은 loss 값을 0으로 할당시켜준다는 뜻 같은데, 이 부분은 코드를 리뷰하면서 더 자세히 살펴보도록 하겠습니다. (사실 엄밀히 말하면 아래 수식은 YOLOv1의 loss function입니다. 실제로는 시그마 부분이 좀 변경되어야 할 것 같네요.)

 

<그림8>

 

 

 

 

 

 

이 부분은 YOLOv2와 똑같기 때문에 설명을 더 하지는 않겠습니다. 

(↓↓↓아래 글에서 "3-3) Direct location prediction" 부분을 참고해주세요!↓↓↓)

https://89douner.tistory.com/93

 

10. YOLO V2

안녕하세요~ 이번글에서는 YOLO V1을 업그레이드한 버전인 YOLO V2에 대해서 알아보도록 할거에요. YOLO V2 논문에서는 YOLO V1을 3가지 측면에서 업그레이드 시켜서 논문 제목을 Better, Faster, Stronger이라

89douner.tistory.com

 

 

 

 

 

3. How We Do

[첫 번째 문단]

COCO dataset의 mAP 성능을 살펴보니 SSD variants (SSD513, DSSD513)와 동일한 반면 속도는 3배더 빨랐다고 합니다. 하지만, 여전히 RetinaNet의 mAP 성능을 뛰어넘진 못했네요. (YOLO v3 저자는 mAP 방식의 evaluation 방식이 "weird"하다고 표현했는데, 그 이유는 "5.What This All Means"에서 설명드리도록 하겠습니다) 

 

[영어단어 및 표현 정리]

  • on par with: ~와 동등(대등)한

 

(※아래 "stealing all these tables from [9]" 표현은 RetinaNet 모델 결과는 RetinaNet 논문 [9]에서 그냥 가져온거라고 합니다. RetinaNet을 Scratch로 구현하려면 너무 오래 걸린기 때문에 이렇게 했다고 하네요)

그림?

 

 

 

[두 번째 문단]

하지만, \(AP_{50}\)을 기준으로하면 YOLOv3의 성능은 RetinaNet과 동등해집니다. 하지만, IOU의 threshold를 올리면 AP 성능이 급격히 떨어지는데, 이러한 것으로 보아 YOLOv3 모델이 어떤 객체를 완전히 "fit"(정확)하게 detect하지 못하는걸 알 수 있습니다.

 

그림?+1

 

[영어단어 및 표현 정리]

  • on par with: ~와 동등(대등)한
  • excel at ~ing: ~하는 것이 뛰어나다 

 

 

[세 번째 문단]

위의 그림?(Table 3)을 보면 예전 YOLO(v2) 같은 경우에는 small object에 대한 성능이 매우 안좋았음을 알 수 있습니다. "2.3. Predictions Across Scales"에서 언급된 multi-scale predictions을 이용해 small object에 대한 AP (\(AP_{S})\)를 향상시킬 수 있었습니다. 

하지만, medium, large size objects의 detection 성능 향상 정도가 small object 성능 향상 정도에 미치지 못했다고 합니다. (개인적으로는 뭐... 당연한거 같다는 생각이... YOLO V2에서 multi-scale을 쓰지 않았으면 small object를 아예 놓치는 경우가 있을 수 있을테니, 이런 경우에 mAP를 성능을 크게 깍아먹지 않았었을까라는 생각이 드네요.)

 

 

[영어단어 및 표현 정리]

  • get to the bottom of it: 진상을 규명하다; 진짜 이유를 찾아내다.
    • "get to the bottom of ~"의 본래 뜻은 ~의 바닥까지 본다입니다. 진상을 확인 하는 것도 보이지 않는 밑바닥까지 살펴보는 행위라고 볼 수 있기 때문에, 관용어구로 사용됩니다.

 

 

 

[세 번째 문단]

(논문에서 "see figure 5"라고 했는데, 제가 봤을 땐 오타 같습니다. "see figure 3"이 맞는듯 하네요.)

확실히 mAP보다 mAP-50 지표로 보면 YOLOv3의 성능이 굉장히 좋게 보입니다.

 

mAP-50 기준 결과
mAP 기준 결과

 

 

 

 

 

4. Things We Tried That Didn't Work

이 부분은 오히려 설명을 하는게 YOLOv3를 이해하는데 더 혼동시킬 수 도 있다고 생각하여 따로 글을 올리진 안았습니다. 아래 영상 "24:38~27:00"를 참고하시는게 더 좋을 듯 합니다.

 

 

 

 

 

 

 

5. What This All Means

[첫 번째 문단]

저자는 YOLOv3가 mAP와 \(AP_{50}\) 간의 성능차가 심하게 나는 것을 강조하고 있습니다.

 

 

[두 번째 문단]

mAP 성능이 안좋아서 그런지.... ,mAP를 evaluation 지표로 사용하는 것에 대한 불만을 제기하는데, 그 이유는 아래와 같습니다.

 

"사람도 50% IoU와 30% IoU를 잘 구분하지 못하는데, 즉 20% 차이나는 IOU gap도 구별을 못하는데, 50%, 55%, 60%, ..., 95%씩 나눠서 평가하고 mAP을 구하는게 무슨 의미가 있는거냐"

 

저자는 추가적인 (좀 더 근본적인) 이유도 이야기를 하는데, 그 내용은 뒤에 "6.Rebuttal"에서 설명하도록 하겠습니다.

 

 

[영어단어 및 표현 정리]

  • cryptic: A cryptic remark or message contains a hidden meaning or is difficult to understand.

 

 

 

[세 번째, 네 번째, 다섯 번째 문단]

그리고, 자신이 개발 중인 기술에 대한 근원적인 질문을 합니다.

 

"우리가 object detection 기술을 가졌으니, 그걸로 뭘 할거냐?"

 

이 질문과 함께 자신이 개발한 기술이 privacy를 침해하는 데 사용될 수 있고, 사람을 죽이는 military 목적으로 사용될 수 있다는 것을 우려하고 있습니다. 해당 기술 (Object Detection)은 동물원의 얼룩말 수를 세는 것이나, 자신들의 애완동물을 잘 찾을 수 있는 용도로 사용되어야 한다고 강조합니다. 그리고, 이러한 방향으로 기술이 개발되도록 책임의식을 갖어야 한다고 주장하면서 글을 마무리합니다. (트위터도 끊을 거라고 하네요.. 근데, 2020년에 트위터 내용을 보니 못 끊은건지... 다시 가입한건지..)

 

 

 

 

 

 

6. Rebuttal

Reference 뒷 부분을 보면 "Rebuttal"이라는 section이 있습니다. 일반적으로 저자가 논문이나 자신의 article을 제출하면 reviewer들이 comment를 남깁니다. 그럼, 저자는 해당 comment에 대한 답변을 해야하는데 이러한 답변을 보통 "Rebuttal Letter"라고 부릅니다. 보통 답변을 할 때는 두 가지의 제스처를 취할 수 있습니다.

  • 수락: reviewer들로부터 피드백 받은 comment들 기반으로 잘 내용들을 업데이트 하겠다.
  • 반박: reviewer들이 comment한 것을 동의하기 어려운 경우도 있습니다. 이 때는 동의하지 않는 이유를 설명합니다. 

 

YOLO V3 tech report에서는 저자가 따로 comment 받은 내용과 자신의 rebuttal letter를 "Rebuttal" section으로 만들어 공개했습니다. (첫 번째 문단을 보면 ICCV에 제출한건지......)

첫 번재 문단은 따로 설명하지 않겠습니다. YOLO랑 크게 관련 없는 내용이라....

 

 

[첫 번째 문단 관련 영어단어 및 표현 정리]

  • shouts: shout이 보통 복수형으로 쓰이면 '외침'이라는 뜻으로 쓰이긴 하는데, 슬랭의 의미로 사용할 때는 누군가가 좋은 아이디어를 낼 때 "that's shouts'라고 사용한다고 하네요.
  • heartfelt: 진심어린
  • invariably: 변함없이, 언제나

 

 

[첫 번째 Reviewer: Dan Grossman]

첫 번째로 받은 comment는 "Figure 1, 3"에 대한 지적입니다. "Figure1", "Figure3" 두 그림을 보면 YOLOv3 그래프의 X축이 0부터 시작하지 않습니다. 

 

 

 

그래서, 이러한 comment를 받아들여, 아래와 같은 "Figure 4"를 만들어 제공했습니다.

 

[첫 번째 Reviewer관련 용어]

  • AKA: 일명 ~로 알려진 (as known as ~)
  • throw in ~: ~를 덧 붙이다.

 

 

[두 번째 Reviewer: JudasAdventus]

JudasAdventus라는 사람이 "the arguments against the MSCOCO metrics seem a bit weak."라고 comment 해준 것 같은데, 뭔가.. YOLO v3 저자가 굉장히 기분 안좋은 것 같은 반응을....(제가 해석을 잘 못 하고 있는건지...) 아마, reviewer가 "COCO 데이터 셋은 segmentation 관련 label도 진행하기 때문에 더 정확한 bounding box 정답 좌표를 갖고 있을 것이기 때문에 COCO metric을 쓰는 것에 대한 반문은 "bit weak"하다고 한 것 같습니다. 그러자, 저자는 그런게 문제가 아니라 mAP 쓰는 것에 대한 정당성 자체에 문제를 제기하고 있는 거라고 반문합니다. (그 이유는 아래 문단에서...)

 

 

 

YOLO v3 저자가 지적하는 바는 다음과 같습니다. Objecet detection 모델은 bounding box loss와 classification loss로 구성된 multi-task learning (← classification 학습도 하고, bounding box regression 학습도 하기 때문에 multi-task learning이라고 부름) 을 하는데, 기본적으로 bounding box regression 부분을 지나치게 강조하면 classification 학습이 잘 안될 수 있다는 것이 문제임을 제기합니다. 현실적으로도 물체를 잘 classification하는게 중요한거지 bounding box의 IoU를 50%, 55%, 60% 이런식으로 타이트하게 맞추는게 더 중요하지 않다고 주장하고 있습니다. (예를 들면, 보행자에서 지나가는 물체가 사람임을 인식하는게 중요한거지 사람에 대한 bounding box를 정확히 치는것이 중요하지 않다는 논리인것 같습니다)

 

또한, mAP라는 성능 지표자체가 갖고 있는 치명적인 결함은 다음과 같습니다. 아래 그림에서 누가봐도 "Detection #1"의 결과가 "Detection #2"의 결과보다 좋은거 같은데, 실제 "Detection #1"과 "Detection #2"의 mAP 값이 동일하게 나옵니다. 그 이유는 다음과 같습니다.

 

그 이유는 아래글에서 object detection에서의 precision 개념을 살펴보시면 이해할 수 있으실 겁니다! (간단하게만 말하자면, Detector2의 경우 FN이 많아진 것일 뿐, TP, FP의 개수에는 변함이 없습니다. 그래서, Precision=TP/(TP+FP) 수식 관점에서는 precision은 변하지 않는 것이죠)

https://89douner.tistory.com/76?category=878735 

 

 

 

 

 

 

위와 같은 이유를 들어 저자는 mAP 성능 지표를 쓰는 것이 현실적으로 의미가 있는거냐라는 질문을 다시 한 번 하고 있습니다.

 

 

 

 

 

 

 

 

 

7. Joseph Redmon quits CV research

 

YOLO V1부터 YOLO V3까지 개발해왔던 Joseph Redmon은 2020년이 되자 더 이상 CV (Computer Vision) 연구를 진행하지 않겠다고 선언합니다. 자기가 개발하는 CV 기술들이 군사목적으로 사용되는 것도 원치 않고 privacy 문제도에도 영향을 미치는 것 같다고 합니다 (뭐 드론 같은데에 잘 못 쓰이면 심각한 privacy 문제가 생길 수 있죠). 그래서 YOLO를 더 이상 개발하지 않습니다.

 

 

하지만, Alexey Bochkovskiy라는 러시아 연구원이 이전부터 YOLO 연구를 계속하고 있었기 때문에, Joseph Redmon이 YOLO 개발 중지 선언한 두 달 뒤 (2020.04.23) YOLO V4를 개발하고 논문화합니다. YOLO V4는 다른 글에서 설명하도록 하겠습니다. 

 

 

 

 

 

[참고한 자료]

1. PR-12. YOLOv3 이진원님 발표영상

 

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

14. Object Detection Trend (2019~2021.08)  (7) 2021.09.12
11. SSD  (3) 2020.02.06
10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06

 안녕하세요~


이번글에서는 SSD (Single Shot MultiBox Detector)라는 object detection 모델에 대해서 설명해보도록 할거에요.





<1. Motivation>


SSD는 사실 YOLO V1과 비슷한시기에 나왔어요. YOLO V1에서 grid cell 방식의 region proposal 방식이 Faster RCNN보다 훨씬 높은 FPS를 기록했다고 언급했었죠? 하지만 그에 비해 mAP는 너무 낮게 나와 고민을 안겨주었어요.




SSD는 기존 YOLO V1의 grid cell 방식의 region proposal 방식을 그대로 적용시키면서 더 좋은 mAP, FPS 성능을 기록할 수 없을까 하다가 만들어진 object detection 모델이에요.








<2. Architecture>


1) Modified VGG Net


먼저 SSD는 VGG Net을 이용해 feature extraction하려고 했어요. 하지만 VGG Net을 그대로 이용하지 않고 SSD 모델에 맞게 수정해주었어요. 아래그림에서 보면 어떻게 수정되었는지 직관적으로 이해하기 쉬우실 거에요.






2)  Remove FC layer


앞서 YOLO V2에서 FC layer를 제거시켜서 얻은 효과가 2가지였죠? 첫 번째는 object detection 모델에서 입력 이미지를 고정시키지 않아도 되는거였어요. 그리고 두 번째는 parameters (가중치) 개수의 급격한 감소로 인해 빨라지는 속도였죠.


본래 YOLO V2는 SSD 다음에 나온 모델이기 때문에 YOLO V2에서 FC layer를 제거시킨 아이디어는 SSD 모델에서 얻었을 가능성이 커요.








3) Multi-map scale feature maps


아래 SSD 모델을 보시면 detection을 하기위해 여러 feature map들이 동원되는걸 보실 수 있을거에요. 




SSD 역시 grid cell 방식으로 운영이 되는데, YOLO V1처럼 하나의 grid cell에서 고정된 개수의 default boxes (or anchor boxes)를 사용하게되요. 그러다 보니 학습을 끝낸 anchor boxes (size, aspect ratio가 정해짐) 가 각기 다른 output feature map에 적용되었을때 검출할 수 있는 객체가 다양해져요. 


예를들어 아래와 같이 하나의 grid cell에서 생성하는 anchor boxes의 크기가 동일하다면, output feature map이 작은 크기에서는 좀 더 큰 객체를 더 잘 탐지할 수 있고, 더 큰 output feature map size에서는 작은 물체를 검출할 수 있을 가능성이 커집니다. 그래서 다양한 크기의 feature map을 detection하기 위해 사용한다면 더 좋은 성능을 기대할 수 있게 되는것이죠.








4) Detection


앞서 SSD의 detection 방식은 다양한 output feature map size를 이용하는것이었어요. 이렇게 다양한 output feature map이 최종단계에서 어떻게 결합되는건지 아래 그림을 보시면 이해하기 수월하실 거에요.



각 feature map에서 anchor boxes 개수를 다르게 설정하는 이유에 대한 명확한 실명이 있다기 보다 논문에서 아래와 같이 표현한 부분에서 추정을 했는데요.


"Allowing different default box shapes in several feature maps let us efficiently discretize the space of possible output box shapes"


아마 몇몇 feature map에서 empirical 하게 box 개수들에 대해서 실험을 해봤던거 같아요. 그래서 몇몇 feature map에서는 다른 different default box shapes를 사용했다고 하는데, anchor boxes 개수가 6개인 곳은 기존 anchor boxes 4개와 2개의 다른 anchor boxes 모양이 추가됩니다.







5) NMS


위와 같이 8732x(Classes+4) features를 뽑게되면 아래와 같은 그림으로 요약할 수 있는데요. 이렇게 되면 각각의 output feature map에서 뽑은 anchor boxes 때문에 최종 단계에서 한 객체에 대해 많은 bounding boxes가 생성되게 되요. 


<사진1>


이렇게 많은 anchor boxes 중에서 NMS를 적용하여 가장 높은 class confidence score를 갖는 anchor box를 선택하게 됩니다 (NMS에 대한 설명은 YOLO V1에서 자세히 설명드린바 있으니 여기서는 넘어가도록 하겠습니다).


<사진2>


지금까지의 과정을 진행하다보면 아래와 같은 최종 SSD 모델을 보실 수 있으실거에요.









<3. Training>


전반적인 학습에 대해서는 모든 object detection이 동일하기 때문에 여기에서는 localization 학습이 어떻게 되는지 위주로 살펴보도록 하겠습니다.


1) Shape of anchor boxes


1-1) scale factor


Anchor boxes를 생성시킬 때, grid cell과 크기를 같게 하는 것이 간단하지만 대부분의 물체는 아래와 같이 aspect ratio가 다릅니다. 그렇기 때문에 aspect ratio를 다르게 하는 anchor boxes들을 생성해주어야 하는데 이때 aspect ratio의 기준이 되는 크기 먼저 선정을 해주어야 해요. 예를들어, aspect ratio=2 라고 했을 때, 그기가 4:2를 말하는건지, 3:1.5를 말하는건지 모르기 때문이에요. 그래서 scale을 2라고 설정한 aspect ratio=2라고 한다면 "4:2"의 크기의 anchor boxes를 생각해 볼 수 있겠죠.


<사진3>


SSD는 detection을 위해 6개의 feature map을 사용하는데요. 이때 각 feature map 마다 grid cell 크기가 다릅니다. 그래서 6개의 output feature map에 따라서 scale factor를 다르게 주어야 하는데요.



아래와 같은 수식을 이용하면 output feature map에 따라서 적절한 scale factor값이 도출됩니다. k=1일때 Smin 값이 나오고, k=6일때 Smax 값이 나오기 때문에 위의 그림과 연결시켜 이해하실 수 있을것 같습니다. (highest layer=⑥/ lowest layer=①)




1-2) width and height


Aspect ratio의 기준이되는 scale factor를 결정했으면, aspect ratio에 따라 anchor boxes의 width height을 결정해주어야 해요. SSD에서는 아래와같은 aspect ration(=a)를 설정하고 scale factor에 따라 아래와 같은 식을 통해 width, height을 결정해 줍니다.




지금까지 배운 식들을 이용해서 anchor(default) boxes들의 모양을 결정합니다. 그렇다면 이렇게 결정되는 anchor boxes들은 어떻게 학습하게 될까요?






2) Bounding Box regression


2-1) Select candidate anchor boxes by using Jaccard overlap


SSD는 각각의 다른 output feature map마다 anchor boxes를 생성하게되요. 예를들어, train 단계에서는 38x38x4 개의 anchor boxes가 생성되는데요. 이렇게 무수히 생성되는 anchor boxes 중에서 우리가 학습에 이용하고 싶은 anchor boxes는 ground truth와 유사한 anchor boxes에요. 



그렇기 때문에 여러 anchor boxes 중 ground truth와 유사한 IoU를 갖는 anchor boxes들에 대해서만 학습을 진행하게 되는데요. 이러한 방식을 위해서 jaccard overlap 방식을 사용해요. (SSD 논문에서는 threshold=0.5로 설정했습니다)


만약 이러한 조건이 없다면 무수한 anchor boxes에 대해서 학습할 것이고 negative examples, positive examples 비율도 맞지않고, 학습시간도 굉장히 오래걸리기 때문에 학습자체가 매끄럽게 되지 않을거에요.


<사진4. jaccard overlap>


추가적으로 jaccard overlap이 0.5 이상이라고 하더라도 분명 negative example이 존재할 수 있을거에요. 아래그림을 예를 들면 하나의 cell에 생성된 IoU가 0.5 이상인 anchor boxes가 2개 인데요. 2개를 비교했을 때 상대적으로 한 anchor box의 이미지는 negative example이라 할 수 있고, 다른 한 이미지는 positive example이라 할 수 있을거에요.

<사진5>


SSD에서는 jaccard overlap을 통해 선별된 anchor boxes들 중에서 가장 높은 confidence loss를 기준으로 positive example과 negative example의 비율을 3:1로 나누게 됩니다. (Confidence loss는 아래에서 설명할거에요~)





2-2) bounding box regression


먼저 bounding box 좌표에 대해서 학습하는 방식에 대해서 설명드릴게요.



아래식은 위의 notation만 이해하고 있으면 어렵지않아요. 아래 식들은 Faster RCNN에서의 bounding box regression 식과 대조해보면 급방 이해하실 수 있으실거에요.



또한 선별된 default(anchor) box와 class의 관계를 기반으로 아래와 같은 confidence loss를 도출하게 됩니다. (Pos: positive examples, Neg: Negative examples)



이렇게 confidence score와 bounding box 좌표식을 이용해 bounding box regression 식을 만들게 됩니다.






<4. Result>









[논문 래퍼런스]

SSD: Single Shot MultiBox Detector/ wei. L. et al/ 2016/ https://arxiv.org/pdf/1512.02325.pdf


[글 래퍼런스]

https://m.blog.naver.com/sogangori/221007697796


[사진 래퍼런스]

사진1

https://m.blog.naver.com/sogangori/221007697796

사진2

https://twitter.com/KirellBenzi/status/1039521626025541632

사진3

https://www.shutterstock.com/fr/video/clip-1013815781-people-animation-walk-video-transparent-background

https://geekgirljoy.wordpress.com/2017/10/02/ancestor-simulations-elementary-cellular-automata/

https://www.dreamstime.com/stock-photography-crocodile-cartoon-illustration-image34607912

사진4

https://medium.com/@smallfishbigsea/understand-ssd-and-implement-your-own-caa3232cd6ad

사진5

https://mypetlife.co.kr/wiki/%EA%B3%A0%EC%96%91%EC%9D%B4-%EB%94%B8%EA%B8%B0-%EB%A8%B9%EC%96%B4%EB%8F%84-%EB%90%98%EB%82%98%EC%9A%94/

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

14. Object Detection Trend (2019~2021.08)  (7) 2021.09.12
13. YOLO V3  (0) 2021.08.26
10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06

안녕하세요~


이번글에서는 YOLO V1을 업그레이드한 버전인 YOLO V2에 대해서 알아보도록 할거에요.


YOLO V2 논문에서는 YOLO V1을 3가지 측면에서 업그레이드 시켜서 논문 제목을 Better, Faster, Stronger이라고 지었는데요. 이번에는 Motivation을 따로 나누지 않고 3가지 측면을 통해 어떤 motivation이 있었고 어떠한 방법으로 해결했는지 알아보도록할거에요!





<1. Better>


YOLO V1이 이전 object detection 모델보다 속도는 굉장히 빨라졌음에도 불구하고 정확성(mAP)측면에서는 다소 아쉬움을 나타내고 있었어요. 특히 recall과 localization 성능이 낮았다라고 언급하고 있는데요. Recall이 낮았다는 말은 7x7x2 개의 bounding box에서 객체를 찾는것이 어려웠다는 뜻이고 (recall에 대한 설명은 여기 링크를 참고해주세요), Faster RCNN에서 생성하는 bounding box개수가 현저히 적기때문에 recall 성능도 낮을 수 밖에 없었어요.



논문에 언급한 "Better"의 의미는 YOLO V1보다 정확성(mAP)가 더 좋아졌다는 뜻으로 쓰였는데, 어떤 방법들을 이용해 recall과 localization 성능을 높였는지 알아보도록 할게요.




1) Batch Normaliation


YOLO V1에서 사용되고 있는 convolution layer에 모두 batch normalization을 적용시켜 mAP 2% 성능향상을 기록했어요.


Batch normalization에 대한 설명은 여기 링크를 참고해주세요.






2) High resolution classifier


YOLO V1에서 feature extraction 목적으로 사용된 CNN모델은 VGG 16 기반이에요 (YOLO V1은 중간중간 1x1 conv도 적용시켰기 때문에 온전한 VGG 16을 사용했다고 보긴 어려워요). VGG 16은 보시다시피 224 image로 resizing되어 학습을 하기 때문에 224x224 image에 대한 객체를 classification하는데 최적화되어 있어요.



<사진1. VGG 16 구조>


그런데 아래 YOLO V1을 보면 detection을 위해 input image size가 두 배더 커진것을 볼 수 있죠? 이렇다보니 448x448 image에 익숙하지 않았던 (YOLO V1에 사용된) VGG 16 기반의 CNN 모델이 detection에서는 성능저하를 일으키게되요. 



그래서 YOLO V2에서는 imageNet의 dataset에서 448x448 이미지들을 다시 학습시켜 fine-tuning 해주었는데요. 기존 224x224 보다 high resolution인 448x448 image에 대한 CNN (classification network; classifier) 모델을 재학습시켜주려고 했어요. 


YOLO V2에서는 YOLO V1과는 달리 VGG Net 기반의 모델을 사용하지 않고 자체적으로 만든 CNN 모델을 사용했는데요. 그 모델 이름이 "darknet 19"에요. (사실 darknet 19는 'Faster'라는 섹션에 있는데 여기서 설명을 해도 될 듯 싶어요)


Darknet은 19개의 layer로 구성되어 있기 때문에 논문에서는 darknet 19라고 통칭하고 있어요. Darknet 19는 처음에 224x224에 대한 imageNet dataset을 학습시키고난 후, 448x448 이미지에 대해서 재학습 시켜주어 fine tuning해주어요. 이때 learning rate를 더 적게 설정해 주는데 그 이유에 대해서는 명확한 언급이 없었어요. (그냥 empirical한 결과라고 이해하고 있어요)



Darknet 19를 이용한 결과  4% mAP 성능 향상을 볼 수 있었습니다.




3) Anchor Boxes


YOLO V2에서는 기존에 사용했던 FC layer 방식을 쓰지 않고 Faster RCNN에서 사용한 RPN방식을 사용하는 실험이 있어요. 그런데, 나중에 결과를 보면 Anchor Boxes를 사용하지 않은 경우에 mAP 성능이 더 좋았고 achor boxes를 사용하지 않은 기존 모델을 결과표에서 최종 모델로 보여주고 있어요.





논문을 읽다보면 anchor boxes를 사용하게되면 recall이 굉장히 향상되기 때문에 미래에 더 발전될 여지가 있다고 언급하는 부분이 있어요 (왜냐하면 recall이 높다는건 객체가 검출될 확률이 높으니까 mAP도 더 높게 나올 가능성이 있는거니까요).


그런데 문제는 결과표는 anchor boxes를 사용하지 않은걸 기준으로 올려 놓았기 때문에 논문에서 'yolo v2''라고 언급된 부분들을 anchor boxes가 포함된 모델로 봐야하는건지, 포함되지 않은 모델로 봐야하는건지 잘 모르겠어요. 그리고, anchor boxes를 사용하면 당연히 yolo v1보다 fps가 더 증가할거라고 생각하는데 그 부분에 대한 언급도 없는것 같았어요 (abstract에서 fps 성능을 보여주는 yolo v2는 anchor boxes를 적용시키지 않았을때의 모델 갔았어요).


정확한 판단을 위해서는 코드를 직접 들어가서 봐야겠지만, 논문만 보면 기냥 기존 yolo v1 구조에서 FC layer만 제거하고 conv layer를 추가해 13x13x30 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!작성중!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



3-1) Convolutional with Anchor Boxes


Faster RCNN의 RPN 구조를 보면 convolution 연산을 통해 RoI를 추출하는 작업을해요.  



YOLO V1은 x,y,w,h 값을 랜덤하게 설정해주고 직접 최적화된 값을 찾아가도록 학습하지만, Faster RCNN은 사전에 anchor box 9개를 설정해주고 그에 따른 x,y, aspect ratio (offset)값과 object confidence score를 계산하면 되는 구조이기 때문에 훨씬 간단하게 학습할 수 있죠 (예를들어, 아무것도 모르는 상태에서 정답을 찾아가는것 보다 어느정도 틀이 갖추어진 상태에서 정답을 찾아가는것이 더 쉽겠죠?). 


<사진2>


YOLO V2에서는 Faster RCNN과 비슷한 region proposal 방식을 사용합니다. Anchor box를 미리선정하고 사용하기 때문에 MLP 방식으로 bounding box coordinate를 추론할 필요가 없어 FC layer를 사용하지 않고 RPN과 비슷하게 convolution layer를 사용하게 됩니다. 논문에서는 5, 9개의 anchor box를 설정하고 실험을 진행했어요 (자세한 부분은 뒤에서 설명드릴게요). 


위에서 darknet 19 (=for classification)를 학습시킬 때는 448x448 이미지를 학습시킨다고 했죠? 하지만 detection을 진행할때는 입력이미지가 416x416으로 바뀌어요. 그 이유를 설명하면 아래와 같아요.


먼저 제일 마지막 pooling layer 이후를 모두 지워줍니다. 그 이유는 7x7 grid cell은 너무 크기가 작기 때문에 사실상 low resolution 상태에서 detection하는것과 같아요. 또한 YOLO V1 에서 적용한 bounding box 개수를 보면 7x7x2 = 98 개인데, 이 개수가 recall 관점에서는 터무니 없이 적은 bounding box 개수라는걸 확인할 수 있어요. 그래서 anchor box 개수를 5개로 설정하여 기존보다 3개 더 많은 bounding box를 설정해주고, 7x7 보다 더 큰 feature map size (higher resolution) 인 13x13 (어떻게 13x13이 되는지 뒤에서 설명) 로 설정하게 되면 13x13x5 = 845 개의 bounding box를 사용할 수 있기 때문에 더 많은 recall을 얻을 수 있었어요. 하지만 mAP 성능에서는 오히려 더 낮은 mAP를 기록했다고 합니다.



YOLO V2에서는 output feature map이 짝수x짝수가 되는게 좋지 않다고 생각했는데요. 그 이유는 보통 물체가 이미지의 중앙에 있는 경우가 많다보니 홀수x홀수 로 최종 output feature map을 설정해주는게 더 좋다고 합니다. 그래서 14x14가 아닌 13x13으로 맞춰주기 위해서 448x448을 416x416으로 변경해주었다고 하네요.


        



아래그림이 detection시 사용되는 YOLO V2구조의 앞부분이라고 보시면 됩니다.


<사진3. YOLO V2 구조 for detection>



3-2) Dimension Clusters


Faster RCNN에서 사용한 anchor box는 사전에 aspect ratio와 size를 달리하여 9개의 숫자로 미리 정해주었어요 (hand pick). YOLO V2에서는 anchor box를 적용시킬때 단순히 aspect ratio, size를 통해 미리 정해준 anchor box를 사용하는것이 문제가 있다고 판단했어요.


그래서 "we run k-means clustering on the training set bounding boxes to automatically find good priors"라고 언급했는데요. 이 이야기는 training dataset에 있는 ground truth bounding boxes에 k-means clustering 방법을 사용하여 최적의 anchor boxes를 찾겠다는 뜻이에요.


K-means clustering은 본래 euclidean distance를 사용하여 구하는데요. 아래 예시를 한 번 살펴볼게요. 

먼저,

step1. k=3이라고 설정을 하면 임의의 data 3개를 지정합니다. 그리고 각 3개의 데이터를 기준으로 3개의 다른 영역들을 구성하게되죠. 

step2. 3개의 다른 영역을 나눌때, 지정된 3개의 data에서 가장 가까운 (euclidean distance 이용) data들을 계산해 각각의 그룹을 형성합니다.

step3. 해당 그룹내에서 데이터들간의 위치를 계산하여 그룹내에서 평균을 냅니다. 그리고, 그 평균을 기준으로 step2의 방식을 적용하여 다시 3개의 그룹을 형성하게되죠.

step4. step2~3을 반복하다보면 최적화된 clustering을 만들게 됩니다.


<사진4>


그런데 최적의 anchor box를 찾을때 euclidean clustering 기준으로 k-means clustering 방식을 적용하면 문제가 생깁니다.


아래 그림에서 파란색 부분은 ground truth bounding box라고 하고, 빨간색 부분은 예측된 anchor box라고 할게요. 아래 왼쪽 그림을 봤을 때, bounding boxes가 비슷함에도 불구하고 중심점끼리의 차이가 많이 나기 때문에 예측된 anchor box는 실제 ground truth와 유사함에도 불구하고, 무시되거나 같은 group이라고 보지 않을 가능성이 많아요. 반면에 euclidean distance를 기준으로 grouping을 하면 아래그림의 중간, 오른쪽과 같이 ground truth와 전혀 엉뚱한 anchor boxes이 grouping될 확률이 높아집니다.



그래서 논문에서는 IoU개념을 이용해서 distance metric라는 방식을 제안했는데요. 다시말해, K-means clustering 방식을 적용하여 최적의 anchor boxes를 추출할때, euclidean distance가 아닌 IoU를 적용한다는 뜻이에요. 



IoU를 기준으로 하여 clustering을 적용하면 training dataset에 있는 ground truth bounding boxes들의 평균을 잘 계산해주어 더 좋은 anchor boxes를 추출할 수 있게 됩니다.









3-3) Direct location prediction


RCNN에서  bounding box regression에 대해서 설명드린바있죠? (링크)


Fast RCNN, Faster RCNN 모두 같은 bounding box regression 식을 이용하는데요. 짧게 설명드리면 d함수를 학습시켜 P (predicted bounding box)의 (x,y,w,h)를 조정해주는거에요.



그런데 문제는 d라는 함수에 제한이 없기 때문에 predicted bounding box가 아래와 같이 하나의 cell을 벗어나 형성될 수 있게되는데요. 특히 초기에는 d함수가 학습도 제대로 되어 있지 않기 때문에 문제가 더 심각할거에요.



그래서 아래와 같은 방식으로 bounding box regression 식을 변경시켜주었는데요. 아래의 notation을 먼저 설명해드리면 아래와 같아요. 




위의 수식에서 중요한건 시그모이드 함수와 tx, ty tw, th에요.


YOLO V2는 5개의 anchor boxes를 적용시킨다고 말씀드렸죠? 5개의 anchor boxes 각각의 좌표를 tx, ty, tw, th라고해요. 그래서 Faster RCNN에서는 d함수를 학습시켰다면, YOLO V2에서는 t에 대해 학습을 시켜주게 됩니다. 


Ground truth 좌표값과 predicted anchor box에 속하는 t가 서로 regression하면서 b와 ground truth의 차이가 0이 되게 수렴하는 predicted anchor box 't'가 학습이 될거에요. 그런데 시그모이드 함수를 적용하지 않으면 predicted anchor box는 Faster RCNN에서 제기된 문제처럼 cell의 아무곳에서나 생성될거에요.


그런데 sigmoid function을 적용해주면 tx, ty의 범위가 0~1로 바뀌기 때문에 predicted bounding box가 초기에 그려지는 범위가 해당 cell 영역에 제한될거에요. 이렇게 된다면 초기 학습에 시간을 낭비할 필요도 없고, 더 좋은 anchor box를 그려주도록 할거에요.





YOLO V2는 이러한 anchor boxes 방식 (위에서 언급한 3가지 기술)을 적용시켰을 때 5%의 성능향상이 되었다고 기술했어요 (그런데 이 성능이라는 것이 mAP를 말하는건지, 단순히 recall을 말하는건지 잘 모르겠네요;;;;)





4) Fine-Grained Features


상대적으로 작은 feature map에서는 작은 크기의 객체에 대한 localization 작업이 힘들수 있어요. 그래서 조금 해상도를 높여 (feature map size를 증가시켜) 작은 객체또한 잘 detection할 수 있도록 하기위해 고안된 방법이 fine-grained features에요 (사실 이 기술은 SSD object detection에서 주로 사용된건데 다음글에서 SSD에 대해 설명하도록 할게요!)




YOLO V1과 달리 YOLO V2의 최종 output feature map은 13x13의 크기를 갖고 있는데요. 이러한 13x13 output feature map보다 조금 더 큰 26x26 output feature map 위에서 bounding box 작업을 진행하게 됩니다.





아래와 같이 최종 feature map에서 적용한 13x13x512의 channel수를 기준으로 26x26에서도 같은 channel수를 유지하여 13x13 output feature map에서 다루어지는 정보들 (512)와 동일하게 설정해주되, 26x26에서는 4등분을하여 적용시켜주게 됩니다.


<사진5>


<사진6>


그렇다면 최종적으로 아래와 같은 YOLO V2 구조를 생각해 볼 수 있겠네요.



마지막 13x13x125에서 125의 의미는 YOLO V1과 동일하게 생각하면 되실것 같아요. YOLO V1은 classification과 localization이 동시에 적용되기 때문에 2개의 bounding box가 각각의 cell에 대해 classification 결과를 공유했는데요. YOLO V2에서 anchor box를 적용시켰을때에는 각각의 anchor box에 대해서 classification 정보를 갖고있다보니 아래와 같이 하나의 anchor box에 대해 25가지 정보를 구성하게 되었어요. 그래서 총 5개의 anchor boxes를 적용했다고 가정했을 때 하나의 cell에서 총 5x25 =125개의 정보를 갖고 있게 되기 때문에 125개의 channel을 사용하게되요.



아래그림을 보면 125 channel에 대해 gray scale로 visualization한 것을 볼 수 있는데요. 하나의 anchor box에 25개의 정보가 담겨져있고, 앞부분 5개는 anchor box정보(x,y,w,h and object confidence score)이고, 뒷 부분은 20개의 classes에 대한 activation map을 보여주고 있어요.


<사진7>




<사진8>


지금까지 방식을 적용시켰을때 기존의 YOLO V1보다 더 좋은 성능을 기록하게 되었어요.





5) Multi-Scale Training


추가적으로 YOLO V2는 하나의 image scale에 대해서만 학습시키는 것이 아니고 다양한 image scale에 대해서 학습을 시켜요. 


논문에서 제시한 방식은 320, 320+32=352, 320+32*2=384, ..., 320+32*9=608 의 이미지로 training 시키려고 했는데요. 32씩 증가시킨 이유는 YOLO가 본래 이미지 사이즈에서 1/32 만큼 줄인 output feature map을 추출하기 때문이에요. YOLO V2는 10 batches 마다 input size를 변경시켜 학습을 시키게 됩니다.




이렇게 multi-scale로 학습시켰을때 아래와 같은 결과를 얻을 수 있었어요. Test 단계에서 input size를 다르게 설정할 수록 mAP와 FPS의 성능이 변하는걸 알 수 있어요. 당연히 output feature map의 size가 달라지기 때문에 anchor boxes 수도 달라질 거고, 그에 따라서 mAP, FPS 성능도 달라질거에요.







<2. Faster>


지금까지 YOLO V2가 변한 과정을보면 여러 기법들이 사용되었고 동시에 anchor boxes가 사용되었다는 점이에요. 그런데 생각해보면 faster RCNN과 유사한 anchor boxes 개념을 사용하게되면 FPS 성능이 YOLO V1보다 더 나빠져야 하는데, 더 좋아진 이유는 무엇일까요?



1) Darknet 19


YOLO V2가 더 빨라진 이유는 CNN 모델로 쓰인 darknet 19에 있어요. 기존 YOLO V1과 다른점은 FC layer를 제거했다는 점이에요. YOLO V1에서 쓰인 구조를 잠시보면 FC layer에서 7x7x1024x4096+4096x7x7x30이라는 weight가 사용이되요. 거의 YOLO V1에서 쓰이는 대부분의 가중치가 FC layer에 국한되어 있다고 보시면되요.



하지만 YOLO V2에서는 FC layer를 제거함으로써 가중치 파라미터수를 급격하게 낮췄기 때문에 더 빠른 속도로 detection이 가능하게 되었어요. 이것을 가능하게 했던 또 하나의 이유는 global average pooling이라는 기술인데요. Darkenet 19에서는 7x7x1024 feature map에 1x1x1024 conv filter를 1000개 적용시켜, 7x7x1000개를 만들어줘요 (1000개가 뜻하는바는 imageNet dataset의 class가 1000개 이기 때문이에요. 즉, 1000개의 classes에 대해서 classification 하겠다는것이죠. 그리고 나서 7x7x1000 feature map에 대해서 global average pooling을 하게되면 YOLO V1에서 언급했던 7x7x1024 feature map 이후에 사용된 가중치는 1x1x1000 이 됩니다 (YOLO V1:  7x7x1024x4096+4096x7x7x30  VS  YOLO V2: 1000). 실제 detecetion에서는 크기도 13x13 feature map으로 바뀌고 26x26 feature map과 concatenation하는 부분이 있어 가중치가 개수가 조금 달라지지만 여전히 FC layer와는 비교도 안되는 수의 가중치 개수를 갖게됩니다.



<사진9>






<3. Stronger>


논문 제목을 보면 YOLO9000이라고 되어있죠? 왜 9000이라는 숫자를 제목에 붙였을까요? YOLO V1은 pascal VOC dataset에서 제공되는 20개의 classes를 기준으로 학습하기 때문에 20개의 classses에 대해서밖에 detection을 하지 못했어요. 하지만 YOLO V2에서는 9000개의 classes에서 detection을 할 수 있도록 해주었는데요. 이러한 놀라운 성과를 갖었기 때문에 논문제목을 YOLO9000이라고 붙였어요.



이 부분에 대해서는 자세하게 언급을 하진 않으려고 합니다. 이유는 Object detection 모델 아키텍처를 구성하는데 필요한 지식이 아니고 단지 detection하는 label을 어떻게 늘릴 수 있는지에 대해서 설명한 것이기 때문이에요 (아 물론 output feature map의 size가 달라질수는 있겠네요). 간단하게 이야기하면 ImageNet dataset에는 2만개 넘는 라벨링이 있는데요. 그 중에서 9000개를 가져오고 COCO dataset에서 대략 300개 정도되는 라벨을 갖고와서, 약 9300개의 classes에 대해서 detection할 수 있도록 구성하게 됩니다.



지금까지 YOLO V2에 대해서 알아보았어요. YOLO V3를 설명하기 전에 SSD라는 object detection 모델을 설명하려고 하는데요. 그 이유는 YOLO V3에서 사용된 중요한 개념중에서 SSD에서 쓰인 방식이 적용된 부분이 있기 때문이에요 (paper 순서는 YOLO V1 -> SSD -> YOLO V2 입니다) ~


그럼 SSD 모델에서 뵐께요~



[논문 래퍼런스]

YOLO9000: Better, Faster, Stronger/ Joseph. R/ 2017/ https://arxiv.org/abs/1612.08242


[사진 래퍼런스]

사진1

https://bskyvision.com/504

사진2

https://towardsdatascience.com/yolov1-you-only-look-once-object-detection-e1f3ffec8a89

사진3

https://www.researchgate.net/figure/The-architecture-of-YOLOv2_fig4_336177198

사진4

https://en.wikipedia.org/wiki/K-means_clustering

사진5

https://www.slideshare.net/JinwonLee9/pr12-yolo9000

사진6

https://www.etsy.com/il-en/listing/692367997/dog-brick-puzzle-boxset-size-26x26-cm

사진7

https://www.youtube.com/watch?v=vw1R5JXvXi0&feature=youtu.be

사진8

https://www.researchgate.net/figure/4-Number-of-images-for-each-class-in-PASCAL-VOC-2007-dataset_tbl3_257998995

사진9

https://towardsdatascience.com/review-nin-network-in-network-image-classification-69e271e499ee

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

13. YOLO V3  (0) 2021.08.26
11. SSD  (3) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06
7. Fast RCNN  (2) 2020.02.06

안녕하세요~ 


지난번 글까지는 RCNN 계열 (RCNN - Fast RCNN - Faster RCNN)에 대해서 알아보았어요. 


이번글부터는 새로운 object detection 방식인 YOLO에 대해서 알아보도록할게요. 자세히 보시고 Faster RCNN과 어떤차이가 있는지 살펴보시면 좋을거 같아요!





<1. Motivation>


1) Low FPS


Faster RCNN 논문에서 언급된 fps 성능은 5fps에요. Detection 성능인 mAP는 높은 수준을 유지하고 있지만 낮은 fps 성능 때문에 real-time (30fps) 수준에 한참 미치지 못하는 결과를 볼 수 있었어요.



Faster RCNN의 순서도를 보면 아래와 같다고 할 수 있는데요. classification을 하려면 RoI를 먼저 선행되어야 한다는 단점이 있어요. 그러다보니 'detection 성능은 조금 떨어뜨리더라도 높은 fps 성능을 갖는 object detection 모델을 구현해볼 수 없을까?'라는 질문을 하게 됩니다.



그래서 만든 object detection 모델이 YOLO에요. YOLO의 architecture를 먼저 간단하게 보시면 아래와 같은데요. Faster RCNN과 달리 Bounding box를 선별하는 localization 작업과, classification 작업이 동시에 수행되어 최종 detection 결과를 보여주는걸 보실 수 있어요. 



결과적으로 아래와 같은 구조차이로 인해 YOLO의 fps가 더 높게 나올 수 있게 됩니다.



그럼 지금부터 YOLO가 어떻게 동작하는지 디테일하게 알아보겠습니다.








<2. Architecture>


Step1 - Feature map(Grid Cell) extraction


다른 Object detection 모델처럼 CNN을 통해 feature map (=SxS)을 추출합니다. 논문에서는 7x7의 feature map을 추출했고, feature map을 grid cell이라는 용어를 사용하여 표현합니다. 왜 7x7이냐라는 질문에는 명확한 답을 내놓을것 같지는 않고 단지 empirical result일거라는 생각이 드는데요. 



Grid cell의 기준을 홀 수 (=7) size로 선정한 이유는 대부분 이미지에서 물체들이 중앙에 위치할 확률이 높기 때문인거 같고, 7x7 보다 크거나 작은 홀 수 size로 설정한 수 있지만 7x7보다 크면 더 많은 bounding box가 생성되기 때문에 fps성능이 떨어질것이고, 7x7보다 작으면 더 적은 bounding box가 생성되기 때문에 mAP 성능이 낮아질것이라고 추측되기 때문에 실험적으로 제일 적당한 사이즈를 찾은게 아닌가 싶어요.


<사진1>

 

또한 YOLO는 Conv layer를 적용시킬 때, 1x1 conv filter를 이용하여 channel reduction을 수행하였고, 이를 통해 연산의 효율성도 증가시키게됩니다. GoogLeNet의 아이디어에서 영감을 받았다고 하네요. (아래 filter notation이 혼동이 될 수 있는데, 첫 번째 layer를 보면 실제로 7x7x3 filter를 64개 적용한 모습이라고 한다면 그 다음 layer의 filter notation을 이해하실 수 있으실거에요)


한 가지 의아한점은 x4, x2로 반복되는 구조가 있는데 이 부분을 쓴이유는 대게 non-linearity를 증가시키기 위해서일텐데, 이게 과연 얼만큼의 효과를 내고 있는건지는 모르겠네요. 오히려 불필요한 반복으로 parameter가 많아진거면 overfitting의 역효과를 불러 일으킬 수 있을거 같기도 하거든요 (뭐 제가 제기하고 있는 질문들도 충분히 고려해서 여러 실험을 진행한거라고 믿고 있습니다만.) 그리고, FC layer도 굳이 두어야 했나라는 의문도 들게 되는데요. SSD라는 모델은 나중에 FC layer제거한 object detection 모델을 만들게 됩니다 (이 부분은 SSD모델을 다룰때 더 자세히 설명드릴게요!) 









Step2 - Bounding box & Classification information 구축 (7x7x30 Grid cell)






YOLO V1에서는 각각의 Grid cell에서 2개씩 bounding box를 생성 (= predicted bounding box = RoI)시켜요. 이과정에서 bounding box 정보(x,y,w,h)와  confidence score정보를 생성하게되는데요. 


x,y: 각각의 cell 안에서의 위치 

(cell 위치내에서 가운데에 있을수도 있고, 약간 오른쪽으로 이동할 수 있음, 아래그림에서 초록색 점이 cell위치 x,y를 의미)

w,h: bounding box의 높이와 넓이

confidence score: bounding box에서 object가 포함되어 있을 확률 (어떤 class에 속하는지를 말해주는것이 아닌 단지 bounding box내에 객체가 포함되어 있는지 아닌지 추론)


(Training시에 predicted bounding box와 입력데이터에 포함되어 있는 ground truth들의 IoU에 따라 학습이 진행되는데요. 이렇게 학습하다보면 neural network가 object라고 하는 녀석들의 특성을 파악하게 될거에요. 그렇게 학습된 neural network가 test시에 적용되어 bounding box내에서 object가 있는지 없는지에 대한 확률값을 생성하게 됩니다 -> 학습 과정은 뒤에서 자세히 설명할게요~) 




동시에 각 cell이 어느 classes(categories)에 속해있는지 classification 작업을 해줍니다. 이때 각 cell의 확률값은 조건부 확률로 주어지는데 즉, 객체가 있을 확률에 대해 어떤 클래스일지 판단하는 확률값입니다 (극단적으로 이야기하자면 객체가 있을때 그 객체가 어떤 클래스인지 판단하는 조건부 확률이라고 보시면 되겠네요)


 

이러한 과정을 하나의 그림으로 설명할 수 있는데요. 아래와 같이 각각의 cell에는 총 30개의 정보가 담겨져 있어요. 앞에서 말했듯이 하나의 bounding box에 대한 좌표정보(=x,y,w,h)와 confidence(=P(object))정보가 총 2개 (=2x5) 들어있고 (bounding box는 각 cell마다 2개씩 생성되기 때문에), 나머지 20개의 정보는 Pascal VOC challenge가 20개 class에 대해서 detection작업을 하는것이기 때문에, 20개의 class에 대한 classification 확률값을 담게 됩니다.


<사진2>


<사진3>





Step3 - NMS (Non Maximum Suppression)


Bounding box정보((x,y,w,h), P(object))와 classification 정보(P(class|object))를 담고있는 grid cell을 구축했으니 grid cell을 이용한 최종 detection 작업순서를 설명드릴게요.





7x7 grid cell 각각에 대해서 2개의 bounding box 정보와 20개의 classification 정보가 담겨있어요. 그리고 두 개의 정보가 어떻게 이용되는건지 아래와 같이 나와있어요. 


먼저, 첫 번째 cell에서 얻고자하는 결과는 20x1 tensor에요. 20x1 tensor에는 해당 cell에서 20개의 class에 대한 score(확률값)을 알려줍니다. Class에 대한 score(확률값)은 아래와 같은 과정을 통해 얻을 수 있어요.




<사진4>


각 cell에 대해서 위와같은 작업을 모두 진행하면 아래와 같은 결과를 얻을 수 있게 됩니다.


<사진5>


위에서 얻은 정보를 통해 detection하는 과정에 대한 설명을 아래의 그림으로 대체하겠습니다.


<사진6>


위와 같은 작업이 끝났다면 최종 마무리 작업을 하게 됩니다. 


- 특정 cell 위치에 해당하는 하나의 bounding box에서 가장 높은 score(확률값)을 갖는 class를 골라줍니다. 

- 특정 cell 위치에 해당하는 하나의 bounding box에서 가장 높은 score(확률값)이 0이 넘는다면 선택된 class와 매칭되는 color와 score를 그려줍니다.


<사진7>


아래 그림은 최종 detection 결과입니다.


<사진8>





<3. Training>


YOLO의 cost(loss) function은 아래와 같이 여러 요소들에 대한 regression 문제들을 전부 더하기 연산으로 통합시킨것을 볼 수 있을거에요. 즉, localization문제(=localization regression)와 classification문제(=classification regression)를 하나로 통합한 하나의 regression 모델을 만들었다고 볼 수 있는데, 이때문에 'You Only Look Once (for detection)'이라는 명칭이 붙여졌습니다.



위의 여러 regression에 대해서 알아보기 전에 기본적인 hyperparameter에 대해서 알아보도록 할게요. 

1이라고 표기된 부분은 ground truth와 predicted bounding box (RoI)의 IoU를 기점으로 객체가 포함되어 있는지 여부를 알려주는 함수라고 생각하시면되고, 람다라고 표기된 부분은 객체가 포함되어 있다면 5라는 learning rate을 주는 개념으로 알고있으면 될 것 같습니다. 이렇게 5, 0.5로 구성한 이유는 대게 7x7 cell 중에 객체가 아니라고 하는 cell이 더 많을 텐데 이러한 cell들에 대해 학습을 진행하다보면 negative example에 대해서만 neural network가 학습할 가능성이 큽니다. 즉, 우리가 원하는건 해당 객체 (positive example)에 대한 detection이지 negative example에 대한 detection이 아니기 때문에 아래와 같이 learning rate 값을 다르게 주게 됩니다.




1) Regression of bounding box


1-1) Regression of bounding box coordinate in a cell 


먼저 bounding box의 중점이 되는 좌표값에 대한 regression 식이에요. 결과부터 말씀드리자면 학습을 통해 아래 그림처럼 빨간색 좌표에서 초록색 좌표로 이동하는 것을 볼 수 있어요.


아래식을 해석하자면 i번째 cell에 속하는 j번째 bounding box에서 ground truth가 존재한다고 했을때 (존재 여부는 predicted bounding box와 ground truth의 IoU가 기준이 됩니다), ground truth의 x,y좌표와 predicted bounding box의 x,y좌표에 대해 regression을 진행합니다.





1-2) Regression of bounding box width and height in a cell


위와 동일한 개념이지만 루트를 씌워준 이유는 아래와 같습니다.

하나의 cell 안에서 ground truth와 predicted bounding box의 차이가 많이 나봤자 하나 cell 영역범위에 제한적이다보니 차이값이 크게 나지 않습니다.


논문에서는 small deviation in large boxes 라고 표현했는데요. 명확하게 이해되지 않는 부분이 있어서 아래와 같이 제 생각을 정리해봤어요. (설명이 틀릴수 있으니 주의해주세요!)


하지만 bounding box의 width, height의 넓이는 cell의 범위와 다르게 다양하게 형성될 수 있어요. 즉, 생성된 predicted bounding box가 큰 객체의 ground truth와 비교했을때는 굉장히 큰 error값이나오고, 작은 객체의 ground truth와 비교했을때는 상대적으로 작은 error 값이 나올 수 있어요. 그러다보면 큰 object 위주로 학습을 할 가능성이 있기 때문에, 루트를 씌워죠 이러한 문제를 피하고자 한거같아요.






2) Regression of bounding box score prediction


2-1) Regression of bounding box score prediction when there is object in a cell


Predicted bounding box가 학습에 따라 변하면 ground truth와 비교해가면서 특정 cell에 bounding box가 존재하는지 (confidence score)를 학습하게 될거에요.



아래와같은 cost function으로 인해 점점 bounding box는 ground truth에 근접하게 이동하도록 유도 될거에요.


2-2) Regression of bounding box score prediction when there isn't object in a cell


각각의 cell에 대해서 predicted bounding box와 ground truth를 비교하다보면 IoU가 현저하게 낮게 나오는 경우가 있어요. 이럴때는 보통 해당 cell에 객체가 없다고 판단하는데요. 이러한 negative example에 대해서는 learning rate를 굉장히 낮게주어 positive example 위주로 학습이 되도록 방햐을 설정해줘요.




3) Class score prediction


마지막으로는 classification 작업에 대한 regression이에요. Training 이미지 데이터에는 특정 cell에 어떤 class가 있는지 알 수 있어요. 만약 학습 이미지를 입력받았을때, i번째 cell에서 20개의 클래스 중 j번째 클래스에 속해 있다고 하면 아래와 같이 표현할 수 있을거에요.



CNN이 학습이 잘되었다면 해당 cell에서 ground truth가 아닌 class에 대해서는 0과 가까운 값을 도출할거에요. 그래서 해당 cell에서 ground truth인 class에 대해서는 p^값을 점점 높여주는 방향으로 학습할거고, ground truth가 아닌 class에 대해서는 점점 낮은 방향으로 p^값을 업데이트 해줄거에요.



지금까지 설명드린 내용을 요약하면 아래의 그림으로 보여드릴 수 있을 것 같아요.








<4. Result>








YOLO V1은 Real-time을 실현시켰다는 획기적인 성과가 있었지만, 정확도 (mAP) 측면에서는 기존 object detection model (Faster RCNN) 보다는 낮게 나오기 때문에 문제가 되었습니다.


다음장에서는 이러한 문제점을 개선한 YOLO V2에 대해서 알아보도록 하겠습니다.




[논문 래퍼런스]

You Only Look Once: Unified, Real-Time Object Detection/ Joseph. R/ 2016/ https://arxiv.org/abs/1506.02640


[글 래퍼런스]

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


[사진 래퍼런스]

사진1

http://codexbaram.com/%EB%A9%94%ED%83%80-%EC%A7%80%EC%8B%9D-%EB%82%AF%EC%84%A0-%EC%9D%B4%EB%AF%B8%EC%A7%80/

사진2,4

https://www.slideshare.net/xavigiro/object-detection-d2l4-2017-upc-deep-learning-for-computer-vision

사진3

http://openresearch.ai/t/yolo-you-only-look-once-unifed-real-time-object-detection/67

사진4

https://pylessons.com/YOLOv3-introduction/

사진5,6,7

http://blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220993971883

사진8

https://sandipanweb.wordpress.com/2018/03/11/autonomous-driving-car-detection-with-yolo-in-python/

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

11. SSD  (3) 2020.02.06
10. YOLO V2  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06
7. Fast RCNN  (2) 2020.02.06
6. SPP Net  (2) 2020.02.05


안녕하세요~


이번글에서는 Fast RCNN의 업그레이드 버전인 Faster RCNN에 대해서 알아보도록 할거에요~



<1. Motivation>


Fast RCNN은 SPP-Net과 RCNN의 시간을 굉장히 감소시켰을에도 불구하고 아직도 realtime을 수행하는데 어려움이 있었습니다. Real-time을 수행하려면 "1/30초 = 30 fps"가 소요되어야 하는데 2.3초는 realtime을 수행하는데 큰 무리가 있어요. 그런데 자세히보면 region proposal을 수행하는시간이 전체 Fast RCNN을 수행하는데 대략 87(=(2.3-0.32)/2.3)%나 차지하고 있어요. 


<사진1>


Fast RCNN의 region proposal 방식인 selective search는 Fast RCNN 네트워크 내부에 있는게 아니에요. 예를들면, CNN을 통해 feature map을 추출하면 region proposal을 적용해 RoI를 추출해야 하는데 이때 selective search는 외부에서 계산된 관련정보를 Fast RCNN 네트워크에 있는 feature map에 전달해주어 RoI pooling을 적용하게 되는거에요. 


외부에서 들어오는것이기 때문에 문제가 되는것도 있지만, selective search 자체는 cpu에서 계산되기 때문에 시간소요가 굉장히 많아요. 그렇기 때문에 selective search와 같은 region proposal 방식을 바꿔주어야 할 필요성이 제기되었어요.

<사진2>





<2. Architecture>


Faster RCNN의 구조는 Fast RCNN과 유사해요. 단지 region proposal 방식이 selective search 방식에서 region proposal network (RPN) 방식으로 바뀐것 뿐이에요. 그래서 Faster RCNN 구조에서는 다른 부분은 크게 언급하지 않고 RPN이 어떻게 동작하는지를 살펴보도록 할거에요.




1) Region Proposal Network (RPN)


Faster RCNN에 CNN을 이용할때 VGGNet과 ZFNet을 이용하는데요. 여기에서는 ZFNet을 기준으로 RPN이 동작하는 방식을 설명드릴게요.



① CNN을 통해 추출한 feature map 13x13x256에 3x3x256 conv filter를 적용한다. 

② 3x3영역을 기준으로 center 지점에서 9개의 anchor box를 생성한다 (13x13 feature map을 기준으로하면 13x13x9 개의 anchor가 생성됨). 하나의 3x3 conv filter 영역에서 output으로 나오는 연산량은 256x9 이다.

③ 9개의 anchor 각각에 대해서 object가 포함되어 있는지 아닌지에 대한 classification 작업이 진행된다. 주의할점은 anchor내의 class가 무엇인지 classification하는게 아니라 객체인지 아닌지 classification을 하는작업이다. 이 작업을 마치면 output으로 나오는 연산량은 256x9x2 이다 (2= object or non object)

④ 9개의 anchor 각각에 대해서 bounding box regression을 한다. 이때 좌표정보로 4개의 요소 (x,y,높이,넓이)가 사용되기 때문에, 이 작업을 마치면 output으로 나오는 연산량은 256x9x4 가 된다.

⑤ Classificaton(object인지 아닌지)과 bounding box regression은 동시에 수행되므로 RPN의 loss function은 아래와 같이 더하기 연산으로 진행된다. 그렇기 때문에 하나의 3x3 conv filter 영역으로부터 생성되는 최종 output 파라미터수(연산량)는 256x9x2+256x9x4 가 된다. 

 

(loss function에 대한 자세한 설명은 뒤에서 할게요~)


대략적으로 아래와 같은 매커니즘을 갖고 연산이 진행되는거 아닌가라는 생각이 들어요. (더 자세한건 코드를 봐야겠지만요)









2) Translation Invariant Anchor and Multi-scale anchors


이부분은 MultiBox라는 모델에 대한 이해가 있어야 해요. 하지만 간단히 설명하면 '객체의 translation 이동이 anchor box가 이동한 객체를 찾는데 영향을 미치진 않는다' 정도로 이해하고 있으면 될 것 같네요.


<사진3>



또한 RPN의 anchor box의 특징으로는 3 different size, 3 different aspect ratio 를 적용하여 다양한 9개의 anchor box를 제공하고 있어요. 그래서 좀 더 정확한 localization 성능을 얻을 수 있게 된답니다.


<사진4>



이러한 RPN 방식을 통해서 selective search (ss) 방식보다 더 적은 RoI를 추출할 수 있게되어 시간도 굉장히 절약했고, mAP 조차도 더 높게 나왔다는 것을 볼 수 있습니다.






<사진5>








<3. Training>


먼저 RPN에서도 학습을 시키기전에 positive example과 negative example을 나누게 되는데요. Feature map 위에는 객체정보가 담긴 여러 ground truth가 있을거에요. 위의 RPN 동작 방식에서 설명드릴것 처럼 feature map위에서 3x3 conv가 이동하면서 여러 anchor들을 생성하게 되는데, 보통 하나의 ground truth 위에 여러 anchor들이 생겨날거에요. 이 중에서 IoU가 높은 순서대로 positive example에 넣고, 0.3 이하는 negative example이라고 설정합니다. (0.7 이상으로 positive example을 삼을 수 있긴한데, 만약 어떤 ground truth위에 생성된 anchor들이 대부분 0.7 미만이면 positive example이 없을 수 도 있기때문에 이런 방식은 쓰지 않았다고 해요)


아래 방식은 미니 배치 방식으로 학습시키는 RPN loss funciton을 나타내고 있어요.


의미는 RCNN, Fast RCNN의 bounding box regression가 같다고 볼 수 있고 단지 배치단위로 normalization한것만 추가 되었다고 보시면되요 (논문에서는 이런 normalization 효과가 크지 않은거 같다고 이야기 하기 때문에 그냥 RCNN, Fast RCNN에서 쓰이는 bounding box regression을 그대로 가져 왔구나 생각하시면 될거 같아요).


i: index of an anchor in a mini-batch

pi: the predicted probability of anchor i being an object

p*i: Ground truth label is 1 if the anchor is positive, 0 negative

ti: vector representing the 4 parameterized coordinates of the predicted bounding box

t*i: ector representing the 4 parameterized coordinates of the ground truth box (associated with positive anchor)

Lcls: log loss over two classes (object vs not object)

Lreg: smooth function (same with Fast RCNN Lreg) <- if p*i=0, disabled

Ncls: Mini-batch size = 256

Nreg: Nreg~2400 = the number of anchor locations





1) Sharing Features for RPN and Fast RCNN


Faster RCNN은 RPN+Fast RCNN 의 조합이라고 할 수 있어요. 

하지만, 처음부터 RPN을 처음부터 Fast RCNN 네트워크에 내장시켜 학습을 시키는건 아니에요.


처음에는 RPN과 Fast RCNN을 분리해서 학습을 시켜요.


① Pre-trained CNN model (M0)을 가져와서 RPN을 ImageNet 데이터로 학습을 시킨다. (학습된 RPN=M1)

② 학습된 RPN (M1)에서 RoI(P1)을 추출한다. 

③ Pre-trained CNN model (M0)와 RPN에서 학습된 RoI(P1)을 적용시켜 Fast RCNN를 학습시킨다. (M2=학습된 Fast RCNN)

(1~3번 과정 모두 CNN이 학습이 됨)


<사진6>


④ 학습된 Fast RCNN(M2)를 이용해 RPN을 다시 학습시킨다. (재학습된 RPN=M3)

(실제로는 Fast RCNN과 RPN은 독립적으로 학습이 됨, 하지만 이때부터 CNN은 따로 학습시키지 않음. 즉, Fast RCNN에서 사용되는 CNN을 그대로 가져와서 RPN에 적용시키는 꼴 -> feature map에서 region proposal network로 가는 filter들만 학습 -> CNN을 share하게 됨)




⑤ 재학습된 RPN에서 RoI(P2)를 추출한다.

⑥ 추출된 RoI(P2)와 재학습된 RPN(M3)을 다시 Fast RCNN에 학습을 시킨다.


CNN을 share하고 있는지 없는지에 대한 차이만 존재할 뿐 1~3번과 4~6번의 작업은 동일하다고 보시면 되요.





<사진7>







<4. Result>







지금까지 Faster RCNN을 알아보았어요. Faster RCNN 역시 RCNN 계열 (RCNN-Fast RCNN-Faster RCNN)로써 좋은 성능을 보여줬는데요. Test time을 0.2초로 줄였음에도 불구하고 아직도 real-time을 가능하게 했다고 말할 수준은 아닌거 같아요 Real-time: 1/30초 = 0.03초).


그래서 다음글에서는 real-time performance를 가능하게 한 RCNN 계열이 아닌 YOLO라는 object detection 모델에 대해서 소개할게요!






[논문 레퍼런스]

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks/ Ross. G. et al/ 2016/ https://arxiv.org/pdf/1506.01497.pdf 


[사진 래퍼런스]

사진1,6,7

https://www.youtube.com/watch?v=kcPAGIgBGRs

사진2

https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220776743537&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진3

https://www.onlinemathlearning.com/reflection-rotation.html

사진4

http://incredible.ai/deep-learning/2018/03/17/Faster-R-CNN/

사진5

https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e


'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
7. Fast RCNN  (2) 2020.02.06
6. SPP Net  (2) 2020.02.05
5. RCNN  (0) 2020.02.05

안녕하세요~


이번글에서는 RCNN의 단점과 SPP-Net의 단점을 극복한 Fast RCNN이라는 모델에 대해서 설명할게요~




<1. Motivation>



1) Three stage pipeline (RCNN, SPP-Net)


RCNN과 SPP-Net의 공통적인 학습방식은 아래와 같아요.


①CNN 모델을 사용할 때 ImageNet에 학습된 pre-trained 모델을 쓴다. 이때 pre-trained 모델을 Pascal VOC 이미지 데이터셋에 finetuning 시킨다.

②Fine tuning을 마친 후, CNN의 softmax layer를 제거해주고 SVM을 설치한다. Pascal VOC 데이터셋을 CNN의 뒷 부분에 해당하는 SVM을 학습시켜준다.

③classification 학습이 마무리되었으면 bounding box regression을 학습시켜준다.  


결국 학습을 세 번을 나눠서 하는꼴이 되는건데, 이런 과정들이 굉장한 시간을 소요하게 만들어요.




2) Feature vectors stored in hard disk


RCNN은 Conv layer를 통해 얻은 feature map을 hard disk에 저장시켜요. 그리고 hard disk에 저장된 feature map정보를 bounding box regression or SVM 학습을 할때 갖다 쓰는방식이에요.


그런데 메모리가 아닌 하드디스크에 접근하려면 CPU와 hard disk간의 물리적거리로 인해 많은 시간이 소요되요. 또한 데이터가 하드 디스크에 기록되는 시간도 추가가 되겠죠? 그런데 이것이 굉장히 많은 RoI (Selective search에서는 보통 2000개의 RoI를 제시)에 진행된다고 하면 정말 많은 시간들이 걸릴거에요.

 




3) Slow test time


RCNN과 SPP-Net의 test time은 아직도 real-time을 실행하는데 있어서 많이 부족해요. 


<사진1>








<2. Architecture>


Fast RCNN이 어떻게 구성되었는지 알아보도록 할게요.



1) RoI pooling layer


Fast RCNN의 가장 큰 특징은 RoI pooling layer라고 할 수 있겠어요. Conv layer를 통해 뽑아낸 feature map에서 RoI pooling을 적용하게 되는데 순서는 아래와 같아요.


①Conv layer를 통해 추출된 feature map에 selective search를 적용하여 RoI들을 선별한다

②선별된 RoI를 모두 HxW(=7x7) size로 만들어주기 위한 작업을 시작한다.

③먼저 RoI가 h x w 크기를 갖고 있을때,  "window size=(h/H x w/W)", "적절한 stride 값", "max pooling"을 적용해주면  H x W (=7x7) feature map이 만들어 진다. (이러한 방식은 SPP-Net에서 설명한 "special case of spatial bin : 7x7 spatial bin"이라 할 수 있다)

④ 이렇게 생성된 H x W (=7x7) feature map이 flatten되어 2개의 FC layer를 거친다. 

⑤ 2개를 거쳐 생성된 feature들은 softmax, bbox regressor에 각각 사용된다.







2) Single bin


SPP-Net에서 사용했던 1x1, 2x2, 4x4 3가지 spatial bin을 이용하는 것보다, 위에서 언급한 7x7 spatial bin 을 쓰면 아래와 같은 장점이 있어요.


먼저 SPP-Net과 같은 방식으로 학습을 시킨다고 하면 아래와 같이 하나의 객체를 3개의 resolution으로 학습하는것과 같아요. 이렇게 되면 하나의 객체(아래 '사진2')를 지나치게 학습하는 꼴이될 수 있기 때문에 overfitting 문제가 발생할 수 있어요. 


         


만약에 아래그림에서 다른 이미지에서 다른 모양의 눈('사진3')이 입력된다면 자신들이 학습했던 것과 다르다고 판단해 '사진3'이 눈이 아니라고 말할 가능성이 높게 됩니다.


<사진2>


<사진3>






Fast RCNN처럼 단 하나의 7x7 spatial bin을 쓰게 되면 SPP layer에서 발생시키는 overfitting 문제를 피할 수 있게 되요.






3) Truncated SVD (SVM이 아니에요!!!!)


Fast RCNN에는 마지막 FC layer에 Truncated SVD 기법이 적용되어 있어요.


Classification을 위해 사용되는 CNN 구조를 보면 FC layer에서 소요되는 시간보다 Con layer에서 걸리는 시간이 상대적으로 더 많다고 할 수 있어요 (가중치 개수는 FC layer가 더 많지만 연산에 소요되는 시간은 Conv layer가 당연히 더 오래 걸려요!). 



하지만 Fast RCNN 같은 경우에는 단 한 번의 CNN 과정만 거치고 그 위에서 대략 2000개의 RoI가 선별됩니다. 이 후, 2000개의 RoI에 대해서 FC layer를 진행하기 때문에 FC layer에서 소요되는 시간이 더 많아 지게 됩니다. 



그래서 무수히 많은 FC layer 의 연산들이 truncated SVD 기법으로 인해 compression 되어 parameter 수를 줄이게 되고, test 시간도 굉장히 줄여줄 수 있게되요. 이 부분은 논문에서 너무 명확하게 잘 설명해주고 있어서 논문표현을 그대로 빌리도록 하겠습니다.


  













<3. Training>


1) A single training stage (streamline)


1-1) One loss function with two multi-task


먼저 RCNN, SPP-Net에서는 bounding box와 classification이 따로 학습이 되었어요. 하지만 Fast RCNN은 bounding box와 classification을 동시에 학습시키도록 만들었어요. 즉 하나의 loss function을 통해서 multi-task (classification and localization)을 수행하도록 만들었어요. 


<사진4>


Multi-task loss function는 아래와 같이 계산이되요.





1-1) Classification loss function


Classification 문제이다 보니 cost function 자체는 log loss function을 취하고있어요 (자세한 설명은 여기 링크를 참고하세요).


(log loss for true clss u)



1-2) Localization loss function


우선 localization loss function에 필요한 인자는 t, v에요. v는 특정클래스(u)에 대한 ground truth를 의미하고, t는 특정 클래스(u)에 대한 RoI (candidate bounding box)에요.  



Localization loss function은 smooth L1을 사용했어요. 


Bounding box regression은 t-v 값의 차이가 대부분 크게 나올거에요 (왜냐하면 t,v 에는 4가지 요소가 들어가 있기 때문이에요). 그래서 t-v가 많이 차이나는 outlier 경우에 L2 loss를 적용하게되면 더욱 차이가 커질거에요. 이렇게되면 exploding gradient 현상이 일어날 수 있기 때문에, 이를 방지하고자 L1형태의 smooth 함수를써요 (L1을 쓰지 않는 이유는 미분이 되지 않는 지점이 있어 backpropagation을 적용 할 때 문제가 일어날 수 있기 때문인거 같아요).



<사진5>



1-2) Fine tuning


RCNN같은 경우는 사실상 CNN, SVM, Bounding box regression에 대해 각각 Pascal VOC로 fine tuning하는 꼴이되요. 하지만 Fast RCNN에서는 SVM을 따로 classifier로 붙여서 쓰지 않고 기존의 CNN의 classifier (softmax)를 그대로 이용하여 동시에 CNN, softmax classifier, bounding box를 학습하기 때문에 Pascal VOC 데이터를 한 번만 쓰게 됩니다. 그래서 학습시 one single stage로 학습을 하게 되는거에요. 


<사진6>


아래 결과를 보면 Fast RCNN (FRCN)에서 softmax를 쓴 mAP가 조금씩 더 높게 나온 것을 알 수 있기 때문에 굳이 SVM을 붙여서 three stage로 학습시킬 이유가 없다는 것을 증명했어요.



여기서 주의해야 할 부분은 fine-tuning을 적용할 시 첫 번째 Conv layer부터 FC layer까지 전부 학습시키는것이 아니에요. VGGNet을 기준으로 했을 때 3번째 (conv3_1)에서 부터 fine-tuning을 하는것이 효율적이라고 언급했어요.


<사진7>

 

논문에서는 fc6에서 부터 fine tuning한것과 conv3_1에서부터 fine tuning을 적용한 것을 실험했는데, conv3_1에서부터 fine-tuning을 적용한 결과가 훨씬 좋게 나타났어요. 또한 conv3_1과 conv2_1에 대해서 실험을 진행했는데 conv2_1의 성능이 약간 좋았지만 training time이 1.3배 (12.5h > 9.5h) 더 소요되었기 때문에 '시간 및 정확도' 측면을 고루봤을 때 conv3_1에서부터 fine-tuning을 적용하는것이 효율적이라고 언급했어요.







2) Eliminate disk storage


RCNN에서는 SVM, bounding box에 feature를 넘기기전에 disk에 저장한다고 했죠?

하지만 Fast RCNN은 disk에 넘겨주지 않고 메모리단에서 학습을 시켜주기 때문에 시강늘 더 단축할 수 있었다고해요. 논문에서는 구체적인 방법에 대해서 서술하진 않고, 단지 아래 문장으로 disk storage 방식을 사용하지 않았다고 명시하고 있어요.


"Fast R-CNN also eliminates hundreds of gigabytes of disk storage, because it does not cache feature."







3) Hierarchical sampling (image centric sampling)


RCNN, SSP-Net은 mini-batch=128로 설정하여 한 번 학습할 때마다 128개의 서로 다른 이미지들 중에서 128개의RoI를 추출합니다. 이렇게 되면 128번의 CNN(conv layer, conv operation) 작업이 수행되어야 하기 때문에 많은 시간이 소요되요.


<사진8>


Fast RCNN은 RCNN, SPP-Net과는 다른 hierarchical sampling(image centric sampling)이라는 방식을 취했어요. 위에서와 같이 128개의 이미지에 대해서 128개의 RoI를 추출하는것이 아니라 128개 보다적은 개수의 이미지에서 (논문에서는 2개의 이미지로 설정) 128개의 RoI에 대해서 연산을 진행하게 해줍니다. 2개의 이미지 각각에 대해서 64개의 RoI를 추출하게 되는데요. 사실 더 많은 RoI들이 선별되지만 그중에서 IoU가 50% 이상인 것을 기준으로 positive example로 삼는다고해요. 이렇게 되면 2번의 CNN 작업(conv layer; conv operation)만 진행해주면 되기 때문에 시간이 절약될거에요.


<사진9>





4) Inefficient of SPP-Net backpropagation


Fast RCNN 논문에서는 SPP-Net backpropagation 때문에 weight update가 비효율(inefficient)적으로 일어난다고 설명하고 있어요. 좀 더 정확히 말하면 spatial pyramid pooling layer 때문에 이러한 비효율적인 문제가 발생한다고 하면서 자신들의 RoI pooling backpropagation을 소개하고 있어요. (RoI pooling backpropagation이 더 효율적이다라고 설명하려고 하는거 같은데, 왜 더 효율적인지 설명한 부분을 찾지는 못했어요. 제가 실력이 부족해서 이해를 못했을 가능성이 더 크지만요 ㅎㅎ;;;;)








<4. Result>











이번 시간에는 Fast RCNN에 대해서 알아보았어요. 다음 글에서는 Fast RCNN 버전을 업그레이드한 Faster RCNN에 대해서 알아보도록 할게요!





[글 래퍼런스]

https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220776743537&proxyReferer=https%3A%2F%2Fwww.google.com%2F


[논문 래퍼런스]

Fast RCNN/ Ross. G/ 2015/ https://arxiv.org/pdf/1504.08083.pdf


[사진 래퍼런스]

사진1

https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e

사진2

http://www.open-eyes-photography.de/oep/articles/Resolution_comparison.htm

사진3

http://kormedi.com/1225116/%EB%88%88-%EA%B1%B4%EA%B0%95-%EC%A7%80%ED%82%A4%EB%8A%94-%EC%A2%8B%EC%9D%80-%EC%8A%B5%EA%B4%80-4/

사진4

https://man-about-town.tistory.com/52

https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220776743537&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진5

https://www.researchgate.net/figure/Plots-of-the-L1-L2-and-smooth-L1-loss-functions_fig4_321180616

사진6

https://www.mathworks.com/help/vision/ug/getting-started-with-r-cnn-fast-r-cnn-and-faster-r-cnn.html

사진7

https://excelsior-cjh.tistory.com/160

사진8

https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220776743537&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진9

https://blog.airlab.re.kr/2019/10/Fast-R-CNN

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06
6. SPP Net  (2) 2020.02.05
5. RCNN  (0) 2020.02.05
4. DPM (Deformable Part Model)  (0) 2020.02.04

안녕하세요~

 

이번글에서는 RCNN의 단점을 극복하고자 나온 SPP-Net object detection 모델에 대해서 알아보도록 할게요~

 

 

 

<1. Motivation>

 

 

1) Too CNN operation

 

RCNN은 selective search를 통해 대략 2000개의 candidate bounding box를 만들어내요. 

 

 

 

2000개의 candidate bounding box를 CNN에 입력하게되면 하나의 이미지에 대해서 학습하거나 detection(test) 하는데 굉장한 시간이 소요된답니다. 실시간 성능은 꿈에도 못 꾸겠죠..

 

<사진1>

 

 

 

2) Distortion by warping

 

RCNN은 candidate bounding box 내의 feature를 뽑아내기 위해 AlexNet을 이용한다고 했어요. 그래서 candidate bounding box가 227x227 size로 warping 된다고 설명드린바 있습니다.

 

그런데 이 warping 과정에서 이미지 왜곡현상이 일어날수가 있어요 . 만약 실제 객체의 aspect ratio 비율과 warping된 객체의 aspect ratio가 warping 때문에 굉장히 차이가 나게되면 두 이미지는 아예 다른 이미지가 될 확률이 높아요.

 

 

 

 

<사진2. Distortion되는 경우>

 

 

 

 

 

 

 

 

<2. Architecture>

 

 

1) Reduce CNN operation

 

RCNN에서는 입력 이미지에서부터 region proposal 방식을 이용해 candidate bounding box를 선별하고 모든 candidate bounding box에 대해서 CNN 작업을해요. 만약 2000개의 candidate bounding box가 나오게 되면 2000번의 CNN과정을 수행하게 되는거죠.

 

하지만 SPP-Net은 입력이미지를 먼저 CNN 작업을 진행하고 다섯 번째 conv layer에 도달한 feature map을 기반으로 region proposal 방식을 적용해 candidate bounding box를 선별하게되요. 이렇게되면 CNN 연산은 1번이 되는데요. 즉 RCNN 2000번 -> SPP-Net 1번 의 CNN operation 절감효과가 나타나기 때문에 굉장히 시간을 빠르게 단축할 수 있게되요. 

 

<사진3>

 

<사진4>

 

 

 

 

2) Remove warping process and avoid distortion

 

먼저, SPP-Net은 warping으로 인한 distortion을 없애주고자 'spatial pyramid pooling'이라는 개념을 이용합니다. RCNN과의 차이를 보면 warping하는 부분이 없어지고 spatial pyramid pooling이 추가된것을 볼 수 있을거에요. Spatial pyramid pooling 과정이 어떻게 warping 과정을 없앨 수 있었는지 살펴보도록 하겠습니다.

 

 

[Spatial Pyramid Pooling process]

 

First step

: Conv layer 5까지 거친 feature map에 대해서 region proposal 방식(ex: selective search)을 적용하여 candidate bounding box를 선별해 줍니다. 보통 candidate bounding box를 RoI (region of interests)라고 표현하기 때문에 앞으로 candidate bounding box는 RoI라고 칭하겠습니다. 

 

 

 

Second step

: RoI영역에서 Spatial Pyramid Pooling 알고리즘을 적용합니다. 알고리즘 순서는 아래와 같습니다.

 

 

 

 

[RoI feature is pooled by Spatial bin]

- RoI feature가 13x13인 경우

- 3x3 spaital bin을 사용한다는건 pool 연산을 통해 3x3 feature map을 얻겠단 소리

- 아래의 RoI feature에서 3x3 feature map을 얻기 위해서는 window size=5, stride=4 로 설정

- 위와 같이 설정된 window (아래 작은 네모박스)는 이동하면서 max pooling 연산을 적용

 

 

 

: 그런데 보통 3x3 spatial bin을 사용하지 않고, SPP-Net은 1x1, 2x2, 4x4 spatial bin을 사용 (각각의 spatial bin을 얻기 위해서 pooling하는 window size와 stride가 다름) -> 이 과정에서 warping 작업이 필요 없게 됨 -> 왜냐하면 feature map size (RoI size)에 따라서 window size, stride만 설정할 수 있도록 계산해주면 1x1, 2x2, 4x4 spatial bin을 구할 수 있음

 

: 또한, Pooling이 resolution을 감소시킨다는 개념을 알고 있으면 위와 같은 1x1, 2x2, 4x4 spaital bin은 다양한 resolution을 갖고 있다는 뜻 -> 그래서 spatial pyramid(다양한 resolution; 다양한 spatial bin) pooling 이라고 함

 

 

Third step

: 위의 spatial pyramid pooling 알고리즘을 통해 1x1, 2x2, 4x4 spatial bin을 얻었으면 spatial bin들을 모두 flatten하게 됩니다. 그럼 총 16+4+1 = 21개의 feature가 만들어 지겠네요. 21개의 고정적인 feature들은 fc layer로 넘어가게 됩니다.

 

<사진5>

 

 

 

 

 

<3. 결과>

 

SPP-Net역시 RCNN에서 사용된 bounding box regression (BB)을 적용했어요. 그 결과 SPP-Net BB 모델이 가장 성능이 좋게 나왔어요.

 

 

 

 

 

이번글에서는 SPP Net에 대해서 알아보았어요. SPP-Net의 장점을 이야기하면 아래와 같이 요약할 수 있겠어요.

①Spatial Pyramid Pooling을 통해 RCNN에서 사용된 warping 작업을 없애 distortion을 피할 수 있었다.

②RCNN에서는 CNN연산을 2000번 한 것에 비해, SPP Net은 CNN 연산을 한 번만 하면되서 training, test 시간의 굉장히 단축시켰다.

 

 

 

 

하지만 여전히 SPP-Net을 통해서도 극복하지못한 RCNN의 단점들이 존재하고 있고, SPP-Net에서도 단점이 있었어요. 그래서 다음글 Fast RCNN을 소개하면서 여전한 RCNN의 단점과 SPP-Net의 단점을 어떻게 극복했는지 설명해드릴게요~  

 

 

 

[사진 래퍼런스]

사진1

https://woosikyang.github.io/fast-rcnn.html

사진2

http://biz.heraldcorp.com/view.php?ud=20131219000553

사진3

https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e

사진4

https://blog.lunit.io/2017/06/01/r-cnns-tutorial/

사진5

https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220731472214&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

 

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

8. Faster RCNN  (1) 2020.02.06
7. Fast RCNN  (2) 2020.02.06
5. RCNN  (0) 2020.02.05
4. DPM (Deformable Part Model)  (0) 2020.02.04
3. Object Detection과 CNN의 관계  (2) 2020.02.04

안녕하세요~


이번글에서는 최초의 딥러닝 기술이 적용된 object detection 모델인 RCNN에 대해서 알아보도록 할거에요. 


CNN 챕터처럼 논문을 세세하게 분석하지 않고 보기 편하게 "1. Motivation ->2.Architecture -> 3. Training -> 4. Result" 순서로 간단하게 설명해드리도록 할게요!





<1. Motivation>


앞선글에서 다루었던 DPM 같은 구조의 문제점은 다음과 같이 요약할 수 있어요.


1) 굉장히 복잡한 구조


DPM에서 classification 과정은 매우 복잡해요. 다양한 filter들(low level, high context )의 hog feature 와 각각의 filter들을 적용한 후 SVM을 이용하여 classification을 하게 됩니다. 그리고 모든 filter들의 결과를 합산하는 ensemble 기법을 거쳐 최종 classification을 하게되요. 상당히 복잡한 구조이죠;; 또한 hog feature 기반의 SVM classification 결과도 뛰어나지 않아요;;; 






2)  Bounding box


다양한 크기의 resolution에서 sliding window 방식으로 진행하게되면 굉장히 많은 bounding box가 생성될거에요. 이렇게 많은 bounding box 각각에 대해서 복잡한 dpm classification 알고리즘을 적용한다면 시간도 굉장히 오래걸릴거에요.

     



이렇게 시간도 오래걸리고 classification 결과도 좋지 않은 모델이 2012년까지는 최고의 성능을 보이는 object detection 모델이라고 하면 믿어지시겠어요? 하지만 2012년 혜성같이 등장한 AlexNet으로 인해 Object detection 영역은 큰 변혁을 맞이하게 됩니다.










<2. Architecture>


논문에서는 RCNN 구조를 세 가지의 module (Extract region proposals, Compute CNN features, Classfiy regions)로 구성하고 있어요.




<사진1>



1) Region proposals (Extract region proposals)

: 먼저 입력 이미지가 들어오게되면 이미지 내에서 bounding box가 될 만한 후보(candidate bounding box)들을 선별해주게되요. 객체가 무엇인지에 따라 bounding box가 선별되어 그려지는 것이 아니고 (category-independent region proposal), 그냥 객체가 될만한 영역들에 대해서 candidate bounding box를 선별해 줍니다. 예를들어, 객체가 될만한 것들은 보통 인접한 pixel과 굉장한 차이가 날거에요. 그럼 이러한 정보들을 기반으로해서 객체라고 생각되는 영역에 대한 candidate bounding box를 생성해 줍니다.




이렇게 candidate bounding box (region)를 선별(proposal)해주는 것을 region proposal 방식이라고 해요. 일반적으로 object detection=classification+localization 이라고 할 수 있는데, region proposal 같은 경우는 localization을 위한 기법이라고 생각하시면되요.


Region proposal 방식은 굉장히 다양하게 존재 했어요. RCNN은 selective search라는 알고리즘을 통해 candidate bounding box를 선별해 주었어요 (selective search에 대한 개념은 기회가되면 segmentation 파트에서 더 자세히 다루려고해요. 그러니 이곳에서는 "RCNN의 region proposal 방식이 selective search 구나!" 정도로만 이해하시면 좋을 것 같아요)





2)  Feature Extraction


두 번째 모듈은 feature extraction이에요. 선별된 candidate bounding box들은 개별적으로 CNN이 수행이되요. CNN 작업이 수행되는 이유는 각각의 candidate bounding box에 있는 물체들의 특징(feature)을 추출하기 위해서에요.


(보통 CNN은 이렇게 뽑은 특징들을 softmax로 통해 분류하는데 여기에서는 CNN으로 feature만 뽑아주고, classification은 기존 DPM에서 사용하던 방식인 SVM 방식을 택했어요. 아마 CNN을 그대로 적용시키는 것 보다 object detection 영역에서 기존에 사용했던 classification 방식을 택하는것이 더 좋을거라 판단했었나봐요.)


RCNN은 feature extraction 용도로써 AlexNet을 적용했어요. Softmax를 제외하고 5 conv layer, 2 fc layer를 통해 feature extraction을 진행했습니다.


<사진2>

(그림에서는 input이 224x224라고 나오는데 실제로는 input이 227x227이어야 해요. 논문에 설정된 stride와 padding을 고려했을때, 여러 레이어를 거쳐 13x13으로 도달하려면 227x227이 맞다고해요.AlexNet 논문의 그림이 잘 못된거라고 합니다)


RCNN은 AlexNet을 적용하기 때문에 candidate bounding box들을 227x227 이미지로 만들때 여러 실험(B,C,D)을 했어요.


A: Region proposal 방식을 통해 선별된 candidate bounding box in original input image


B: A 이미지 -> 배경을 포함하는 tightest squre: A이미지에서 배경을 조금 더 포함해서 isotropically 방식으로 227x227 size로 조정 (비어있는 부분 zero 패딩으로 맞추는듯; 확실한 건 아님)

C: A 이미지 -> 배경을 포함하지 않는 tightest squre: A이미지에서 배경 포함하지 않고 isotropically 방식으로 227x227 size로 조정 (비어있는 부분 zero 패딩으로 맞추는듯; 확실한 건 아님)

D: A 이미지 -> A 이미지를 단순히 warping


Top-row: p=0 -> 배경을 아예 무시

Bottom-row: p=16 -> 배경을 padding=16 만큼 포함.

(예를들어, C 방식에서 p=16을 적용한다면, C방식 (A이미지에서 배경이 포함되지 않는 객체)을 기준으로 배경을 p=16 만큼 포함시킨다는 뜻) 


논문에서는 D 방식을 선택했을때 p=16을 적용하면 classification 결과가 좀 더 좋게 나왔다고 하네요.




결국 위와 같이 region proposal 방식으로 선별된 candidate bounding box 를 AlexNet에 입력해주기 위해 warping 작업을 하게 됩니다. 그리고 resizing(warping)된 227x227 이미지에 대해서 AlexNet을 적용해 feature extraction을 수행하게 되는거에요.





3) Classification


AlexNet으로 feature extration을 한 후에는 SVM을 통해 classification을 하게됩니다.





지금까지 RCNN이 어떻게 구성되어 있고 어떤 순서(알고리즘)로 detection 하는지 알아보았어요. 그렇다면 이제 부터는 좀 더 디테일하게 RCNN이 tranining하는 방식에 대해서 알아보도록 할게요.



[Detection 요약]

1. Input image -> RCNN 모델에 입력

2. Selective Search (region proposal)방식으로 candidate bounding box 선별

3. 선별된 candidate bounding box를 warping 해줌 (227x227; for AlexNet input size/ p=16)

4. warping된 227x227 이미지를 입력하여 AlexNet으로 부터 feature extraction

5. AlexNet으로 부터 추출된 feature들을 이용해서 SVM을 적용









 

<3. Training>


Training은 classification(SVM)과 localization(bounding box) 두 task로 나뉘어요. 그렇기 때문에 classification 및 localization은 따로따로 학습이 된다고 보시면되요.






1) Classifciation


기본적으로 classification을 위해 AlexNet이 쓰이는데요. RCNN에서는 처음부터 AlexNet을 만들어 Pascal VOC 데이터로 학습시키지 않고, 기존에 ILSVRC 2012에서 학습된 AlexNet을 사용해요. 보통 이를 pre-trained model을 사용했다고 하는데요. 어차피 Object detection에서 쓰이는 AlexNet도 객체를 classification하는 목적을 갖고 있어요. 그렇다면 ImageNet dataset이나 Pascal VOC dataset에 있는 객체들의 형태가 크게 다르진 않을거에요. 그렇기 때문에 ImageNet dataset으로 training된 AlexNet을 갖고 Pascal VOC dataset을 조금만 학습시켜도 될거에요. 이러한 작업을 fine-tuning 했다고 해요. 


만약 AlexNet 모델을 처음부터 구현하고 Pascal VOC dataset으로 학습시키면 dataset 양도 적을 거고 (Pascal VOC < Pre-trained model: Pascal VOC+ImageNet), 학습시키는데 시간이 굉장히 오래걸릴거에요 (Object detection은 classification말고도 localization에 대해서도 학습이 되어야 하니까 training 시간은 배로 더 걸리겠네요.)


RCNN은 Pascal VOC dataset으로 추가적인 training을 시켜주기 때문에 fine-tuning이라고 했죠?

좀 더 엄격히 말하자면 RCNN은 AlexNet모델에 transfer learning을 적용했다고 이야기 할 수 있는데요.


기존의 AlexNet은 Softmax를 통해 classification을 진행했지만, RCNN에서 사용되는 AlexNet은 Softmax가 아닌 SVM을 통해서 classification을 하게되요. 이렇게되면 기존의 AlexNet의 softmax를 제거 하고 SVM을 연결시켜주어야 하는데, 이때 classifier 부분만 따로 학습을 해주어야해요. 이런 경우 우리가 transfer learning을 했다고 이야기하는데요.


Transfer learning을 적용하는 이유는 우리가 분류하려는 class의 종류가 달라질때에요. AlexNet은 1000개의 class에 대해 학습이 되었지만, 우리가 이를 적용할때는 다른 종류의 class 4개를 분류하고 싶을 때가 있어요. 이럴때에는 제일 뒷단에 위치한 classifier만 따로 다시 학습시키면 되는데요 이때 새로운 classifier를 이식(transfer)해서 학습시킨다고하여 transfer learning이라고 부르게 되었답니다.



Pascal VOC 대회에서는 20개의 클래스들에 대해서만 detection 성능을 평가하기 때문에, 기존의1000개의 클래스를 분류하는 목적을 갖는 AlexNet을 20개의 Pascal VOC 클래스에 대해서 분류하는 목적을 갖도록 transfer learning하게 됩니다. (좀 더 엄밀하게 이야기하면 21개의 클래스에 대해서 분류하게 됩니다 (20:classes; positive example + 1:background; negative example))


<사진3. Pascal VOC>



<사진4>


SVM을 학습시키기 위한 전제 조건은 positive example이어야만 한다는거에요. RCNN을 classification하는건 기본적으로 selective search를 통해 선별된 candidate bounding box에 대해서 학습이 진행되는데요. 아래 그림을 통해 candidate bounding box와 positive example이 어떤관계를 갖고 있는지 살펴볼게요.


RCNN을 통해 2개의 candidate bounding box가 선별되었어요. 하지만 이 두 개의 bounding box에 해당하는 class가 뭔지 아직 모르는 상태에요. 이때 학습 데이터로 사용되는 이미지 (ground truth (class, bounding box coordinate)를 포함)가 입력이되면 이 학습 데이터의 ground truth 정보와 2개의 candidate bounding box 정보를 비교대조하게되요. 만약 ground truth와 candidate bounding box의 IoU가 50% 이상이면 해당 candidate bounding box는 객체를 포함하고 있을 가능성이 높다고 판단하고, 해당 객체를 ground truth의 클래스라고 인식(=positive example)하고 학습을 진행해요. 반대로 IoU가 50% 이하이면 객체가 포함되어있을 확률이 낮다고 판단하여 객체가 아닌 background(=negative example)라고 인식하게 됩니다. 





이렇게 선정된 positive example에 대해서 학습이 classification 작업이 진행되요.






2) Localization (Bounding box)


Selective search를 통해 나온 candidate bounding box (아래그림 파란색)이 ground truth(아래그림 노란색)과 일치하지 않을 수 도 있어요. 이런 경우에는 candidate bounding box와 ground truth의 좌표정보들을 비교하여 regression 문제로 전환해주면 되요. 이렇게 되면 파란색 위치의 candidate bounding box가 ground truth를 보고 bounding box 위치를 학습하게 될거에요. 쉽게 말하면 아래와 같이 요약할 수 있겠네요.


"Selective search 만으로 stopsign의 위치를 찾아내는 능력이 조금 부정확해, 그러니까 너는(RCNN 모델) 정답지 (Ground truth의 올바른 위치) 를 보고 교정(training) 좀 하면 좋아질거야!  이렇게 학습(Training)을 마치게되면, 나중에 너(RCNN 모델)가 selective search를 이용하여 stopsign의 위치를 찾아낼 때, selective search 방식으로 candidate bounding box 를 뽑으면 위치가 조금 부정확했으니 배운대로 위치를 조금씩 조정해주면 더 좋은 localization이 될거야~"





이렇게 selective search를 통해서 나온 좌표값을 ground truth와 비교하여 '조금씩 조정'하게 되면 좋은 localization 성능을 얻게 되는데요. 이때 '조금씩 조정'하는 정도의 최적값을 찾기 위해서 bounding box를 찾는 문제를 아래와 같은 regression 문제로 정의하게되요.




Bounding box regressor의 학습 목표는 P를 G로 mapping할 수 있도록 최적의 변환(transformation)방식을 찾는거에요. 


"After learning these functions, we can transform an input proposal P into a predicted ground-truth box ˆG by applying the transformation"


아래와 같은 식을 기준으로 최적의 transformation 방식을 찾게 되는데, 이해가 잘 안되시죠?


 


아래의 그림에 적힌 설명대로 잘 따라가시면 위에서 언급한 수식들이 bounding box regression에 어떻게 적용되는지 알 수 있으실거에요.


(target-prediction에서 hypothesis function 개념은 아래 사이트를 여기 링크를 참조)



이렇게 최적의 d함수 값을 찾게되면 우리는 보편적으로 selective search를 통해 얻은 candidate bounding box를 학습된 transformation 방식으로 위치조정해주어 향상된 localization 성능을 얻을 수 있게 될거에요. 



<사진5>


<사진6>








3) Pool 5 feature를 Bounding box regression에 사용하는 이유


Pool 5 feature를 Bounding box regression을 위해 사용한 이유를 결론적으로 말씀드리면 'empirical study(경험적 연구)'이기 때문이에요. 즉, 여러 실험을 진행했는데 Pool 5 feature로 d함수를 구성하면 localization 성능 (mAP)이 좋게 나왔다는거에요.




아래결과를 보면  pool 5 feature (=6x6x256)를 이용하는것이 5 or 6 번째 Fully Connected layer feature (4096)를 이용하는것보다 mAP가 더 높게 나왔다는걸 아래 표로 보여주고 있어요.




그 외, CNN 모델을 AlexNet (아래 그림의 T-Net)을 사용한 경우와, VGGNet (아래 그림의 O-Net)을 사용한 경우에 대한 mAP도 보여주고 있네요. 그리고 BB라는건 위에서 언급한 bounding box regression 방식이 적용된 경우라고해요. (아마 BB라고 되어있지 않은 경우는 Selective Search 방식으로만 region proposal한 결과에 대해서 mAP를 계산한게 아닌가 싶어요)


이 결과를 보면 CNN의 성능이 d함수에서 사용되는 feature에 영향을 끼치고 이것이 곧 localization에 영향을 주게 되는걸 알 수 있어요. 그래서 CNN의 성능이 Object detection 모델의 mAP의 성능에도 영향을 끼치고 있다는걸 알 수 있을 겁니다.










<3. Result>


R-CNN 모델의 mAP가 딥러닝 기반 CNN 모델을 적용하지 않은 이전 세대의 object detection 모델 보다 월등히 성능이 뛰어난걸 보실 수 있으실거에요. 그 중에서도 bounding box regression 기법을 추가하게 되면 더욱 성능이 좋아진다는 것을 볼 수 있어요.

 



여기까지 RCNN에 대해서 알아보았어요. 다음글에서는 RCNN의 단점을 극복한 SPP-Net에 대해서 알아보도록 할게요!





[논문 레퍼런스]

Rich feature hierarchies for accurate object detection and semantic segmentation Tech report/ Ross. G. et al/ 2014/ https://arxiv.org/abs/1311.2524



[사진 래퍼런스]

사진1

https://woosikyang.github.io/fast-rcnn.html

사진2

https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

사진3

https://www.researchgate.net/figure/Illustration-on-our-annotations-of-semantic-object-parts-for-the-PASCAL-VOC-2010-dataset_fig3_284579150

사진4

https://www.researchgate.net/figure/R-CNN-Training-Workflow_fig3_329586511

사진5

https://lilianweng.github.io/lil-log/2017/12/31/object-recognition-for-dummies-part-3.html#bounding-box-regression

사진6

https://blog.lunit.io/2017/06/01/r-cnns-tutorial/


'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

7. Fast RCNN  (2) 2020.02.06
6. SPP Net  (2) 2020.02.05
4. DPM (Deformable Part Model)  (0) 2020.02.04
3. Object Detection과 CNN의 관계  (2) 2020.02.04
2-3. Object Detection 모델 평가지표 (FPS)  (6) 2020.02.04

안녕하세요~


이번글에서는 RCNN을 배우기전에 존재한 object detection 모델에 대해서 알아보도록 할게요~

이러한 개념들을 이해하고 있어야 RCNN이 등장한 Motivation에 대해서 이해하실 수 있어요. 그래서 이번글에서는 DPM이 동작하는 순서(architecture)에 대한 글을 다루려고 해요.






<1. DPM 동작순서>



1. Sliding window 


먼저 이미지 픽셀마다 (일정간격의 픽셀을 건너띄고) bounding box(window)를 그려줍니다.




2. block wise operation


하나의 이미지를 block단위로 나눕니다. 예를들어 아래와 같은 경우에는 8x8 pixel을 하나의 block 단위로 하여 여러 block들이 이미지를 구성하게 합니다.





3) SIFT or HOG block wise orientation histogram


Bounding box가 픽셀을 옮겨다니면서 하는 일에 대해서 말씀드릴게요.



Bounding box가 아래와 같은 위치에 있다고 가정해볼겠습니다. 그럼 해당 bounding box는 4x8 block ((4x8)x(8x8) pixles)을 포함하고 있어요.




그리고 해당 bounding box영역의 block 마다 Hog feature에 대해 histogram을 분석하여 해당 block의 특징들을 선별하게 됩니다. (Hog, SIFT와 같은 개념을 정확하게 모르셔도 되요. 그냥 이러한 특징들이 뽑힌다는 정도만 이해하시면 될 것 같습니다)






4) Classification


하나의 bounding box에 대한 feature들을 아래와 같이 수집했다면, 이를 토대로 classification 작업을 수행합니다.

    



Classification할 때에는 미리 template filter를 이용해요. 예를들어 얼굴에 대한 template filter가 bounding box영역의 block마다 얼굴 filter(=template filter)를 matching할거에요. 이렇게하면 template filter의 hog feature와 block의 hog feature들이 매칭될거에요 (이러한 방식을 template matching이라고 해요). Template matching결과 얼굴에 해당하는 block은 높은 값이 산출될 거에요.


 

얼굴 template filter가 bounding box내의 block을 돌아다니면서 어떤 block이 얼굴인지 SVM을 통해 classification하게 되요.



5) 요약


결국 아래와 같이 특정 bounding box에 해당하는 block들에 대해서 다양한 template filter들을 template matching 시키고 그 결과를 볼거에요. 예를들면,  이전에 사람객체에 bounding box가 되어 있으면 사람 전체에 대한 template filter(root filter=high context feature)를 bounding box에 적용시켜보고, 얼굴에 해당하는 template filter(low level image feature)를 적용해보고, 여러 template filter에 대해서 계산을 해보고 모두 합산한 결과 bounding box에 있는 feature가 사람이 갖고있는 특징 (여러 template filter) 을 포함하고 있다고 판단하면 해당 bounding box를 사람이라고 detection하게 될거에요. 


결국 다양한 template filter를 통해 SVM으로 classification 한 결과를 이용하여 최종적인 classification을 한 것이니까 ensemble 기법이 적용되었다고 할 수 있겠네요.


최종적으로 아래와 같은 구조로 DPM을 요약할 수 있겠네요. 







<2. 문제점>


뭔가 과정자체가 굉장히 복잡해요. low-level image들과 high-context 결과를 합산여 ensemble 기법을 적용하는 등... 



그리고, 일일이 sliding window를 통해 계산하면 굉장히 많은 bounding box가 형성될거고, 각각의 bounding box마다 복잡한 classification 과정을 거치게 될거에요.



기존에 갖고 있던 이러한 복잡한 object detection 방법들 때문에 한동안 object detection 영역에서 힘을 못쓰다가 CNN 분야인 AlexNet의 등장으로 획기적인 발전을 하게 되는데 그 모델이 R-CNN이에요.






[글 래퍼런스]

https://www.learnopencv.com/histogram-of-oriented-gradients/

(Oriented Gradient histogram에 대해서 설명)

http://darkpgmr.tistory.com/116

(HOG feature에 대해서 설명)

https://pdfs.semanticscholar.org/ca8b/11536d31cfc3dea486833296bcb67e1be780.pdf

(DPM 설명)

http://slideplayer.com/slide/8240331/

(DPM 수식 자세히 설명)


'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

6. SPP Net  (2) 2020.02.05
5. RCNN  (0) 2020.02.05
3. Object Detection과 CNN의 관계  (2) 2020.02.04
2-3. Object Detection 모델 평가지표 (FPS)  (6) 2020.02.04
1. Object detection이 뭔가요?  (0) 2020.02.03

+ Recent posts