본문 바로가기
BOOSTCAMP AI TECH/7주차_Computer Vision

[BOOSTCAMP AI TECH] 33일차_Object Detection, CNN Visualization

by 이민우 2021. 3. 10.
728x90
반응형

Object Detection (객체 검출)

-Semantic segmentation : 픽셀 단위 객체 종류 인식

-Instance segmentation : 객체를 보다 세분화하여 인식

-Panoptic segmentation : Instance segmentation과 같이 객체를 보다 세분화하여 인식

 

*즉, Semantic은 class를 구분하고, 나머지는 객체를 구분한다.

 

-Object detection은 Classification + Box localization이다.

-즉, 일반 인식보다 조금 더 고차원으로 객체의 분류와 함께 객체의 위치인 Box 좌표(좌상단, 우하단)을 찾아낸다.

 

-Object Detection은 크게 Two-stage와 Single-stage 방법으로 분류할 수 있다.

 

 

Two-stage detector

1) R-CNN

-AlexNet을 활용하여 Object Detection을 한 방식. 기존 방법 대비 압도적으로 높은 성능을 보여주었다.

-Regions with CNN features의 약자로, CNN에 Region proposal 방식을 도입한 것이다.

 

-작동 방식은 입력 이미지에 대해 약 2,000개 까지의 region proposal을 구한다. 이를 BB 후보군이라 한다.

-각 region proposal을 CNN input으로 활용하기 위해 적절한 크기로 warping(resize)를 해준다.

-그 후 pre-trained CNN에 넣고, 추출된 특징을 기반으로 SVM 기반의 FC 레이어에서 분류를

 진행한다.

 

-그러나 이 방식은 2천 개의 BOX를 전부 CNN 해주어야 함으로 너무 느리다.

-또한 Region proposal은 수작업 알고리즘 기반이라 학습이 불가능하다는 한계가 존재한다.

 

 

2) Fast R-CNN

-R-CNN의 단점을 보완하기 위해 등장했다.

-영상 전체에 대한 특징을 한 번에 추출하고, 미리 검출된 특징들을 재활용하여 객체를 검출한다.

 

-먼저 원본 이미지에서 특징맵을 검출한다.

-특징들의 재사용을 위해 Region Proposal이 제시한 RoI(물체들의 후보군)에 해당하는

 특징들만을 추출한다.

-RoI 특징들을 고정된 사이즈로 Resampling 한다. (이 과정을 ROI 풀링 레이어라고 한다.)

-이후 리샘플링된 RoI 특징들을 softmax와 bbox regressor에 보내

 분류와 정확한 BB의 크기를 찾는 작업을 동시에 진행한다.

 

-이는 R-CNN의 단점인 느린 속도를 확실하게 보안해주었다.

-하지만 Region Proposal은 R-CNN과 마찬가지로 Selective search로 학습이 불가능하고 수작업 알고리즘이 존재했다.

 

 

3) Faster R-CNN

 

-앞선 두 모델의 단점인 Selective Search를 제거하고 해당 부분을 NN으로 대체하였다.

-즉 Region Proposal을 NN으로 만들었다.

-이로 인해 Object detection 분야에서 최초로 end-to-end 모델이 되었다.

 

-IoU는 교집합 / 합집합으로, 두 영역의 오버랙을 측정하는 기준을 제공한다. (높을수록 좋음)

-Anchor Box는 각 위치에서 발생할 것 같은 박스를 미리 정의해놓는 것이다.

-미리 정의한 앵커 박스의 IoU가 0.7이 넘어가면 positive sample, 0.3 미만이면 negative sample로 분류하여

 패널티를 주도록 학습한다. box의 개수와 종류는 하이퍼 파라미터이지만, 해당 모델은 9개를 설정했다. 즉, BB에 

 어떻게 LOSS를 적용시킬 지 결정하는 기준이다.

 

-작동 방식은 Fast R-CNN처럼 입력 이미지에 대한 특징맵을 미리 추출한다.

