[P stage 2 DAY 37] Object Detection

먼지감자·2021년 9월 27일
0

AI Boostcamp 2기

목록 보기
30/48
post-custom-banner

강의 내용 복습

(01강) Object Detection Overview

Classification vs object detection vs Sementic Segmentation vs Instance Segmentation

object detection History

evaluation
성능
mAP (mean average precision)
mAP를 계산하기 위해 필요한 개념

  • confusion matrix

  • Precision & Recall

    Precision : bbox 검출한 것 중에 맞게 예측한 것
    Recall : GT 중에 맞게 bbox 검출한 것

  • PR Curve
    예측들에 대해 맞았는지 틀렸는지 검출하고 각 confidence 알수 있을 때
    이를 내림차순으로 정렬한 후 누적 TP,FP 로 Precision, Recall 계산
    x축 Recall, y축 Precision으로 하여 그래프 그리기

    즉 모든 예측에 대해 confience score로 내림차순 정렬 한 후 누적TP,FP 를 이용하여 Precision, Recall 구해서 그래프로 그리면 PR Curve

  • AP (Average Precision)
    아래면적 계산 = AP : 0~1 값을 갖는 metric
    mAP : 모든 객체의 AP의 평균

  • IOU (Intersection Over Union)

mAP in Object Detection
mAP50, mAP70 ... : IOU가 50, 70일떄의 mAP 를 뜻함

속도

  • FPS (Frames Per Second)
    초당 처리할 수 있는 frame의 갯수

  • FLOPs (Floating Point Operations)
    model 이 얼마나 빠르게 동작하는 지 측정하는 연산량의 횟수 : 작을 수록 좋음

Library

  • MMDetection : pytroch 기반 object detection 오픈소스
  • Detectron2 : 페이스북 AI 리서치의 라이브러리로 pytorch 기반의 Object detection과
    segmentation의 알고리즘을 제공
  • YOLOv5 : coco 데이터셋으로 사전 학습된 모델로 수천 시간의 연구와 개발에 걸쳐 발전된 Object Detection 모델
    Colab, kaggle, Docker, AWS, Google Cloud Platform 등 에서 오픈 소스를 제공
  • EfficientDet : Google Research & Brain에서 연구한 모델로 EfficientNet을 응용해 만든 Object Detection 모델
    Tensorflow로 제공되는 EfficientDet을 사용할 수 있으며, 깃헙에 pytorch 기반으로 구현된
    라이브러리 역시 존재

(02강) 2 Stage Detectors

resion prposal - object clf

R-CNN

  • selective search 사용

pipeline
1. 입력이미지 준비
2. Selective Search를 통해 약 2000개의 RoI(Region of Interest)를 추출
3. RoI(Region of Interest)의 크기를 조절해 모두 동일한 사이즈로 변형 (FC layer 입력사이즈 고정이므로)
4. RoI를 CNN에 넣어, feature를 추출

  • 각 region마다 4096-dim feature vector 추출 (2000x4096)
    • Pretrained AlexNet 구조 활용
    • AlexNet 마지막에 FC layer 추가
    • 필요에 따라 Finetuing 진행

5-1. CNN을 통해 나온 feature를 SVM에 넣어 분류 진행
• Input : 2000 x 4096 features
• Output : Class (C+1) + Confidence scores
• 클래스 개수(C개) + 배경 여부(1개)

5-2) CNN을 통해 나온 feature를 regression을 통해 bounding box를 예측

요약
1) 2000개의 Region을 각각 CNN 통과 -> 연산량 너무 많아 시간 오래걸림
2) 강제 Warping, 성능 하락 가능성
3) CNN, SVM classifier, bounding box regressor, 따로 학습
4) End-to-End X

SPPNet

  • CNN 연산 딱 한번
  • spatial pyramid layer로 이미지 크기 고정하여 warping 필요 없음

spatial pyramid layer
이미지를 binning으로 나누어 각 cell에서 pooling으로 feature를 뽑음

요약
1) 2000개의 RoI 각각 CNN 통과
2) 강제 Warping, 성능 손실 가능성
3) CNN, SVM classifier, bounding box regression, 따로 학습
4) End-to-End X

Fast R-CNN


-ROI Pooling으로 고정된 크기의 feaure map 얻음

pipeline
1. 이미지를 CNN에 넣어 feature 추출 (CNN을 한 번만 사용) : VGG16 사용
2. RoI Projection을 통해 feature map 상에서 RoI를 계산

  • RoI Projection
  1. 원본이미지에서 selective search로 2000개의 region 얻음
  2. 얻은 region을 CNN을 통해 얻은 feature map에 그대로 projection / 만약 원본이미지와 feature map의 크기가 다르다면 후보 region역시 같은 비율로 축소해서 projection
  3. RoI Pooling을 통해 일정한 크기의 feature가 추출
    • SPP 사용 , SPP Net에서의 Pyramid level은 1x1, 2x2, 4x4 여러가지 였지만 Fast R-CNN에서는 7x7 하나만 사용 = pyramid level = 1 / Target grid size = 7x7
  4. Fully connected layer 이후, Softmax Classifier과 Bouding Box Regressor
    • 클래스 개수: C+1개
    • 클래스 (C개) + 배경 (1개)

요약
1) 2000개의 RoI 각각 CNN 통과
2) 강제 Warping, 성능 손실 가능성
3) CNN, SVM classifier, bounding box regression, 따로 학습
4) End-to-End X

Faster R-CNN

  • selective search 대신 RPN 도입하여 region proposal 부분도 학습가능하도록 함

pipeline
1. 이미지를 CNN에 넣어 feature maps 추출 (CNN을 한 번만 사용)
2. RPN을 통해 RoI 계산

  • 기존의 selective search 대체
  • Anchor box 개념 사용
    CNN으로 feature map얻은 후 grid로 나누고, 각 cell 마다 다양한 크기와 비율을 가진 n개의 ancher box를 가지고 있음
    RPN이 하는 일

    anchor box너무 많고, anchor box 좌표가 객체에 정확히 맞지 않음 -> anchor box별로 object를 포함하는지 판별 + 좌표(중심점, 가로, 세로) 미세조정 필요


2-1. CNN에서 나온 feature map을 input으로 받음. (𝐻: 세로, 𝑊: 가로, 𝐶: 채널)
2-2. 3x3 conv 수행하여 intermediate layer 생성
2-3. 1x1 conv 수행하여 binary classification 수행
- 2 (object or not) x 9 (num of anchors) 채널 생성
- 4 (bounding box) x9 (num of anchors) 채널 생성

최종 pipeline

NMS
• 유사한 RPN Proposals 제거하기 위해 사용
• Class score를 기준으로 proposals 분류
• IoU가 0.7 이상인 proposals 영역들은 중복된 영역으로 판단한 뒤 제거

bb1 을 기준으로 IOU를 계산하여 미리 정해둔 threshold = 0.7 이상인 bbox=bb2를 제거

result

SS로 2000개의 region을 뽑은 것 보다 RPN으로 300개의 region을 뽑은 것이 mAP가 더 좋음
fps 속도 또한 ss보다 RPN이 더 빠름

요약
1) 2000개의 RoI 각각 CNN 통과
2) 강제 Warping, 성능 손실 가능성
3) CNN, SVM classifier, bounding box regression, 따로 학습
4) End-to-End X

하지만 여전히 region proposal + clf/reg 2 step이로 이루어져 있기 때문에 속도 가 느려 실시간으로는 사용할 수 없음

summary

Further Reading
RCNN Paper
Fast RCNN Paper
Faster RCNN Paper
https://herbwood.tistory.com/


(03강) (03강) Object Detection Library

통합된 라이브러리 없음
kaggle/실무에서는 MMDetection, Detectron2 사용

MMDetection

pipeline

  • 2 Stage 모델은 크게 Backbone / Neck /
    DenseHead / RoIHead 모듈로 나눌 수 있음
    Backbone : 입력 이미지를 특징 맵으로 변형
    Neck : backbone과 head를 연결, Feature map을 재구성 (ex.FPN)
    DenseHead : 특징 맵의 dense location을 수행하는 부분
    RoIHead : RoI 특징을 입력으로 받아 box분류, 좌표 회귀 등을 예측하는 부분
  • 각각의 모듈 단위로 커스터마이징
  • 이러한 시스템은 config 파일을 이용해 통제됨

Config file

  • 데이터 셋, 모델, 스케쥴러, optimizer 정의 가능
  • 다양한 obj det 모델의 config 파일 정의되어 있음
  • configs/base/ 폴더에 가장 기본이 되는 config 파일이 존재 : dataset, model, schedule, default_runtime 4가지 기본 구성요소 존재

dataset

  • samples_per_gpu
  • workers_per_gpu
  • traia, val, test
  • data pipeline

model
2stage model

  • type :
  • backbone : feature map을 얻는 네트워크
  • neck : backbone과 head를 연결, feature map 재구성
  • rpn_head : region proposal network
  • roi_head : region of interest
  • bbox_head
  • train_cfg
  • test_cfg

새로운 backbone 등록 가능

module import
등록한 backbone 사용

run time setting
optimizer
learning rate, runner

Detectron2

Facebook AI Research의 Pytorch 기반 라이브러리
Object Detection 외에도 Segmentation, Pose prediction 등 알고리즘도 제공

pipeline

Setup Config / Setup Trainer / Start Training

과제 수행 과정 및 결과


피어 세션


학습 회고

profile
ML/AI Engineer
post-custom-banner

0개의 댓글