12) Object Detection
Object Detection and Object Segmentation
Object classification : 그림안에 있는 각각 다른 카테고리(object categories)의 probability를 예측합니다.
Object localization : classification에 location개념도 추가된 것으로 그림에 어떤 물체가 있고 그 물체가 어디에 있는지 까지 확인합니다.
Object detection : 같은 카테고리안에서의 각 객체까지 detection이 가능한 것입니다.
segmentation에서는 2가지로 또 나뉘는데 Semantic segmentation과 Instance segmentation이며, Semantic segmentation(image segmentation): clusturing의 개념이며 동일한 object class에 속하는 이미지 영역을 함께 표시합니다. Instance segmentation은 영상에서 object를 검출하는 것 외에도, detection개념처럼 class의 안에 각 객체에 대해 박스를 그려 extract하는 것이라고 볼 수 있습니다.
Object detection이 필요한 분야는 Optical Character recognition,Self-driving cars,Robotics,Object tracking and counting와 같은 것들이 있습니다.
Object Detection 알고리즘의 2가지 groups
1. Classification based algorithm
먼저 이 알고리즘은 다음과 같은 순서로 진행됩니다.
1) Region of Interest(ROI)의 여러개를 제공합니다.
2) 이 영역에 컨볼루션 신경망을 적용하여 물체의 존재를 탐지합니다.
그리고 문제점 중 하나는 ROI에 대한 감지가 느리다는 것입니다. 그리고 coputation이 slow하며 expensive합니다.
위의 방법을 이용하는 알고리즘의 예는 R-CNN입니다.
2. Regression-based algorithm
Classification based algorithm와 달리 ROI의 selection이 없습니다. 대신에 이 알고리즘은 전체이미지 class들과 bounding boxes를 한번에 predicts할 수 있습니다. 이 방법은 classification-based algorithms보다 빠른 detection속도입니다.
위의 방법을 이용하는 알고리즘은 YOLO입니다.
YOLO는 매우 빠르며 실시간으로 작동해서 자율주행같은 case에서 사용가능합니다.
History of Fast R-CNN
R-CNN
선택적 검색을 사용하여 호출된 이미지에서 2000개의 영역만 추출합니다.
분류는 선형 회귀 분석에 의한 SVM 및 상자 예측에 의해 수행됩니다.
greedy algorithm은 유사한 영역을 더 큰 영역으로 재귀적으로 결합하는 데 사용됩니다.
R-CNN의 주요 병목 현상은 각 region proposal에 대한 독립적인 CNN 순방향 전파에 있으며, 이는 다른 proposal과 중복됩니다.
Fast R-CNN
R-CNN의 빠른 R-CNN의 주요 개선 사항 중 하나는 CNN 순방향 전파가 전체 이미지에 대해서만 수행된다는 것입니다.
빠른 R-CNN은 관심 영역(RoI) 풀링 계층을 도입합니다. CNN 출력과 영역 제안은 이 계층에 입력되어 연결된 특징을 출력하여 모든 영역 제안을 추가로 추출합니다.
Faster R-CNN
정확도 손실 없이 지역 제안을 줄이기 위해, the faster R-CNN은 선택적 검색을 region proposal CNN으로 대체할 것을 제안합니다.
경계 상자 예측에 anchor box가 사용됨
Mask R-CNN for Instance Segmentation
객체의 픽셀 수준 위치도 훈련 이미지에 레이블이 지정되어 있기 때문에 마스크 R-CNN은 이러한 세부 레이블을 효과적으로 활용하여 객체 감지의 정확도를 더욱 향상시킬 수 있습니다(2017).
마스크 R-CNN은 the faster R-CNN에서 관심 영역 풀링 계층을 RoI 정렬 계층으로 대체합니다.
->이 관심 영역 정렬 레이어는 픽셀 수준 예측을 위해 특징 맵의 공간 정보를 보존 하기 위해 이중 선형 보간을 사용합니다.

YOLO
"You Only Look Once: Unified, Real-Time Object Detection", Joseph
Redmon; Santosh Divvala; Ross Girsick; Ali Farhadi, 2016 IEEE논문에서 제기된 것으로 객체 감지에 easy and fast한 강점을 갖고 있습니다.
-> Concept
-단일 회귀 문제로 탐지
-단일 컨볼루션 네트워크로 개발
-전체 이미지에 대한 reason globally
-일반화 가능한 표현 학습
->Base CNN architecture
-GoogleNet에서 영감을 얻은 제품
-Darknet을 사용하여 구현
->어떻게 yolo가 work하는지?
ROI는 없고 대신 욜로는 이미지를 여러 개의 𝑆x𝑆 그리드 셀로 분할합니다. 각 셀은 여러 개의 경계 상자를 예측하는 역할을 합니다.
non-max suppression processes를 통해서 원치않는 경계 박스들을 제거하고 나면 가장 높은 확률의 경계 상자가 남습니다.

