일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DP
- canny edge detection
- 그래프 이론
- MinHeap
- clustering
- exists
- classification
- 강화학습
- 딥러닝
- 인공지능
- TD
- 자료구조
- machine learning
- 머신러닝
- edge detection
- BFS
- IN
- Reinforcement Learning
- MySQL
- image processing
- SIFT
- 백준
- Python
- AlexNet
- C++
- Mask Processing
- dfs
- sklearn
- opencv
- dynamic programming
- Today
- Total
JINWOOJUNG
[ 컴퓨터 비전 ] Ch5. Deep Learning...6 본문
본 컴퓨터 비전 개념과 기법들에 대한 공부를 진행하면서 배운 내용들을 중심으로 정리한 포스팅입니다.
책은 Computer Vision: Algorithms and Applications를 기반으로 공부하였습니다.
또한, 인하대학교 박인규 교수님의 컴퓨터 비전 과목을 기반으로 제작된 포스팅입니다.
https://jinwoo-jung.tistory.com/115
Computer VisionTasks
컴퓨터 비젼에는 여러 Task가 있다.
- Classification
- 객체(입력 영상)의 Class가 무엇인지 분류
- Semantic Segmentation
- 영상을 화소별 Category로 분할(분류)
- Object Detection
- 객체 검출 : Classification + Localization
- Instance Segmentation
- 객체(Instance)별로 Segmentation
- Object Detection으로 검출 된 Bounding Box 내 어느 Pixel이 해당 클래스에 해당되는지 분할
그 중에서 Object Detection Task를 자세히 살펴보자.
Object Detection
객체 검출은 Input으로 주어지는 하나의 RGB 영상에 대하여 검출한 객체의 집합(A set of detected objects)을 반환하는 Task이다. 각각의 객체에 대하여 해당 객체의 Category Label(Classification), Bounding Box(Localization), Score(Confidance)를 예측하여 반환한다. Category Label는 후보가 되는 Categories 중 가장 높은 하나를 반환하며, Bounding Box는 객체의 위치를 표현하며, 왼쪽 상단 좌표인 $x, y$와 width, height를 반환한다. 마지막으로 Confidence는 신뢰도로 0~1의 범위를 가지며 검출한 객체의 정확도를 의미한다.
Object Detection Task가 어려운 이유는 여러가지가 있다. 먼저 검출한 객체가 많으면 다수의 결과를 반환해야 하는 Multiple Outputs가 있다. 또한, Object Detection은 객체가 무엇인지 분류하는 Classification, 객체의 위치를 결정하는 Localization이 이루어지는 Task인데, 이러한 상이한(관련이 없는) 2가지 Output을 반환해야 하는 Multiple types of output이 있다. 마지막으로, 기존 Classification Task에서는 224x224 작은 Resolution을 가지는 영상으로 진행했지만, 해당 Resolution 에서의 객체는 매우 작아 검출이 힘들어 Large Image가 요구된다.
Detecting a Single Object
단일 객체를 검출하는 과정을 먼저 생각 해 보자.
입력 영상이 주어지면, AlexNet과 같은 Backbone Network를 거치며 CNN Feature Vector가 추출된다. Feature Vector를 기반으로 Classification과 Localization Task가 동시에 이루어진다.
먼저, Classification의 경우 Feature Vector는 검출해야 하는 Class 개수 만큼의 노드와 Fully Connected 된다. 이후 각각의 Class에 대해서 Score가 계산되고 Softmax를 거쳐, Correct Label과의 유사도인 Cross-Entropy Loss가 계산된다.
Localization의 경우 객체의 위치를 특정하는 Bounding Box로 표현되는데, 이는 왼쪽 상단의 좌표 $x, y$와 width $w$, height $h$ 정보를 포함한다. 따라서 Feature Vector는 4개의 Node와 Fully Connected 된다. 이후 Correct Box와의 유사도인 L2 Loss를 계산한다.
각각의 Head에서 계산되는 Loss를 줄이는 방향으로 Object Detection Model은 학습하게 되는데, 결국 Object Detection Task를 Single Regression Task로 다루는 것이다.
실제로 Backbone Network는 Big Data(ImageNet)를 기반으로 이미 학습된 모델을 Fine Tuning을 통해 Downstream Task를 위해 사용하는 전이 학습(Transfer Learning)을 사용한다. 모델은 각각의 태스크에 맞춰 Classification Head와 Localization Head 같은 "Head"로 나뉘는데, 이 두 헤드는 서로 독립적이기에 각 과정에서 계산된 Loss를 가중 합(Weighted Sum)하여 Multitask Loss를 계산한다. 이를 Backpropagation 하는 과정에서 Classification Head 부분이 학습될 때는 Localization Head를 Freezing 시키고, 그 역으로 수행하는 Alternative Training 과정을 거쳐 학습하게 된다.
이 과정은 하나의 영상에 대하여 하나의 객체를 검출함을 가정하였다. 하지만, 하나의 영상에 여러개의 객체를 검출해야 한다면, 그 수만큼 Output은 증가하기에 어려운 Task이다.
Detecting Multiple Objects
다중 객체를 검출하는 가장 Naive한 접근은 Sliding Window이다.
Sliding Window 기법은 Window를 모든 영상으로 Slide하여 Words가 존재하는지 여부를 확인합니다. 이때, Object는 Scale이 다르기 때문에 Window 크기를 다르게 하여 진행한다.
아래와 같이 각 Window 안에 어떠한 객체나 배경이 존재하는지 분류하는 과정에서 수많은 윈도우가 요구되기에 이는 실용적이지 않습니다. 따라서 새롭게 등장한 개념이 Anchor Boxes이다다. 이는 YOLO 계열 Model에서 많이 사용된다.
먼저 Anchor Box란 Model이 객체의 위치와 크기를 예측하기 위해 사용되는 사전 정의된 고정된 Bounding Box(Patch)이다.
Yolo와 같은 Single-Stage Detection에서는 먼저 Bacbone에서 CNN Feature Vector가 추출됩니다. 이를 기반으로 객체가 있을법한 후보군의 위치(Anchor Point)를 검출한다. 이후 Anchor Point를 중심으로 K개의 Anchor Boxes를 생성해서 해당 Anchor를 기반으로 탐색을 진행한다. 이를 통해 기존 Sliding Window와 달리 탐색해야 할 Box(Window)가 적어 더 빠르게 검출이 가능하면서 높은 정확도를 보이기 때문에 Anchor Box를 사용하게 된다.
Region Proposal은 Two-Stage Detection에서 사용되는 영역 제안 기법으로, 객체가 있을 법한 위치에서 객체를 감싸는 Box의 집합을 찾는 것이다.
Region Proposals를 생성하는 알고리즘 중 하나는 Selective Search이다. 이는 영상을 Over Segment 해서 색상, 텍스쳐 등 유사한 특징을 가지는 픽셀을 Grouping하여 각각의 Segment를 생성한다. 이를 기반으로 Segement를 생성한 뒤, 그에 맞는 Region Proposal을 생성하는 기법이다. Region Proposal 역시 영상 전체에 대한 Window 전부를 탐색하는 것이 아닌 Region Proposal만 탐색하면 되므로 훨씬 효과적이다.
Intersection over Union(IoU)
그렇다면 객체 검출의 성능 지표는 무엇이 있을까? 가장 대표적인 것은 IoU이다.
Intersection over Union은 간단하게 말하면 합집합 분의 교집합으로 표현할 수 있다. 아래 사진과 같이 Ground Truth에 해당되는 Bounding Box와 모델이 예측한 Bounding Box의 합집합 분에 두 BBox의 교집합이 된다. 만약 모델이 Ground Truth와 동일하게 예측한다면 1이 되기에 IoU의 범위는 $[0,1]$이 된다.
Non-Maximum Suppression(NMS)
디지털 영상처리에서 Canny Edge Detection을 공부할 때, Edge의 Local Maximum만 선택하여 Edge Thining을 한 기억이 있을 것이다. 이처럼 NMS 역시 하나의 객체에 대하여 여러 BBox를 모델이 예측한 경우 최적의 BBox만 유지하는 것이다.
먼저 Confident를 기준으로 검출 결과를 유지시킨다. 이때, 1번과 4번의 검출 결과처럼 Overlap이 발견되는 경우 즉, 이미 검출된 결과(Region 1)와 새롭게 검출한 결과(Region 4)의 IoU를 계산하여 Threshold 보다 크게 되면 Overlap이라고 판단한다. 이때, Confident를 기준으로 두 검출 결과 중 더 Confident가 큰 결과를 유지시키고, 작은 결과를 삭제하여 동일한 객체에 대하여 최적의 결과만 유지시킨다.
따라서 새로운 검출 결과는 기존의 검출 결과의 BBox와 IoU를 계속 비교 해 가면서 최적의 결과만 유지시키며, IoU가 Threshold 보다 작은 경우 다른 객체에 대한 검출 결과로 판단하게 된다.
하지만, 단순히 Threshold 만으로 Overlap을 판단하기에는 문제가 있다.
예를들어, 아래와 같이 파란색 객체가 먼저 검출 되었고, 다른 객체가 겹쳐있는 상황에서 모델이 빨간색으로 예측하였으며, 동일한 파란색 객체에 대하여 초록색으로 모델이 중복 검출하였다고 하자. 만약, NMS Threshold를 0.4라고 설정하면, 빨간색, 초록색 BBox 모두를 삭제해야 하기에 False Negative 즉, 다른 객체(빨간색)을 검출 하였지만 아니라고 잘못 판단(FN)할 수 있다. 또한, Threshold를 0.6으로 설정하면 둘 다 맞다고 판단하기에 동일 객체(초록색)을 중복 검출(FP)하게 된다.
따라서 IoU가 높아서 Overlap이 많이 되는 경우 Score를 0으로 감소시키는 것이 아닌, IoU에 비례하여 Score를 감소시켜 IoU에 따른 가중치를 부여한다. 만약 IoU가 높으면 $1 - iou(M, b_i))$가 작아지기 때문에 Score를 많이 감소하고, IoU가 낮으면 Score를 조금 감소시킨다. 이때, $M$은 해당 클래스에서 가장 Confident가 높은 검출 결과, $b_i$는 동일한 클래스로 검출 된 결과를 의미한다.
Precision and Recall
또다른 성능지표로는 Precision(정밀도)와 Recall(검출율)이 있다. 이는 이전에 자세히 설명했으므로 해당 포스팅을 참고 바란다.
https://jinwoo-jung.tistory.com/93
간단하게 살펴 보자면, Precision(정밀도)는 모델이 검출한 결과 중 true Ground Truth를 잘 검출한 비율을 의미한다.
$$Precision = \frac{TP}{TP+FP} $$
Recall(검출율)은 Ground Truth 중 true Ground Truth를 잘 검출한 비율을 의미한다.
$$Recall = \frac{TP}{TP + FN}$$
두가지 성능 지표가 유용한 이유는 Precision과 Recall은 하나가 커지면 하나가 줄어드는 관계를 가지기 때문이다.
만약 Threshold를 키운다면 실제 매우 높은 확률로 정확한 것만 Positive라고 판단하기에 Precision은 매우 높아 질 것이다. 하지만, FN(틀렸다고 잘못 검출한)이 많아지기 때문에 Recall은 작아진다. 반대로, Threshold를 너무 낮게 하면, Recall은 커지지만 FP(맞다고 잘못 검출한)이 많아져 Precision이 작아진다.
따라서 아래와 같이 Recall-Precision Curve(Average Precision)의 면적(AUC)로 성능을 평가하게 된다.
아래 예시를 통해 살펴보자. 모델이 12개를 검출하였는데, 실제로 정답은 6개인 상황입니다. 12개의 검출 결과가 있기에 Confidence Score를 Threshold로 판단하고 Precision, Recall을 계산하면 된다. 만약 Rank가 6인 Confidence를 Threshold로 했을 때, T가 3, F가 3이므로 모델이 자동차라고 검출한 결과는 6개이고, 그 중 3개는 True, 3개는 False라는 의미이다. 따라서 TP = 3, FP = 3이므로 Precision은 0.5가 된다. 그리고 Threshold가 Rank가 6일 때의 Confidence이므로, 나머지 3개의 True에 대한 검출은 검출하지 못한다고 판단하기에 FN = 3이 된다. 따라서 Recall 역시 0.5가 된다.
이처럼 각각의 단계에서 Precision, Recall을 계산하면 오른쪽과 같고, 일반적으론 계산의 편의를 위해 일부를 채워 AUC를 계산하여 모델을 평가하게 된다.
mean Average PRecision(mAP)
앞선 AUC를 계산하는 것은 하나의 클래스에 대해서만 수행했다. 이를 전체 클래스에 대하여 수행하고 평균 낸 것이 mAP이며, 이를 기반으로 모델의 성능을 비교하는 것이 일반적이다.
'2024 > Study' 카테고리의 다른 글
[ 컴퓨터 비전 ] Ch5. Deep Learning...7 (0) | 2024.12.07 |
---|---|
[ 컴퓨터 비전 ] Ch5. Deep Learning...5 (0) | 2024.12.02 |
[ 컴퓨터 비전 ] Ch5. Deep Learning...4 (0) | 2024.11.26 |
[ 컴퓨터 비전 ] Ch5. Deep Learning...3 (0) | 2024.11.26 |
[ 컴퓨터 비전 ] Ch5. Deep Learning...2 (0) | 2024.11.23 |