-그 후 RPN에서 region proposal을 제공해주고, 이를 바탕으로 RoI 풀링을 수행하여 이를 바탕으로 분류를

 진행한다.

 

*RPN

-conv 특징맵을 256D로 뽑아내면 두 개의 score가 생성된다.

 1) cls layer - object 여부를 판단하는 2k 개의 분류 점수 : 각각의 앵커 박스가 object인가 아닌가

 2) reg layer - k개의 앵커 박스의 정교한 위치를 회귀하는 4개의 경계 : 꼭지점의 좌표라 4k개

 

*Non-Maximum Suppression(NMS)

-NMS는 그럴듯한 BB를 전부 가져와 IoU를 측정해 너무 많이 겹치는 것은 제거.

 

 

Single-stage Detector

-정확도를 일부분 포기하더라도 빠른 수행시간이 가능하도록 하여 Real-time이 가능하도록 함.

-Two-stage의 경우 ROI를 수행하고 시작하는데, Single-stage의 경우 별도로 ROI를 수행하지 않는다.

-즉 그냥 곧바로 box regression과 classification만 수행하므로, 구조가 간단하고 속도가 빠르다.

 

 

1) YOLO

-이미지를 그리드로 나누어 n*n개의 박스를 생성한다.

-각 그리드(박스)에 대해 score를 예측한다.

 1) B개의 Bounding Box마다 4개의 박스 정보(위치)와, Confident score(객체인가)를 예측한다.

 2) class score도 따로 예측한다.

-최종 결과는 NMS를 통해 확정한다.

 

*YOLO2

 

 

2) SSD (Single Shot MultiBox Detector)

-YOLO는 prediction을 마지막 레이어에서 단 한 번만 수행했다.

-이로 인해 Faster R-CNN에 비해 localization 정확도가 떨어졌다.

-SSD는 이를 보완했다.

 

-Multiscale object를 더 잘 처리하기 위해 중간 특징맵을 여러 해상도에 맞추어 출력할 수 있도록 만들었다.

-Conv연산을 거치며 각 스케일마다 특징맵이 출력되는데, 이를 모두 활용하여 각 scale마다 다양한 크기의

 객체에 맞추어 대응할 수 있도록 만들어졌다.

-YOLO 보다 빠르고 정확하며, Faster R-CNN보다 낫다는 평가를 들었다.

 

 

 

Two-stage vs Single-stage

1) Calss imbalance problem

-Single stage detector는 RoI 풀링을 포기했는데, 이로 인해 모든 영역에서의 Loss가 계산된다.

-위의 이미지와 같이 실제 이미지는 식별해야 하는 객체보다 배경과 같은 쓸데 없는 부분이 많다.

-그런데도 모든 영역에서 loss를 계산하면 위의 특성으로 인해 class imbalance 문제가 발생했다.

 

-이러한 문제를 방지하기 위해 Focal Loss라는 개념이 도입되었다.

-크로스 엔트로피의 확장판으로, CrossEntropy에 확률 term이 추가되었다.

-는 잘 맞추었는지 여부에 따라 결정된다.

-잘 맞추었을 경우 loss를 더 적게 주고, 못 맞추었을 경우 loss를 더 크게 주어 penalty를 강화하는 것이다.

-즉, 가 클수록 훨씬 더 sharp하게 변화하게 된다.

 

 

2) RetinaNet

-낮은 레벨의 특징들과 높은 레벨의 특징을 둘 다 잘 활용하며 각 스케일별로 물체를 찾기 위한 multi scale 구조

-중간중간 특징맵들을 넘겨주고 값들을 모두 더해준다. 즉 concat이 아님.

-이후 class head와 box head가 따로 구별이 되어 classification과 box regression을 각 위치마다 dense하게 수행한다.

-SSD와 속도는 비슷하나 성능은 더 낫다.

 

 

Detection with Transformer

Detection Transformer

-페이스북에서 발표한 모델로, Object detection에 Transformer를 적용시킨 사례이다.

 