그렇다면 Non-Maximum Suppression for Prediction은 어떻게 작동하는지 보면 다음과 같습니다.
NMS는 겹치는 많은 존재들 중에서 하나의 존재(예: 경계 상자)를 선택하는 것입니다.
->대부분의 객체 탐지 알고리즘은 NMS를 사용하여 탐지된 많은 경계 상자를 몇 개로 축소합니다.
->NMS를 이용한 bounding box 선정과정
1단계: 객관성 점수가 가장 높은 박스 선택
2단계: 이 상자의 겹침(결합에 대한 교차점; IoU)을 다른 상자와 비교합니다
3단계: 오버랩(IoU) > 50% (동일한 물체를 의미함)로 경계 박스 제거
4단계 : 다음으로 객관성이 높은 점수로 이동합니다
5단계: 마지막으로 2-4단계를 반복합니다.
Yolo의 loss function

Object Detection Metrics
모델을 구축하고 나면 다음으로 당신의 모델은 얼마나 좋은가?하는 질문이 생깁니다.

위의 표를 참고해서
Accuracy(ratio of correct predictions)

Precision(전체 예측 긍정에 대한 정확하게 예측된 긍정의 비율)

,Recall(Sensitivity)(전체 실제 양성 관측치에 대한 정확하게 예측된 양성의 비율)

F1 score(the weighted average of Precision and Recall)을 각각 보면 다음과 같습니다.

평균 정밀도(AP): 다양한 리콜에 대한 평균 정밀도. 그것은
즉, 한 클래스에 대한 precision-recall curve 의 평균
Precision-Recall Curve는 정밀도와 리콜 사이의 관계를 보여줍니다. 일반적으로,
-> high precision and low recall 모델은 매우 자신감 있는 예측을 제공하지만 많은 경우를 놓칩니다.
-> low precision and high recall 모형은 대부분의 개체를 찾을 수 있지만 예측에는 잘못된 양의 값이 많이 포함됩니다.

Mean AP (mAP): average AP over classes.


Anchor box란?
앵커 박스는 일정한 높이와 폭의 미리 정의된 경계 박스의 집합입니다. 이 박스들은 탐지하려는 특정 객체 클래스의 스케일과 aspect ratio를 capture하도록 정의되며 일반적으로 훈련 데이터 세트의 객체 크기를 기반으로 선택됩니다.
->네트워크는 모든 타일 앵커 박스에 대한 배경, IoU 및 오프셋과 같은 확률 및 기타 속성을 예측합니다.
->네트워크는 경계 상자를 직접 예측하는 것이 아니라 타일 앵커 상자에 해당하는 확률과 정밀도를 예측합니다.
->YOLOv1에는 앵커박스가 없습니다. v2에는 5개의 앵커박스가 사용되고, v2에는 9개의 앵커박스가 사용됩니다.
-->앵커는 대상 데이터 세트로 정의됩니다.
Cautions with Gradient Blow up?
Large gradients는 learning process를 벗어나게 하는데 그이유는
->Bad learning rate policy and params(학습률 정책 및 매개변수 불량)
유효한 학습 속도를 계산하지 못하고 대신 'inf' 또는 'nan'을 얻으며, 이 잘못된 속도는 모든 업데이트를 곱하여 모든 매개 변수를 무효화합니다.
->Faulty Loss function(결함이 있는 loss function)
때때로 손실 레이어의 손실 계산으로 인해 난이 나타납니다.
예를 들어 정규화되지 않은 값으로 Loss 계층을 피드하거나 버그가 있는 사용자 지정 Loss 계층을 사용하는 등입니다.
->Faulty input(입력오류)
나노가 들어있는 입력이 있을 수도 있습니다! 학습 과정이 "히트"하면 이 잘못된 입력 - 출력은 나노가 됩니다.
->Instabilities in BatchNorm(불안정성)
일부 설정에서 BatchNorm 계층은 수치 불안정성으로 인해 nan을 출력할 수 있다고 보고되었습니다.
———————————————————————