본문 바로가기

카테고리 없음

Object Detection의 역사

Object Detection의 역사

RCNN (2013)

Rich feature hierarchies for accurate object detection and semantic segmentation

https://arxiv.org/abs/1311.2524

기존에 물체 검출에 사용된 sliding window 방식에는 background를 검출하는 잉여시간이 너무 많았다. 이에 따라 등장한 기법이 Region Proposal 방식

RCNN은 Region Proposal을 1차적으로 사용하여 2000개의 Region영역을 proposal함. 2차적으로 CNN Detection을 이용해 Feature를 추출하고 a) FC - SVM으로 classification함. b) bounding box regressing으로 위치를 검출. crop과 Warp를 적용한 이미지를 적용하여 학습시킴

장점: 동시대 대비 매우 높은 Detection

단점: 너무 느린 Detection 시간과 복잡한 아키텍처 및 학습 프로세스, (각 이미지마다 2000개의 region이미지 → 1장 이미지를 Object Detection하는데 50초)

 

 

SPP Net (2014)

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

https://arxiv.org/abs/1406.4729

RCNN의 문제를 Selective search로 해결하려고 했으나, bounding box의 크기가 제각각인 문제가 있었음. FC Input에 고정된 사이즈로 제공하기 위해 SPP Net이 등장함.

SPP은 RCNN에서 conv layer와 fc layer사이에 위치함. 서로 다른 피쳐맵에 투영된 이미지를 고정된 값으로 풀링해주는 것이 SPP의 역할

 

SPM: 분면에서 피처를 쪼개서 bag of visual image로 변환, 레벨 0 1 2 로 나눠서 각각 1개, 4개, 9개 분면에 대해 히스토그램으로 정리한 것을... 쭉 펴서 벡터로 바꿔버림. 3 + 12 + 48 = 63개 원소의 vector값으로 표현 가능.

 

요약: SPP를 이용해 RCNN에 비해 실행시간을 매우매우 단축시킴, 스케일을 키운 이미지랑 비교한 이유는 피처의 크기를 키우기 위함

 

 

Fast RCNN (2015)

Fast R-CNN

https://arxiv.org/abs/1504.08083

SPP layer를 ROI pooling으로 바꿈. 7x7 layer 1개로 해결, SVM을 softmax로 대체, Classification 과 Regression Loss를 함께 반영한 Multi task Loss

요약: ROI Pooling을 이용해 SPP보다 간단해지며, RCNN에 비해 수행시간을 많이 줄임.

 

 

Fater RCNN(2015)

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

https://arxiv.org/abs/1506.01497

RPN(Region proposal network) + Fast RCNN로 요약할 수 있음.

RPN도 학습시켜서 전체를 end-to-end로 학습 가능해짐. → GPU사용 가능

 

Region Proposal Network 구현 이슈

Selective Search를 대체하기 위한 Region Proposal Network구현 이슈

데이터로 주어질 피처는 Pixel값, Target은 Ground Truth Bounding Box인데 이를 이용해 어떻게 Region Proposal을 할 수 있을 것인가?

→ Anchor Box, Object가 있는지 없는지의 후보 Box

 

Anchor box는 총 9개 크기로 구성됨. 그러니까 128 256 512 이미지의 크기에 맞는 모델이 있음. → 이미지 크기에 따라 모델을 잘 찾아야 할 것 같다.

Anchor box는 포인트마다 하나씩 있음 개별 앵커박스들이 물체가 있는지 없는지 매핑한 곳 마다 검출함. 이후 피처맵에 대해 이진분류를 수행함. 이때 1x1 Fully Convolutional 을 이용하여 영역 추천 받고, 바운딩 박스 리그레션도 수행함. 리그레션은 그라운드 truth가 아닌 positive box를 따라감.

 

positive anchor와 negative anchor를 mini batch로 섞음. negative가 워낙 많아서. 그리고 앵커박스가 너무 많은데, 예측 박스가 object일 확률에 Iou값을 곱해서 Objectness Score를 구함. ~ 까지 RPN

근데 문제는 학습을 2번 시켜야 함. RPN에 학습 → 분류 학습 이런식으로하면 가중치가 변해버리는 문제가 있음. 따라서 RPN을 Finetuning하고 Fast RCNN Fine Tuning함. 4단계로 이뤄짐.

요약: Anchor Box를 도입해 FastRCNN에 비해 정확도를 높이고 속도를 향상시킴.

 

 

SSD (2015)

SSD: Single Shot MultiBox Detector

https://arxiv.org/abs/1512.02325

