(5강) Object detection
Object detection
Object detection은 Computer Vision분야의 대표적인 Task로, Image내의 객체에 해당하는 Bounding Box를 계산하고, 분류하는 문제이다. 이와 같은 Task를 수행하는 것을 통해서 더 진보된 형태의 Task를 수행할 수 있다. Classification이나 Semantic Segmentation과 비교하면, Bounding Box를 구성해야하는 점에서 난이도가 더 높은 Task라고 할 수 있다. 이는 자동 운전이나 OCR과 같이 실제 산업에서 사용될 수 있는 기술의 근간이 된다.
Two-stage detector (R-CNN family)
전통적으로는 사람의 직관을 모델링한 알고리즘을 사용해서 이 Task를 풀고자 했다. 예를 들어, Histogram of Oriented Gradients (HOG)를 통해 각 물체의 경계선에 대한 특징을 모델링하고, SVM과 같이 간단한 선형 판별기로 각 경계선을 학습시켜 물체를 판별하는 것이다. 이는 물체의 특징을 사람이 고안하여 디자인하는 형태로, 해당 부분은 학습이 불가능하다는 단점이 존재한다.
비교적 최근까지 사용된 알고리즘으로는 Selective Search가 있다. Selective Search는 물체의 후보군을 탐지해주는 알고리즘으로 다음과 같이 동작한다.
- Image 내의 모든 부분을 잘게 구분한다.
- 비슷한 영역을 한 개의 영역으로 병합해 나간다.
- 남은 모든 영역을 후보로 Box를 구성한다.
이 알고리즘을 통해 얻은 물체 후보군을 Region Proposal로 사용하는 형태의 모델이 비교적 최근까지 사용되었다.
AlexNet에 의해 ML의 패러다임이 바뀌고 나서, 곧바로 Object Detection Task에 적용되기 위해 개발된 모델이 R-CNN이다. 이는 위에서 살펴본 방법에 비해 압도적으로 높은 성능을 보여주었다. R-CNN의 동작을 살펴보면 다음과 같다.
R-CNN의 대표적인 한계는 다음과 같다.
- 각 Region Proposal 마다 Process가 진행되어, 속도가 느리다.
- Region Proposal을 추출하는 Algorithm은 사람의 직관으로 구성되었으며, 학습이 불가능하다.
Fast R-CNN은 R-CNN의 속도를 개선시키는 모델로 등장했다. R-CNN은 CNN을 미리 통과시켜 Feature Map을 만들고, Region Proposal에 해당하는 부분을 연산하는 형태로 구성되었다. 즉, Feature Map을 미리 출력하고 재활용 하는 형태로 속도를 크게 향상시켰다. Fast R-CNN의 모식도는 다음과 같다.
Fast R-CNN은 속도 측면에서 큰 성과를 거뒀지만, 여전히 사람이 디자인한 Region Proposal Algorithm에 의존하고 있다는 한계가 존재했다.
Faster R-CNN은 물체의 후보군을 제안하는 부분까지 Neural Network로 구성하여, Object Detection Task 최초의 End-to-End 모델을 달성했다. 모든 요소가 Neural Network로 구성되어, 모든 부분이 학습 가능해진 것이다. Faster R-CNN의 모식도는 다음과 같다.
RPN을 더 자세히 살펴보면, 다음과 같은 모식도로 표현할 수 있다.
RPN을 통한 Region 중에는 동일한 Object을 Detection한 Region들이 존재할 수 있다. 동일한 Object에 대한 Bounding Box를 소거하는 방법으로 Non-Maximum Suppression (NMS)를 사용한다.
Single-stage detector
Single-stage 혹은 One-stage Detection Model은 명시적인 Region Proposal 없이 Object Detection을 수행하는 구조를 의미한다. Two-stage Detection Model에 비해 정확도는 다소 떨어지나, Region Proposal을 생략하므로써 매우 빠른 속도를 자랑한다.
You Only Look Once (YOLO)는 Single-Stage에 대표적인 모델이다. YOLO의 모식도는 다음과 같다.
YOLO는 Faster R-CNN에 비해 3배 가량 빠른 속도를 보였으나, 정확도 면에서 다소 떨어지는 성능을 보였다.
Single Shot Multi-box Detector (SSD)는 정확도의 성능을 올리고자, 여러 Feature Map에서 예측을 수행하는 방법을 사용했다. 이를 통해서 다양한 크기의 Bounding Box를 조금 더 정확하게 예측할 수 있게 되었다.
SSD는 단순한 Network 구조와 아이디어를 통해 YOLO보다 빠르고 좋은 정확도를 보였다.
Single-stage detector vs. Two-stage detector
Single-stage Detector는 RoI를 없앴기 때문에 Image의 모든 영역에서 Bounding Box를 예측하게 된다. 일반적인 Image는 배경이 크고 물체는 작은 경우가 다수이며, 각 Object 마다 한 개의 Bound Box만이 Positive Sample로 존재하게 된다. 이러한 Class Imbalance Problem은 Single-stage의 고질적인 문제였다.
이를 해결하는 방법으로 Focal Loss가 제시되었다. Focal Loss는 Cross Entropy를 개발한 형태로, Class의 등장 확률값을 사용한다. 이를 통해 Class Imbalance 문제를 어느정도 해소하면서, 더 Sharp한 Loss Function을 구성한다.
즉, Focal Loss는 쉬운 Sample에 대해서는 낮은 Loss값을 부여하고, 어려운 Sample에 대해서는 높은 Loss값을 부여하는 형태이다.
Focal Loss를 제시한 논문에서는 Feature Pyramid Network (FPN)을 동시에 제시한다. FPN은 Multi Feature Map을 활용하여, 각 Resolution에 해당하는 값을 더해 값을 출력한다. FPN 구조를 활용한 RetinaNet의 모식도는 다음과 같다.
Multi-scale Prediction을 위한 구조는 동일하나, U-Net은 Concatenation 연산을 사용하고, FPN은 더하기 연산을 사용한다. RetinaNet은 SSD보다도 빠른 속도를 보이고, 더 높은 성능을 보였다.
Detection with Transformer
요새의 트렌드로, NLP에서 큰 성공을 거둔 Transformer를 CV에 적용하고자 하는 움직임이 있다. DETR은 Object Detection Task에 적용된 Transformer 구조의 Model이다.
DETR의 Object Query는 미리 지정된 N개의 Maximum Value를 정하고, 이에 대한 값을 입력함으로써 결과를 얻는 형태이다.
(6강) CNN visualization
Visualizing CNN
Model의 동작을 흔히 Black Box라고 취급하는 경우가 많다. 이를 시각화 하는 것은 Model에 대한 이해의 깊이를 더해준다. 각 Filter가 어떤 정보를 포함하고 있는지 암시적으로나마 이해할 수 있고, 이를 통해 더 나은 모델링 혹은 디버깅이 가능한 것이다. 즉, Visualizing은 Improve or Debugging Tool을 얻는 것이라 생각할 수 있다.
2013년 ImageNet에서 우승을 차지한 ZFNet은 Model의 시각화를 통해 개선을 한 사례이다. ZFNet은 일부 Filter의 Weight를 Deconvolution하여 Image의 형태로 확인하는 형태로 시각화를 사용했다.
위와 같이 간단한 방법으로 Model의 Filter나 Activation Map을 시각화 해볼 수 있다. 단, 이는 Low Level의 Layer에 대해서만 효과적일 수 있다. 왜냐하면, High Level의 Layer는 다차원이므로 직관적인 이해가 어렵기 때문이다.
이처럼 모델 자체의 동작을 이해하려는 시도와, 특정 Data를 Input으로 사용했을 때의 원인 규명의 방향으로 Visualization 연구가 지속되고 있다.
Analysis of model behaviors
Embedding Feature를 기준으로, Model의 Layer를 Level로 구분할 수있다. 각 Level의 Feature에 대해 다양한 접근법으로 분석을 수행할 수 있고, 모델의 동작을 이해하는데 사용될 수 있다.
High Level Feature를 활용하는 방법으로 Nearest Neighbor 개념을 사용할 수 있다. 어떤 Input Image에 대해서 출력된 Feature Map이 다른 Image들과 얼마나 유사한지를 확인하므오써, 모델이 Image의 어떤 특징을 높게 평가하는지 확인할 수 있다.
High Level Feature는 고차원으로 구성되어 있기 때문에, 이를 직관적으로 이해하기는 매우 어렵다. 이를 시각적으로 이해하기 위해서는 차원축소의 방법을 사용해 볼 수 있다. t-SNE와 같은 방법을 통해 각 Image의 분포를 확인할 수 있다.
Mid Level Feature를 분석하는 방법으로는, Layer Activation 시각화를 사용할 수 있다. Layer의 각 Node의 값을 기준으로 Masking을 하면, 각 Node가 어떤 정보에 높은 값을 부여하는지 확인할 수 있다. 혹은 Node의 Maximum Value 주변의 Pixel만을 출력하는 형태를 사용할 수도 있다.
특정 Input Image를 사용하는 대신, 각 Class에 대해 기대하는 합성 Image를 만드는 방법을 사용할 수 있다. 의미를 갖지 않는 Image형태의 벡터를 입력으로 하고, 해당 Image가 특정 Class에 적합하도록 Image를 합성해 나가는 형식으로 이를 구현할 수 있다.
Model decision explanation
특정 Image를 기준으로 어떤 특징이 모델이 결정에 어떤 영향을 미쳤는지 시각화 하는 방법인 Saliency Test를 알아보자.
Occlusion Map은 특정 Patch를 활용한다. Image에 Sliding Window처럼 Patch를 붙여보고, 각 Path에 따른 확률값의 변화를 추적한다. 이를 Heat Map 형태로 표현해, 어떤 위치가 결정에 중요한 역할을 하는지 파악할 수 있다.
다른 방법으로, 특정 Image의 Gradient를 추적하는 방법이 있다. 특정 Image에 대해 Gradient가 높다는 의미는, 그만큼 Image에서 중요한 부분이라는 의미이므로, 이를 시각화하여 유의미한 정보를 얻을 수 있다.
역전파의 Gradient를 더 효과적으로 사용하는 다양한 방법이 있다. Gradient에도 ReLU를 적용해서 양수값만 사용하거나, 값을 누적하는 것으로 시각적으로 이해하기 좋은 Image를 얻을 수 있다.
Class Activation Map (CAM)은 Image에서 무엇을 고려했는지를 Heat Map형태로 확인할 수 있는 기법이다. Threads Hold를 사용하면 Object Detection Task까지 수행할 수 있는 방법이다. 단, CAM은 Model의 Architecture에 제한을 받는다. Global Average Pooling과 Fully Connected Layer를 통해 Class에 대한 Score를 구해야한다. 각 Score를 통해서, Class마다 어떤 부분을 중점적으로 판단했는지 시각화한다.
CAM이 성능은 좋으나 Architecture에 제한이 있었기 때문에, 이를 극복하고자 하는 Grad-CAM이 등장했다. Grad-CAM은 Architecture의 변형이나 재학습 없이, Backbone Network가 CNN이기만 하면 사용이 가능하다. Grad-CAM은 특정 Activation Map을 설정하고, 해당 Map까지 Class에 대한 Gradient를 구한다. 해당 Gradient를 공간 축으로 GAP을 구하고, 이 값과 Activation Map의 결합을 통해서 이를 시각화 할 수 있다.
물체의 경계에 대해 Sharp한 Guided Backpropagation을 결합하는 방법으로 이를 더 발전시켜 사용할 수 있다. 이를 Guided Grad-CAM이라고 한다. 다른 발전 방향으로는 SCOUTER가 있다. 이는 분류 뿐만 아니라, 그 분류의 이유까지 비교대조하는 방식으로 시각화를 수행한다.
CNN Visualization을 통해 각 Node의 역할을 확인 할 수 있었다. 이를 GAN에 응용하면, 각 Node가 어떤 정보를 생성할 때 사용되는지 알 수 있다. GAN에 이를 적용하면, 우리가 원하는 Image를 생성해내는데에도 사용할 수 있다.
Reference
'네이버 부스트캠프 AI Tech' 카테고리의 다른 글
[U] Day 35 - CV V (0) | 2021.03.26 |
---|---|
[U] Day 34 - CV IV (0) | 2021.03.26 |
[U] Day 32 - CV II (0) | 2021.03.26 |
[U] Day 31 - CV I (0) | 2021.03.26 |
[U] Day 30 - AI+ML과 Quant Trading & AI Ethics (0) | 2021.03.26 |
Uploaded by Notion2Tistory v1.1.0