The modern history of object recognition infographic
reference: The Modern History of Object Recognition — Infographic
Kinds of Object Recognition
Image Classfication : 내부 주요 Object를 기준으로 이미지를 분류하는 것.
Object Localization : 주요 Object를 포함한 이미지 영역을 예측하는 것. Image classification은 영역 내의 Object를 인지하는 데에 사용된다.
Object Recognition : 이미지에서 나타나는 모든 objects를 분류하고 지역화한다. 이 작업은 이미지 영역을 예측하고 그 안의 Object가 무엇인지 분류한다.
Semantic Segmentation : 이미지가 속한 객체 클래스별로 이미지의 각 픽셀에 레이블을 지정한다.
Instance Segmentation : 클래스에 더불어 instance에도 레이블을 지정한다.
Important CNN Concepts
Feature : 특정한 패턴(특징)이 input region에 나타날 때 활성화되는 숨겨진 뉴런. 이 뉴런이 감지하는 특징은 다음과 같다. (1) 뉴런의 활성화를 최대화하기위해 input region을 최적화 (2) 입력 픽셀에서 뉴런 활성화의 기울기를 시각화 (back propagation .. ) (3) 뉴런을 가장 많이 활성화하는 훈련 데이터셋의 이미지 영역 셋 시각화 즉, 주어진 input region의 특징을 뽑아낸 것이라고 볼 수 있다.
Receptive Field : feature의 활성화에 영향을 미치는 input image의 영역. 즉, 출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기이다. (외부 자극이 전체에 영향을 끼치는 것이 아니라 특정 영역에만 영향을 준다는 의미를 갖는다.)
Feature Map : sliding window 방식으로 입력 맵의 서로 다른 위치에 동일한 feature detector를 적용하여 생성한 feature들의 집합이다. (convolution). 즉, 필터를 입력받은 데이터에 sliding window 방식으로 적용한 뒤, 얻어낸 결과를 feature map이라고 한다.
Fully connected layer as Feature Volume : Fully connected layers는 분류 작업 수행을 위해 ConvNet의 마지막에 붙는 레이어로서 k개의 hidden nodes를 갖는다. (1*1*k feature volume을 갖는다.) 이 feature volume은 각 피쳐 맵 당 하나의 피쳐를 가지고, 해당 receptive field는 전체 이미지를 포함한다. fc 계층의 가중치 행렬인 W는 CNN 커널로 변환할 수 있다. w*h*k 커널과 w*h*d의 피쳐 볼륨을 갖는 CNN은 1*1*k 피쳐 볼륨을 생성해낸다. 1*1*k 필터 커널을 1*1*d feature volume에 통합하면 1*1*k feature volumn이 생성된다. fc 레이어를 컨볼루션 레이어로 바꾸면 임이의 크기의 이미지에 ConvNet을 적용할 수 있다.
Deconvolution : convolution의 반대 과정이다. 쉽게 말하자면 f*g = h (f: filter, g: feature map(input of layer), h: output)일 때, f,h로부터 g를 구하는 과정을 deconvolution이라고 한다. 예를 들어 특정 레이어에서 어떤 값을 역추적했더니 "눈"이 나왔다는 것은 바로 사람의 얼굴에서 눈이 이 필터를 잘 활성화시킨다는 것이고, 이 필터는 눈의 특징을 잡아내는 역할을 한다는 것을 의미한다. 우리가 deconv를 통해 피쳐맵을 역추적하면 특정 필터가 처음의 input image에서부터 담당하는 부분을 시각적으로 알 수 있다.
End to End Learning : 입력에서 출력까지 전체 네트워크를 이루는 부분적인 네트워크 없이 한 번에 처리한다는 것을 의미한다.
(memo --> CNN 시각화를 통해 각 피쳐맵의 중간층을 활성화해 눈으로 확인할 수 있다. https://dambaekday.tistory.com/3)
Important Object Recognition Concepts
Bounding box proposal (Region of interest) : 말 그래도 이미지 내에서 관심있는 영역을 뜻한다. 입력 이미지에서 내부에 우리가 찾으려고 하는 개체가 포함될 가능성이 있는 직사각형 영역이다. bounding box는 두 개의 코너 좌표 (x0, y0, x1, y1)를 저장하거나 또는 중심 위치와 너비 및 높이(x, y, w, h)를 저장하는 4-요소 벡터로 표현될 수 있다. bounding box에는 일반적으로 내부에 개체가 포함되어있을 가능성이 어느 정도인지 나타내는 신뢰 점수가 함께 표시된다.
-
Intersection over Union : 두 박스의 교집합을 합집합으로 나눠준 값. 두 박스가 일치할 수록 1에 가까운 값이 나오게 된다. 이 수치는 서로 다른 두 박스가 동일한 물체에 쳐져 있다고 판별할 수 있도록 한다. R-CNN 논문에서는 IoU > 0.5 이면 동일한 물체를 대상으로 한 박스로 판단한다.
-
Non Maxium Suppression (NMS) : 동일한 물체에 여러개의 박스가 쳐져 있을 때, 가장 스코어가 높은 박스만 남기고 나머지를 제거하는 과정을 말한다. 이 때, 스코어는 IoU를 통해 판별한다.
-
Selective Search : 물체가 포함되어있을 법한 박스를 찾아내는 방법.
Bounding box regression : selective search를 통해 찾은 박스 위치는 상당히 부정확하다. 따라서 성능을 끌어올리기 위해 박스 위치를 교정해주는 작업을 bounding box regression이라 말한다. 즉, CNN을 통과하여 추출된 벡터와 x, y, w, h를 조정하는 함수의 가중치를 곱해서 바운딩 박스를 조정해주는 선형 회귀를 학습시키는 것을 의미한다. 자세한 내용은 여기에서 Bounding Box Regression을 참조하면 수식과 함께 확인할 수 있다.
Metrics
R-CNN
R-CNN이 Object Detection을 수행하는 알고리즘 순서는 다음과 같다.
- 입력 이미지에 Selective Search 알고리즘을 적용하여 물체가 있을 법한 박스 2000개를 추출한다.
- 모든 박스를 227 x 227 크기로 리사이징한다. 이 때 박스의 비율은 고려하지 않는다.
- 미리 ImageNet 데이터를 통해 학습시켜놓은 CNN을 통과시켜 4096차원의 특징 벡터를 추출한다.
- 이 추출된 벡터를 가지고 각각의 클래스마다 학습시켜놓은 SVM Classifier를 통과시킨다.
- Bounding Box Regression을 적용하여 박스의 위치를 튜닝한다.
Fast R-CNN
CNN 특징 추출부터 classfication, bounding box regression까지 모두 하나의 모델에서 학습시키자!
- 전체 이미지를 미리 학습된 CNN을 통과시켜 피쳐맵을 추출한다.
- Selective Search를 통해서 찾은 각각의 ROI에 대해 ROI Pooling을 수행한다. 그 결과로 고정된 크기의 feature vector를 얻는다.
- feature vector는 fc layer들을 통과한 뒤, 두 개의 브랜치로 나뉘게 된다.
- 하나의 브랜치는 softmax를 통과하여 해당 ROI가 어떤 물체인지 분류한다.
- 또 하나의 브랜치는 bounding box regression을 통해서 selective search로 찾은 박스의 위치를 조정한다.
- ROI Pooling Fast R-CNN에서는 먼저 입력 이미지를 CNN에 통과시켜 피쳐맵을 추출한다. 추출된 피쳐맵을 미리 정해놓은 H*W 크기에 맞게끔 그리드를 설정한다. 그리고 각각의 칸 별로 가장 큰 값을 추출하는 max pooling을 실시하면 결과값은 항상 H*W 크기의 피쳐맵이 되고, 이를 쭉 펼쳐 feature vector를 추출한다.
Faster R-CNN
Faster R-CNN의 핵심 아이디어는 Region Proposal Network이다. 해당 네트워크는 다음과 같은 구조를 갖는다.
먼저 feature map을 추출한 뒤, 이를 RPN에 전달하여 ROI를 계산한다. 여기서 얻은 ROI로 ROI Pooling을 진행한 다음 분류를 진행하여 Object Detection을 수행한다.Region Proposal Network RPN이 동작하는 알고리즘은 다음과 같다.
CNN을 통해 뽑아낸 피쳐맵을 입력으로 받는다. 이 때, 피쳐맵의 크기를 HxWxC로 잡는다. (가로, 세로, 채널 수)
피쳐맵에 3x3 컨볼루션을 256 혹은 512 채널만큼 수행한다. 위 그림에서 intermediate layer에 해당한다. 이 때, padding을 1로 설정해주오 HxW가 보존될 수 있도록 한다. intermediate layer 결과 HxWx256 or HxWx512 크기의 두번째 피쳐맵을 얻는다.
두번째 피쳐맵을 입력받아 classfication과 bounding box regression 예측 값을 계산해주어야한다. 이때 fully convolution network의 특징을 갖는다.
먼저 분류를 수행하기 위해 1x1 컨볼루션을 18(object인지 나타내는 지표 수 2 * 앵커 개수 9) 채널 수 만큼 수행하며, 그 결과 HxWx18 크기의 피쳐맵을 얻는다. HxW 상의 하나의 인덱스는 피쳐맵 상의 좌표를 의미한다. 그 아래 18개의 채널은 각 해당 좌표를 앵커로 삼아 k개의 앵커 박스들이 개체인지 아닌지에 대한 예측값을 담고 있다. 즉, 한번의 1x1 컨볼루션으로 HxW 개의 앵커 좌표들에 대한 예측을 모두 수행한다. 이제 이 값들을 적절히 reshape 한 뒤, softmax를 이용하여 해당 앵커가 오브젝트일 확률 값을 얻는다.
다음으로 Bounding Box Regression 예측값을 얻기 위한 1x1 컨볼루션을 36채널 수 만큼 수행한다.
1~5를 통해 얻은 값들로 ROI를 계산한다. 먼저 Classification을 통해서 얻은 물체일 확률 값들을 정렬한 다음, 높은 순으로 K개의 앵커만 추려낸다. 그 다음 K개의 앵커들에 각각 Bounding box regression을 적용한다. 그 다음 Non-Maximum-Suppression을 적용하여 RoI을 구한다.
이렇게 찾은 ROI를 다시 첫 번째 피쳐맵에 project한 다음, ROI Pooling을 적용하고 다시 분류에 적용하여 물체의 종류를 알아낸다.
Feature Pyramid Network
Object Detection 분야에서 풀리지 않은 문제는 바로 작은 물체를 탐지해내기 어렵다는 것이다. 이를 위해 이미지나 피쳐맵의 크기를 다양한 형태로 rescale하는 접근 방법이 있었다. 위 이미지와 관련된 설명은 다음과 같다.
(a)는 입력 이미지 자체를 여러 크기로 리사이징한 뒤, 각각의 이미지에서 물체를 탐지하는 방법이다.
(b)는 CNN 신경망을 통과하여 얻은 최종 단계의 피처맵으로 object detection을 수행하는 기법이다.
(c)는 CNN 신경망을 통과하는 중간 과정에 생성되는 피쳐맵들 각각에 Object Detection을 수행하는 기법이다.
(d)는 FPN에서 제안하는 방법으로서 먼저 신경망을 통과하며 단계별로 피쳐맵을 생성한다. 그리고 가장 상위 레이어에서부터 거꾸로 내려오면서 피쳐를 합쳐준 뒤, Object Detection을 수행한다. 이러한 방식을 통해 상위 레이어의 추상화된 정보와 하위 레이어의 작은 물체들에 대한 정보를 동시에 살리면서 Object Detection을 수행할 수 있게 된다.
Feature Fusion
FPN이 상위 피쳐맵과 하위 피쳐맵을 어떻게 합쳐주는지 알아보자. 기본적으로 FPN은 피쳐맵이 레이어를 통과하면서 해상도가 2배씩 작아진다고 가정한다. 때문에 상위 피쳐맵과 하위 피쳐맵을 합쳐주기 위해서는 해상도를 맞춰주어야 한다. nearest neighbor upsampling이라는 기법을 사용해 상위 피쳐맵의 해상도를 2배 키워주었다.
위 과정을 거쳐 해상도를 2배 키워준 뒤 하위 피쳐맵에서는 1x1 convolution을 수행하여 상위 피쳐맵과 동일한 채널 수를 갖도록 한다. 그 다음 해상도와 채널 수를 모두 맞춰준 두 피쳐맵을 element-wise 덧셈을 수행하여 합쳐주며 그 결과로 나온 피쳐맵에 object detection을 수행한다.
Mask R-CNN
미팅 당일 교수님 설명 듣고 추가할 예정.
About Detectron2
우선 Detectron2란 FAIR에서 파이토치를 베이스로 개발한 Object Detection & Segmentation Library이다. 고수준의 API가 아주 이용하기 쉽게 작성되어있고, 친절한 document를 제공하기 때문에 누구나 쉽게 이용할 수 있다. 하지만 좋은 API 내부에는 복잡한 구조가 있기 마련, 캡슐화가 잘 되어있기 때문에 내부를 뜯어보려면 매우 어렵다고 한다.
Detectron2는 최신의 Object Detection 알고리즘이 구현을 포함하고 있다. Fast R-CNN, Mask R-CNN을 비롯하여 여러 알고리즘들이 포함되어있다. 더불어 Modular design이기 때문에, Object Detection System의 어디든 내가 커스텀하여 갖다 붙일 수 있다. 그리고 매우 빠른 트레이닝 속도를 자랑한다.
Detectron2는 다음과 같은 모델 구조를 갖는다.
Backbone Network Input: Images Output: Multi-Scaled Feature Maps Backbone 네트워크에는 이미지들이 인풋으로 들어간다. 그리고 결과물로서는 피라미드 형태의 서로 다른 스케일을 갖는 피쳐맵을 얻을 수 있다. 백본 네트워크의 결과물로 얻어진 피쳐맵은 다음 단계인 Region Proposal Network와, ROI Heads 둘 모두의 Input으로 이용된다.
Region Proposal Network Input: Mutli-Scaled Feature Maps Output: Object Regions(Region Proposals) Region Proposal Network에서는 Multi-Scaled Feature Maps를 바탕으로 Object Region을 얻는 과정을 거친다. 해당 물체가 위치한 박스를 얻는다고 보면 될 것 같다. 이 단계에서 얻은 결과는 ROI Heads의 Input으로도 이용된다.
ROI Heads Input: Multi-Scaled Feature Maps, Region Proposals Output: Box RPN과 매우 유사하지만 더 fine-tuned 된 박스를 얻어내는 과정이다.