Faster-RCNN은, region proposal과 anchor box를 이용한 검출의 2단계를 걸치는 과정에서 시간이 걸렸기 때문에 real-time(20~30 fps)을 달성하기는 힘들었다.

 

따라서 SSD는 Feature map의 size를 조정하고, 동시에 앵커박스를 같이 적용함으로써 1 shot으로 물체 검출이 가능해졌다. real-time으로 사용할 정도의 성능을 갖추었다. (30~40 fps)

 

하지만 작은 이미지의 경우에 잘 대처하지 못하는 모습을 보여, data augmentation을 통해 mAP를 63에서 74로 비약적으로 높였다. 데이터의 중요성을 알 수 있는 부분. → 우리의 프로젝트에서도 data를 잘 신경써야겠다.

작은 이미지도 잘 검출하는 것은 RetinaNet에서 달성되었지만, 우리의 프로젝트가 1-shot detection이 필요할지 2-shot detector로도 충분할지는 요구사항 검토가 필요할 것 같다.

 

 

YOLO (2018)

YOLOv3: An Incremental Improvement

https://arxiv.org/abs/1804.02767

YOLO는 v1, v2, v3의 순서로 발전했는데, v1은 정확도가 너무 낮은 문제가 있었고 이 문제는 v2까지 이어졌다. 이를 엔지니어링적으로 보완한 v3는 v2보다 살짝 속도는 떨어지더라도 정확도를 대폭 높인 모델이다. RetinaNet보다 늦게 등장한 YOLO v3는 RetinaNet과 마찬가지로 FPN을 도입해 정확도를 높였다. RetinaNet에 비하면 정확도는 4mAP정도 떨어지지만, 속도는 더 빠르다는 장점이 있다.

 

YOLO의 저자는 COCO dataset의 특수성(confidence scale 50~95로 검증하는 것)때문에 RetinaNet보다 성능이 안좋은 것 처럼 보이지만 confidence scale을 50으로 고정하면 3~4배까지 속도 차이가 난다고 설명하고 있다. 개인적으로는 측정형식을 고정해버리는건 억지라고 생각하고 자신의 모델에 자부심이 강한 모습이 드러난다고 생각한다.

 

 

RetinaNet (2017)

Focal Loss for Dense Object Detection

https://arxiv.org/abs/1708.02002

RetinaNet이전에는 1-shot detection과 2-shot detection의 차이가 극명하게 나뉘어 속도를 선택하면 정확도를 trade-off 할 수 밖에 없는 상황이었다. 하지만 RetinaNet은 기존 모델들보다 정확도도 높고 속도도 여타 1-shot detector과 비견되는 모델로서 여러 competition에서 retinanet을 이용한 모델들이 다수 수상하는 등 좋은 성과를 내고 있다. 이것이 가능해진 이유는 Focal Loss라는 개념의 도입과 FPN덕분이다.

 

Focal Loss의 등장 배경을 알기 위해선 기존 detection의 문제를 알아야한다. detection에선 검출하고 싶은 물체와 (foreground object) 검출할 필요가 없는 배경 물체들이 있는데 (background object) 배경 물체의 숫자가 매우 많을 경우 배경 Loss를 적게 하더라도 숫자에 압도되어 배경의 Loss의 총합을 학습해버리는 것이다. 예를 들면 숲을 배경으로 하는 사람을 검출해야하는데 배경의 나무가 100개나 되다보니 사람의 특징이 아닌 나무가 있는 배경을 학습해버리는 식이다. Focal Loss는 이를 Loss의 변동으로 해결했다. 기존의 crossentropy함수에서 (1-sig)을 제곱해버림으로써 background object의 loss를 현저히 줄여버리는 것이다. 이렇게 하면 검출하고자 하는 물체와 관련이 없는 background object들은 학습에 영향을 주지 않게 되고, 학습의 다양성이 더 넓어진다. 작은 물체, 큰 물체에 구애받지 않고 검출할 수 있다는 뜻이다. 실제로 retinaNet은 object proposal을 2000개나 실시하여 이를 확인했다. Focal Loss의 도입이 없었다면 불가능한 시도이다.

 

그리고 FPN을 도입했다는 점이 1-shot detector들과의 또다른 차이점이다. FPN (Feature Pyramid network)는 Resnet이 bottom-up 구조의 피라미드 구조라면 이와 반대되는 top-down식의 피라미드를 쌓아서 둘을 lateral하게 이용해 물체를 검출하는 식이다. 자세한 내용은 잘 모르겠지만... Resnet의 구조를 사용해서 정확도를 높였다고 보면 될 것 같다. FPN 논문을 보면 Faster-RCNN에서도 FPN을 도입하여 기존보다 mAP를 3정도 높였다고 한다.