티스토리 뷰
[Day 32] Computer Vision (CV) - 3
1. 강의 복습 내용
1.1) Object detection
Object detection
1. Object detection
: Object detection(객체 검출)이란, 입력 영상이 주어질 때 영상 내에 존재하는 모든 카테고리에 대해서 Classification(분류)와 Localization(지역화)를 수행하는 Task
여기서 Localization(지역화)란, bounding box를 찾는 Regression(회귀)문제이고, Classification(분류)는 bounding box내에 물체가 무엇인지 분류하는 문제이다.
*) Bounding Box를 평가하는 방법
: 보통 IoU가 특정 값(Threshold)를 넘으면 정답으로 처리함

2. Two-Stage Detector
: 이번에 알아볼 모델들은 모두 크게 2단계에 걸쳐 객체를 검출하는 예이다.

목적은 모두 Object-Detector로 이미지에서 어떤 물체들이 어디있는지 Bounding Box를 찾고 분류하는 것이다.
Two-Stage Detector라고 불리는 이유는 다음과 같다.
Selective Search, Region Proposal Network와 같은 알고리즘 및 네트워크를 통해 Object가 있을 만한 영역의 Bounding Box를 미리 뽑아낸다(RoI). 그 후 Convolution Network를 통해 분류와 Localization을 수행한다.
2.1) R-CNN
: R-CNN의 과정을 크게 3가지로 나누면 다음과 같다.
1. R-CNN은 selective search를 통해 region proposal을 먼저 뽑아낸 후 CNN 모델에 들어간다.
2. CNN모델에 들어가 feature vector를 뽑고 각각의 class마다 SVM로 classification을 수행한다.
3. localization error를 줄이기 위해 CNN feature를 이용하여 bounding box regression model을 수정한다.
-> 대략 2000개의 Region proposal를 뽑아내고 각각의 영역 마다 CNN을 수행하기 때문에 매우 느리다.
또한, 각 수행마다 연산을 공유하지 않기 때문에 End-to-End 학습이 불가능하다. (따로 학습)
2.2) Fast R-CNN
: Fast R-CNN은 R-CNN의 단점을 어느정도 보완한 모델이다. 수행 과정은 다음과 같다.
1-1. R-CNN에서와 마찬가지로 Selective Search를 통해 RoI를 찾는다.
1-2. 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.
2. Selective Search로 찾았었던 RoI를 feature map크기에 맞춰서 projection시킨다.
3. projection시킨 RoI에 대해 RoI Pooling을 진행하여 고정된 크기의 feature vector를 얻는다.
4. feature vector는 FC layer를 통과한 뒤, 구 브랜치로 나뉘게 된다.
5-1. 하나는 softmax를 통과하여 RoI에 대해 object classification을 한다.
5-2. bounding box regression을 통해 selective search로 찾은 box의 위치를 조정한다.

-> 앞서 R-CNN에서는 약 2000개의 영역을 뽑아내 2000개의 입력이 CNN에 들어가게 된다. 하지만 Fast R-CNN은 RoI를 사용하여 단 1개의 입력만이 CNN에 들어감으로써 속도를 대폭 향상 시킨 모델이다.
즉, 기존 R-CNN에서는 2000개의 영역을 전부 CNN에서 Feature를 도출한 반면, 이미지 전체의 Feature맵을 추출하여 RoI에 투영하여 고정된 Feature Vector를 얻는 방식이다.
그리고 Fast R-CNN부터는 어느정도 End-to-End 학습도 가능해졌다. (RoI를 Feature맵에 투영시킴으로써 동일 data가 각각 분류, Localization에서 연산을 공유하기 때문)
하지만 여전히 RoI를 생성하는 Selective Search는 CNN 외부에서 진행됨
2.3) Faster R-CNN
: Fast R-CNN이 해결하지 못한, 기존에 외부에서 RoI를 생성했던 것을 모두 CNN 내부에서 할 수 있게 된 모델
-> 완벽한 End-to-End 학습

Faster R-CNN에서는 detection에서 사용된 Convolution Feature들을 Region Proposal Network(RPN)에서도 공유함으로써, 기존의 RoI 생성에서 병목이 생겼던 현상을 CNN 내부에서 수행할 수 있게 됨으로 속도를 더욱 향상 시켰다.
기존의 RoI 생성(Selective Search)이 느린 이유는 GPU에서 연산을 할 수 없어 CPU에서 이루어졌기 때문이다.
따라서 이를 GPU에서 연산할 수 있도록 CNN 내부로 들여왔으므로 사실 상 RPN + Fast R-CNN으로 볼 수 있다.
CNN 내부에서 RoI를 생성하는 RPN은 Original Image 크기에 맞춰서 생성한다.

