YOLO(You only look once)
- Object Detection 문제 영역의 출력값
- Open Image Dataset Ground Truth
- Metric 1
- Metric 2
- Metric 3
- Object Detection Datasets
- Yolo concept
- Non-Maximum Suppression Algorithm 동작 과정
- 본문
- 딥러닝 논문 구현 프로젝트 파일 구조
- 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 사이의 값)
- Obhect Detection 문제 영역의 Ground Truth 데이터는 사람이 지정한 Bounding Box와 Class Label
- 정답 Ground Truth 데이터와 비교했을때, 예측 값의 성능을 비교하기 위한 Metric이 필요
Intersection over Union(IoU) Metric
- IoU은 1개의 Bounding Box와 1개의 Bounding Box가 얼마나 일치하는 지를 0.0~1.0 사이의 값으로 표현
- 2개의 Bounding Box가 일치할수록 1.0에 가까운 값이 되고, 일치하지 않을 수록 0.0에 가까운 값
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 들의 평균 정밀도의 평균
MS COCO Metric
- IoU가 0.5,0.55,0.6,0.65,.. 일떄의 평균 정밀도를 구하는 법 등
- Object Detection 문제를 학습 시키기 위해 정답 Bounding Box와 Label이 지정된 이미지 필요
- 대표적인 Object Detection을 위한 데이터셋으로 Pascal VOC, MS COCO 데이터 셋 등 존재
- 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
- MS-COCO
- Microsoft, 80 labels
- KITTI
- 자율주행연구 위한 이미지
- 21 training sequences, 29 test sequences
- 8 classes
- Car, Van, Truck, Pedestrian, Person(sitting), Cyclist, Tram, Misc
- Open Image Dataset v4
- Google, 600 labels
- 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 사이의 값)
- confidence $\leq$ 이하의 Bounding Box를 제거
- class 별로 confidenxe가 가장 높은 Bounding Box 가 앞으로 오도록 전체 Bounding Box를 내림차순 정렬
- 가장 confidence가 높은 Bounding Box와 나머지 Bounding Box를 비교해서 2개의 Bounding Box의 IoU $\geq$ 0.5라면 Confidence 가 작은 Bounding Box를 제거
- 제거되지 않은 Bounding Box 중에서 Confidence가 가장 높은 Bounding Box와 나머지 BOunding Box간에 3번 과정 반복
- 3,4 과정을 전체 Bounding Box에 대해서 진행
- 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설치 가능