-순서는

 1) CNN에서 추출한 특징과 입력 이미지를 각 위치의 multi dimenstion으로 표현한 positional encoding을 쌍으로 하여

    입력 토큰을 생성한다. (position - feature)

 2) Transformer encoder를 통과시키고 정리된 특징들을 디코더에 넣는다. 이 때 object queries도 같이 입력하여

    해당 위치에 어떤 특징이 존재하는지 디코더의 출력값으로 받는다.

 3) 출력값을 토대로 detection 파트에서 box를 어떻게 그려야하는지 출력한다. 이 때 하이퍼 파라미터로 N을

    넣어줌으로써 한 이미지 내에서 최대 몇 개의 객체가 검출될 수 있는지 정한다.

 

*object queries : 학습된 위치 인코딩

 

 


CNN Visualization

-CNN학습 시 어떤 과정으로 정확한 예측을 하는 가에 대해서는 블랙박스로 남아있다.

-이로 인해 성능이 잘 나오지 않는다면 어떤 이유로 그런가를 확인하기 어렵다.

-이러한 점에서 CNN의 내부 시각화에 대한 필요성이 대두되었고, 일종의 디버깅 툴처럼 개발되었다.

 

-가장 간단한 시각화 방법으로는 필터 자체를 시각화하거나 합성곱을 취한 특징맵을 시각화하는 것이다.

-다만 초기 레이어에서는 CATCH하는 영역이 명확하게 보이지만 뒤로 갈수록 여러 필터들이 합성되어 추상적으로

 변하기에 사람은 식별이 불가능하여 시각화의 의미가 없다.

 

-신경망 시각화의 유형으로는 모델에 집중하는 model behavior와 데이터에 집중하는 model detection으로

 나뉜다.

 

 

 

Analiysis of model behaviors

1) Embedding Feature analusts : 높은 레벨의 레이어에서 얻은 높은 레벨의 특징 분석 방법

 

1-1) Nearest Neighbors in a feature space

 -DB에 수많은 사진들을 넣어놓고 특정 쿼리 이미지를 보내 해당 이미지와 비슷한 특징을 확인한다.

 -간단하게 말하자면 쿼리 이미지와 모델이 찾아낸 이웃 이미지 간의 픽셀별로 거리를 계산하여 비슷한 이미지인지

  홗인하는 것이다.

 -그런데 이 경우는 결과를 눈으로 직접 보아야 한다. 위치가 다르거나 포즈가 다르면 잘 식별하지 못할 수 있기

  때문.

 

1-2) Dimensionality reduction

 

 -너무 고차원의 특징 space를 상상하거나 눈으로 확인하여 판단하기가 어렵기에 차원을 축소하여 분포를 확인

 -대표적인 방법으로는 T-SNE가 있다.

 -모여있는 형태를 보고 떨어진 데이터들과 모델이 어느 클래스들을 유사하게 생각하는지에 대한 정보를 알 수 있다.

 

 

2) Activaion investigation : Middle ~ High level을 해석하는 방법

 

2-1) Layer activation

 -학습 과정에서 특정 노드들이 어떤 역할을 하고 있는지 시각화하여 보여준다.

 -위의 경우에는 conv5 레이어에서 은닉 유닛 중 하나를 뽑아서 thresholding하여 마스킹을 했더니 어떤 노드는

  얼굴만 찾아주고 어떤 노드는 계단만 찾아냈다는 뜻.

 -이를 통해 cnn은 층을 쌓으며 중간 노드들이 여러 객체의 감지 역할을 담당하고, 결과적으로 이 감지들을

  합쳐 객체를 검출하는 역할을 한다고 해석 가능하다.

 

 

2-2) Maximally activationg patches

-위 이미지는 CNN의 각 층에서 가장 높은 값을 가지는 은닉 유닛들의 주위 영역을 추출한 PATCH들의 사진이다.

-이를 통해 유닛이 어떤 역할을 하고 있는지 확인할 수 있다.

-예를 들어 어떤 유닛은 강아지의 코를, 어떤 유닛은 색이 들어간 글자를 찾는 역할을 한다.

-이 경우는 전반적인 큰 그림 보다는 국부적인 PATCH를 보며 비교적 middle-level의 해석에 좋다.

 

-수행 과정은

 1) 특정 레이어에서 채널 하나를 선택

 2) 예제 데이터를 backbone network에 넣어 각 레이어의 특징 맵 추출 후 골랐던 채널의 activation map 저장

 3) 최대 activation value 주위의 이미지 패치를 crop

 

 

2-3) Class visualization

-예제 데이터를 사용하지 않고 네트워크가 기억한 이미지를 시각화하는 방법

-위의 이미지에서는 새 클래스와 개 클래스에 대한 네트워크의 예상치를 확인한 것이다.

-우측 하단을 보면 개를 제외하고도 아이의 형태가 나오는데, 이를 토대로 클래스 분류에 단순히

 해당 객체만 파악되는 것이 아니라, 주변의 다른 객체와의 연관성도 파악할 수 있다고 해석이 가능하다.

-또한 학습 데이터에서 개가 대부분 아이와 등장했다는 것을 의미하기에 데이터의 현퍙을 의심해볼 수도 있다.

 

-위의 방법은 최적화를 통해 구현해야 한다.

-이전에는 Loss를 최소화 하는 방향으로 경사도 갑소를 사용했지만, 여기서는 f(I)가 최대화 되도록 해야하기에 경사도

 증가를 사용한다.

-경사도 증가의 과정은 다음과 같다.

 1) 임의의 이미지를 CNN에 넣어 타겟 클래스의 prediction score 획득

 2) 역전파로 입력 이미지의 경사도를 획득하여 입력이 어떻게 변해야 target score가 높아지는지 확인

 3) target score가 높아지는 방향으로 입력 이미지 업데이트

 4) 업데이트된 이미지로 1~3 재실행

-이 때 입력 이미지를 기준으로 업데이트가 진행되기에 최종 출력은 입력 이미지의 형태를 어느정도 따라가게 된다.

 

 

 

Model decision explanation

-모델 자체의 행동이 아닌 특정 입력을 어떤 각도로 바라보는지 확인

1) Saliency test : 입력 이미지에 대해 제대로 판정하기 위한 각 영역의 중요도 추출

 

1-1) Occlusion map

-입력 이미지를 넣을 때 Occlusion patch를 이용해 가린다.

-이 때 occulusion patch를 넣은 이미지를 주었을 때 해당 이미지를 정답으로 판별할 확률 (CNN score)를 계산하여

 패치가 어떤 위치를 가리고 있느냐에 따라 이 값이 바뀌는 정도를 기록한다.

-위의 이미지를 예시로 들면 score를 hearmap으로 표현했을 때 어두운 영역이 물체의 검출에 민감한 요인이 되는

 영역이다.

 

 

 

1-2) via Backpropagation

-Gradient ascent를 이용하여 클래스 이미지를 생성했던 방법과 비슷하다.

-하지만 랜덤 이미지가 아닌 특정 이미지를 입력해 classification에 큰 영향을 끼친 부분을 hearmap으로 표현한다.

 

-과정은 다음과 같다.

 1) 입력 이미지를 넣어 클래스 점수 계산

 2) 역전파로 입력 이미지의 경사도 구하기

 3) 경사도에 절대값을 취하거나 제곱을 통해 절대적인 크기 구하기

 

-즉 아무 이미지나 넣는 게 아닌, 특정 이미지에 대한 모델의 판단 요인을 찾는 것이다.

 

 

2) Backpropagation=based saliency

 

2-1) Deconvnet

-일반적으로 CNN의 순전파는 ReLU를 많이 사용한다.

-따라서 음수가 0으로 마스킹이 되는데, 문제는 역전파 시에 현재 값들을 기준으로 음수를 마스킹하지 않고

 순전파 시에 0 이하였던 유닛들을 음수로 마스킹한다는 것이다.

-Deconvent 연산은 역전파 시 순전파 시점의 값 기준이 아니라 Backpropogation 시점의 값을 기준으로

 음수를 마스킹한다. 이는 마치 역방향으로 ReLU를 적용시킨 것과 같다.

-이 경우 휴리스탁하게 좀 더 saliency를 잘 추출할 수 있다.

 

 

2-2) Guided backpropagation

-위에서 한 발 나아가 Backward시에 Forward 패턴도 마스킹하고 현재 패턴 기준으로도 마스킹하는 방식

-이러한 방식은 수학적으로 크게 논리적인 방식은 아니라 결과값으로부터 이 방식이 어떤 의미를

 갖는지 해석해볼 수 있다.

-일반적인 역전파 방식으로 순전파 패턴의 양수(정답을 올바르게 예측하는데 영향을 미친 특징)도 참조하고,

 deconvnet 방식에서 Backward 패턴에서의 양수도 참조한다면, 결과적으로 두 과정에서 도움이 되는

 특징들을 모아 보여줌으로써 깨끗한 이미지가 나오게 되는 것.

 

 

3) Class Activation Mapping

 

3-1) Class Actination Map (CAM)

-CNN의 일부를 개조하여 만든 아키텍처. CNN의 CONV 파트를 최종적으로 통과하고 완전연결층에 진입하기 전에

 gap(글로벌 평균 풀링)을 수행하여 GAP 특징을 얻는다.

-이후 단 하나의 FC 레이어만 통과시켜 classification한다. 그리고 마지막으로 이미지 분류에 대해 학습을 다시 수행한다.

-즉, 일종의 사전 학습된 CNN 모델로부터 유도하는 아키텍처

 

-이미지 분류를 할 때 위치에 대한 어떤 annotation 정보도 주지 않아도 위치까지 어느정도 찾아주기에 바운딩 박스를

 만드는데 사용하기도 한다.

-이처럼 객체 검출과 같은 비교적 정교한 task를 좀 더 rough한 영상 인식 작업으로 학습하여 처리하는 방법을

 weakly supervised learning이라고 부른다.

 

-다만 CAM 적용을 위해서는 마지막 레이어가 GAP과 FC 레이어로 이루어져야 하며, 아키텍처를 바꾸고 재학습을

 해야하는 단점이 있다. 이 경우 사전 학습 모델에 비해 전체적 성능이 떨어지는 결과가 나올 수 있다.

-최종 출력 이전에 GAP과 FC 레이어가 이미 존재함으로 아키텍처를 수정하지 않고 바로 CAM을 추출하기 용이한

 모델은 ResNet이나 GoogleNet이다.

 

3-2) Grad-CAM

-층의 구조를 바꾸어야 하는 CAM의 단점을 보완하기 위해 구조를 변경하지 않고 사전학습 모델에서 CAM을 추출하는

 방식

-기존 사전학습 모델의 아키텍처를 변경하지 않아도 되어 영상 인식 task에 한정될 필요가 없어졌다.

-그저 backbone이 CNN이면 사용할 수 있다.

 

-기존의 CAM 식에서 알아내야 할 부분은 W(c,k), 즉 Importance weight 뿐이므로 이를 알아내는 것이 핵심이다.

-Saliency를 Backprop으로 구했던 ㅂ아법을 응용해서 수행한다.

-기존 Saliency test는 입력 영상부터 backprop 했지만 여기서는 원하는 특징맵(즉, 특정 컨볼루션 층)까지만

 backprop한다.

-Grad-CAM과 Guided Backprop을 결합하여 사용할 수도 있다. Grad-CAM은 rough하고 smooth한 형태를 가지고 있고,

 Guided Backprop은 sharp하지만 class 구분성이 조금 떨어지므로,

 이 두 개를 결합한 Guided Grad-CAM을 이용하면 해당 클래스에 대해 명확한 인식을 가지면서도 sharp하게

 모양을 잡아낼 수 있다.

 

 

3-3) Scouter

-Grad-CAM을 좀 더 개선하여 이 영상을 무엇으로 판단헀느냐 뿐 아니라 이 영상을 왜 그렇게 판단했느냐까지

 비교대조 해볼 수 있는 방법이다.

728x90
반응형