RPN의 input 값은 이전 CNN 모델에서 뽑아낸 feature map이다.
Region proposal을 생성하기 위해 feature map위에 NxN window를 sliding window시킨다.
그리고 k개의 anchor box 후보를 미리 정해놓는다. (보통 9개 = W,H 3종류, 비율 3종류)
anchor box를 이용하여 classification과 bounding box regression을 먼저 구한다. (For 학습)
먼저, CNN에서 뽑아낸 feature map에 대해 3x3 conv filter 256개를 연산하여 depth를 256으로 만든다.
그 후 1x1 conv 두개를 이용하여 각각 classification과 bounding box regression을 계산한다.
3. Single-Stage Detector

3.1) YOLO


- YOLO는 단일 신경망으로 통합한 모델이다. (빠르다)
- Input 이미지를 S X S 그리드로 나눈다.
- 각각의 그리드 셀은 B개의 Bounding box와 그 Bounding box에 대한 Confidence Score를 예측한다.
- Confidence Score를 기반으로 Bounding box에 특정 클래스가 나타날 확률과 예측된 Bounding Box과 얼마나 잘 맞는지 나타낸다.
- 그러나 그리드 크기보다 작은 물체를 잘 판단하지 못하는 문제, 그리고 신경망을 지나 coarse한 정보만 남은 피쳐맵만 사용하기 때문에 정확성이 다소 떨어진다.
3.2) Single Shot MultiBox Detector (SSD)

- YOLO의 정확도 문제를 앞단 Convolution 피쳐맵을 사용하여 정확도를 올린다는 아이디어
- 아웃 풋을 만드는 공간을 나눈다(multi feature map).
- 각 피쳐맵(아웃풋맵)에서 다른 비율과 스케일로 default box를 생성하고 모델을 통해 계산된 좌표와 클래스값에 default box를 활용해 최종 bounding box를 생성한다.
3.3) RetinaNet

- Focal Loss의 제안 (Imbalance Problem)
: Object Detector는 이미지에서 객체를 검출하는 문제인데, 대부분 큰 이미지에서 배경이 많고 객체는 일부분에 불과하다. 이는 큰 이미지에서 객체를 봤을 때 Class Imblance 라고 볼 수 있고 성능 저하로 이루어졌다고 판단했다.
따라서 RetinaNet은 Loss 함수로, 적은 Class에 가중치를 주는 것과 같이 Focal Loss를 제시하였다.

: 잘 분류된 샘플들에 대해 적은 Loss를 부여하고, 모델이 어렵고 잘못 분류한 샘플들에 대해서 집중할 수 있도록 하였다. 실험에서는 감마 2가 가장 좋은 성능을 나타냈다고 한다.
4. Transformer is all you need

- 최근에는 Transformer를 사용하는 detection 프레임워크를 만들었고, 성능 또한 뒤쳐지지않는다고 한다. (DETR)
- CNN Backbone 모델을 통해 Feature Map을 생성하고 인코더-디코더의 Transformer를 거쳐 Feed Forward Network를 통해 결과를 출력한다.
- Object Detector 분야에서 새로운 End-to-End 방식을 제안한 DETR
1.2) CNN Visualization
CNN Visualization
1. CNN Visualization이란?
- 지금까지 우리가 이미지 관련 Task 모델을 만들고 Output만 확인했었던 반면 (Black Box), 모델 안 CNN에서 어떤 Feature를 사용하고 모델이 Task를 해결하기 위해 어떤 부분을 살펴보는 지 일종의 Debugging과 같은 맥락

2. Analysis of Model behaviors
: 모델의 행동 분석
2.1) Embedding Feature Analysis
: 이미지 임베딩을 통해 유사도를 구하여 모델이 잘 수행하는 지 파악

2.2) Activation Investigation
: 모델 레이어에서 추출된 Feature를 통해 모델의 행동을 파악
*) Class Visualization
: Target Class를 정하여 Backpropagation을 통해 Dummy Image로 부터 Target Class에 대한 이미지를 생성
Gradient ascent
1) Get a prediction score (of the target class) of the current image
2) Backpropagate the gradient maximizing the target class score w.r.t. the input image
3) Update the current image

3. Model decision explanation
: 모델이 어떻게 추론하였는 지를 설명 (확인)
3.1) Saliency test 1
: Occlusion Map

- CNN에 넣기 전 이미지에 Masking을 씌워 확률 히트맵을 그린다.
- 사람이 좀 더 잘 이해하기 위한 목적
3.2) Saliency test 2


- Input Image의 Class Score를 계산하고, 그 Score로 부터 Backpropagation을 수행하여 모델이 이미지 Classification을 위해 Input Image의 어느 부분이 중요한 지를 파악하는 방법
3.3) Backpropagation-based saliency




