Object Detection 문제 영역의 출력값

  • x_min : 물체의 Bounding Box 의 왼쪽 위 (Left-Top) x 좌표
  • y_min : 물체의 Bounding Box 의 왼쪽 위 (Left-Top) y 좌표
  • x_max : 물체의 Bounding Box 의 오른쪽 아래 (Right - Bottom) x 좌표
  • y_max : 물체의 Bounding Box 의 오른쪽 아래 (Right - Bottom) y 좌표
  • class : Bounding BOx에 속한 물체의 class
  • confidence : Bounding Box에 실체 물제가 있을 것이라고 확신하는 정도를 나타내는 값(0.0~1.0 사이의 값)

Open Image Dataset Ground Truth

  • Obhect Detection 문제 영역의 Ground Truth 데이터는 사람이 지정한 Bounding Box와 Class Label
  • 정답 Ground Truth 데이터와 비교했을때, 예측 값의 성능을 비교하기 위한 Metric이 필요

Metric 1

Intersection over Union(IoU) Metric

  • IoU은 1개의 Bounding Box와 1개의 Bounding Box가 얼마나 일치하는 지를 0.0~1.0 사이의 값으로 표현
  • 2개의 Bounding Box가 일치할수록 1.0에 가까운 값이 되고, 일치하지 않을 수록 0.0에 가까운 값

Metric 2

Precision, Recall, F1

  • Precision : 정밀도, 검색된 결과 중 관련 있는 것으로 분류된 결과물의 비율 $$\text{Precision} = \frac{\text{TP}}{\text{TP + FP}}$$
  • Recall : 재현율, 관련 있는 것으로 분류된 항목들 중 실제 검색된 항목들의 비율 $$\text{Recall} = \frac{\text{TP}}{\text{TP + FN}}$$
  • F1 : 정밀도와 재현율의 조화 평균, 정밀도와 재현율을 한 번에 비교 가능 $$\text{F1} = 2 - \frac{\text{precision - Recall}}{\text{Precision + Recall}}$$

Average Precision(AP)

  • Positive_판단 기준 : 일정한 임계치의 IoU를 넘기면 맞춘 것으로 간주
  • Average Precision(AP) : 재현율 별 정밀도의 평균

Mean Average Precision(MAP)

  • class 들의 평균 정밀도의 평균

Metric 3

MS COCO Metric

  • IoU가 0.5,0.55,0.6,0.65,.. 일떄의 평균 정밀도를 구하는 법 등

Object Detection Datasets

  • Object Detection 문제를 학습 시키기 위해 정답 Bounding Box와 Label이 지정된 이미지 필요
  • 대표적인 Object Detection을 위한 데이터셋으로 Pascal VOC, MS COCO 데이터 셋 등 존재
  1. Pascal VOC Dataset
  • 20 classes, 4 categories
    • Person(person)
    • Animal(bird, cat, cow, dog, horse, sheep)
    • Vehicle(aeroplane, bicycle, boat, bus, car, motorbike, train)
    • Indoor(bottle, chair, dining table, potted plant, sofa, tv/monitor))
      • VOC2007
      • VOC2012
  1. MS-COCO
  • Microsoft, 80 labels
  1. KITTI
  • 자율주행연구 위한 이미지
  • 21 training sequences, 29 test sequences
  • 8 classes
    • Car, Van, Truck, Pedestrian, Person(sitting), Cyclist, Tram, Misc
  1. Open Image Dataset v4
  • Google, 600 labels

Yolo concept

  • image를 $S \times S \text{ Grid Cell}$로 나누고 Grid Cell 별로 B개의 Bounding Box 예측
  • YOLO 모델 최종 Output : $S \times S \times (5 * B + c)(5:x,y,w,h,\text{ confidence})$
  • ex) S = 7, B = 2, C = 20, then $7 \times 7 \times 30$ 이 output

$x,y,w,h,\text{ confidence}$

  • x : grid cell 내의 x 위치 (0~1 사이의 값)
  • y : grid cell 내의 y 위치 (0~1 사이의 값)
  • w : 전체 이미지 대비의 width (0~1 사이의 값)
  • h : 전체 이미지 대비의 height (0~1 사이의 값)
  • confidence : 이미지 내의 object가 있을 것이라고 확신하는 정도(0~1 사이의 값)

Non-Maximum Suppression Algorithm 동작 과정

  1. confidence $\leq$ 이하의 Bounding Box를 제거
  2. class 별로 confidenxe가 가장 높은 Bounding Box 가 앞으로 오도록 전체 Bounding Box를 내림차순 정렬
  3. 가장 confidence가 높은 Bounding Box와 나머지 Bounding Box를 비교해서 2개의 Bounding Box의 IoU $\geq$ 0.5라면 Confidence 가 작은 Bounding Box를 제거
  4. 제거되지 않은 Bounding Box 중에서 Confidence가 가장 높은 Bounding Box와 나머지 BOunding Box간에 3번 과정 반복
  5. 3,4 과정을 전체 Bounding Box에 대해서 진행
  6. 2~5 과정을 전체 class에 대해서 진행

본문

  • end to end 종단 간 학습 : 중간 개입 필요없음
  • state-of-the-art
  • unified modle for object detection
  • 빠르지만 작은 물체에 대해 정확도는 떨어지는 경향
  • 24개 conv
  • 2개 layer
  • object 있으면 람다값 5배(중요도 높게)
  • object 없으면 람다값 0.5배(중요도 낮게)
  • loss function과 highrst current IOU 비교

(loss function)

$$\lambda_{coord}\sum^{S^2}_{i=0}\sum^{B}_{j=0} \mathbb{1}^{obj}_{ij} [(x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2]$$ $$+ \lambda_{coord}\sum^{S^2}_{i=0}\sum^{B}_{j=0} \mathbb{1}^{obj}_{ij} [(\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2]$$ $$+ \sum^{S^2}_{i=0} \sum^{B}_{j=0} \mathbb{1}^{obj}_{ij} (C_i - \hat{C}_i)^2$$ $$+ \lambda_{noobj}\sum^{S^2}_{i=0}\sum^{B}_{j=0}\mathbb{1}^{noobj}_{ij}(C_i - \hat{C}_i)^2$$ $$+\sum^{S^2}_{i=0}\mathbb{1}^{obj}_{i} \sum_{c \in classes}(p_i(c) - \hat{p}_i(c))^2$$

딥러닝 논문 구현 프로젝트 파일 구조

  • train.py
    • 모델 class를 인스턴스로 선언하고 for-loop을 돌면서 grdient descent를 수행하면서 parameter를 update하는 logic
  • evaluate.py, test.py
    • training된 parameter를 불러와서 evaluation이나 test, inference를 진행하는 logic
  • model.py
    • keras.subclassing 형태의 모델 구조 class 정의
  • dataset.py
    • 데이터 전처리 밒 batch 단위로 묶는 logic
  • utils.py
    • 딥러닝 메인 logic 외에 utility성 기능들을 모아 놓은 로직
  • loss.py
    • 모델의 loss function을 정의

conda install python=3.7 바꿔줘야 tensorflow설치 가능