- 기존 Forward에서 ReLU를 거치면 Backward에서도 Forward에서 ReLU를 거쳐 음수인 값들을 0으로 마스킹하는데 자일러는, 이러한 방법에서 역으로 Forward의 ReLU는 무시하고 Backward에서의 값에 ReLU를 적용하였다.
- 그리고 이 두 방법들을 모두 섞은 제3의 방법이 Guided Backprop으로 효과가 더 좋았다. (모델이 어떻게 파악하는 지 더 직관적으로 볼 수 있음) -> Forward, Backward 양방향에서 ReLU를 거쳐 살아남은 Feature들을 나타내기 때문에 효과가 더 좋았을 수도 있을 것 같다.)
3.4) CAM

- 어떤 부분을 참조하여 어떤 결과가 나왔는지 보기 좋은 히트맵과 같은 효과로 보여줌
- Threshold를 잘 설정하면 Bounding Box도 그릴 수 있음
- 하지만 Neural Network를 일부 개조해서 사용해야함.
- FC Layer를 일부 삭제하고 추출된 Feature들을 Global Avarage Pooling (GAP)을 통과하고 FC Layer 하나를 지나게 된다. 또 이 부분을 재학습도 해야한다. (Convolution Layer들은 Pre-trained로 취급)


- 단순한 영상인식기(Classification)를 학습했는데 위치정보까지 파악하고 있다. (Task 활용 가능성)
- 그러나 마지막 레이어 구성이 GAP과 FC-Layer로 구성해야만 한다는 것이 단점 (재학습도 해야함)
- 기존 모델에 적용할 때 위와 같은 문제로 성능 하락의 가능성도 있음 (GoogLeNet, ResNet은 CAM에 적합) -> gap이 있음
3.4) Grad-CAM
: CAM의 단점을 보완(레이어를 수정하지 않아도 됨)한 업그레이드된 개념
- Pre-trained 된 네트워크를 변경하지 않아도 되므로 Backbone이 CNN이기만 하면 사용할 수 있다. (Task 유연)

- 기존의 CAM에서 Grad-CAM은 Weighted Sum만 따로 구하면 된다. (Grad-CAM의 핵심 아이디어)
- 더하는 CAM의 Weight와 Grad-CAM의 Weight는 다름

- CAM하고 다르게 ReLU를 사용함
- 관심을 가지고 있는 Activation Layer까지 Backpropagation을 한다.
2. 피어 세션
1. 강의 내용에 대한 토의
- CNN Visualization 햇갈릴법한 많은 기법들 정리
- Register-Hook
- Grad-CAM
2. Futher Question 토의
3. Conclusion
과제의 난이도가 다소 높았다.
하지만 덕분에 어려웠던 내용을 좀 더 열심히 학습할 수 있었던 계기였다.
부족한 부분 & 더 학습해야할 부분
- Object Detection Model들 논문 읽어보기 (개념 정립, 리서쳐부분)
- 모델의 발전 방향도 대부분 앞선 모델의 장점들을 골고루 조합하여 더 나은 모델을 제시하는 것 같다.
- 따라서 모델의 논문들을 이해하는 것이 정말 필요하다고 느낌
- Grad-CAM / CNN Visualization
- 랜덤 노이즈 이미지를 Target Class를 주어 그에 맞는 이미지를 생성할 수 있다는 것이 믿기지 않는다.
- 주말에 직접 학습된 모델을 통해 실험을 해봐야 직관적으로 이해할 수 있을 것 같다.
- 단순히 CNN Features들을 확인해 '모델이 잘 하고 있구나, 이걸 이렇게 봤구나' 가 아닌 이것들을 통해 다른 Task에 적용하거나 다른 서비스들을 창출해낼 수도 있겠다고 느꼈다. 실제로도 그렇다고 한다.
- 그만큼 오늘 배운 내용이 중요하고 CV의 기본기라고 느껴진다.
'부스트캠프 AI Tech > 학습정리' 카테고리의 다른 글
[Day 34] Computer Vision (CV) - 5 (0) | 2021.03.12 |
---|---|
[Day 33] Computer Vision (CV) - 4 (0) | 2021.03.11 |
[Day 31] Computer Vision (CV) - 2 (0) | 2021.03.09 |
[Day 30] Computer Vision (CV) - 1 (0) | 2021.03.08 |
[Day 26-29] 특강 (0) | 2021.03.02 |
- Total
- Today
- Yesterday
- Data Handling
- C++
- Unet
- 프로그래머스
- python
- 코딩테스트
- 공공데이터
- pandas
- Vision AI 경진대회
- 브루트포스
- cnn
- 동적계획법
- 부스트캠프 AI Tech
- DeepLearning
- DACON
- ResNet
- AI 프로젝트
- 알고리즘
- 그리디
- 다이나믹프로그래밍
- 백트래킹
- 데이터연습
- NLP 구현
- 백준
- 이분탐색
- 데이터핸들링
- 네트워킹데이
- dfs
- Unet 구현
- P-Stage
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |