OverFeat 부수기 [백 병장의 CV 부수기 2편]
지난번 R-CNN에 이어, 이번에는 컴퓨터 비전, Object Detection 분야의 초기 논문 중 하나인 OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks를 읽고 정리해보겠다.
이 논문에서는 sliding window 방식을 ConvNet에 효율적으로 적용하고, 객체 바운더리를 예측하는 Localization 문제를 위한 딥러닝 방식을 제시한다. 더불어 Bounding Box의 정확도를 올리기 위한 적층(accumulate) 방법을 소개하고, 하나의 신경망을 여러 개의 Task를 위해 동시에 학습시키는 법을 소개한다.
더불어, 이 논문에서 새로운 사전 학습 특성 추출기(feature extractor) 모델을 소개하는데, 이것이 OverFeat이다. 다만, 이 글에서는 편의를 위해 이 논문을 OverFeat이라 부르겠다.
R-CNN과의 관계
이전에 공부한 R-CNN과 OverFeat 모델은 비슷한 시기에 발표된 논문이다.
재미있게도 R-CNN이 OverFeat에 비해 한 달 정도 먼저 발표되었고 성능도 우세하다고 하지만, R-CNN이 ImageNet 대회에 참여하지 않아 OverFeat이 역사적인 AlexNet 이후로 ImageNet Object Detection 대회에서 CNN으로 좋은 성적을 낸 첫 사례가 되었다고 한다.
R-CNN에서 이미지 내부에 객체로 보이는 관심 영역(Region of Interest)만을 ConvNet에 투입해 분석한 데 비해, OverFeat에서는 Sliding Window 방법을 사용해 이미지 전체 영역을 ConvNet에 투입한다.
이로 인해 Image에서 ROI를 추출하고, CNN을 통과시키고, SVM으로 분류하는 R-CNN과 달리 단일 모델 end-to-end로 모델 학습이 가능하다.
R-CNN이 초창기 대표적인 2-stage 모델이라면, OverFeat은 초창기 1-stage 모델인 것이다.
Classification, Localization, Detection
논문은 단일 CNN 모델을 통해 Classification, Localization, Detection을 모두 가능토록 하는 방법을 소개한다.
Classification, Localization, Detection의 개념은 각각 이전 개념을 포함한다.
Classification은 이미지 내부의 한 객체의 클래스를 맞추는 것이고, Localization은 이 객체의 이미지 내부의 위치를 찾아내는 것이다. Detection은 이미지 내부에 존재하는 여러 개(혹은 0개)의 객체를 Localization 하는 문제이다
OverFeat은 먼저 Classification을 위한 CNN 모델을 학습시키고, Convolution Layer를 유지하고 뒤쪽의 Fully Connected Layer를 회귀 모델로 바꿔 Localization을 위한 모델로 활용하는 방식으로 하나의 Convolution Model로 여러 가지 task를 수행한다.
사실 지금이야 사전 학습된 Convolution Layer를 가져다 Fine-tune 해서 쓰는 것이 대중적이지만, 이 논문이 쓰이던 시기에 이는 새로운 시도였던 것 같다.
OverFeat의 Classification
OverFeat은 가장 먼저 Classification을 위해 학습된다.
Classification을 위한 OverFeat 모델은 우리가 흔히 생각하는 단순한 CNN 형태로, AlexNet을 수정한 합성곱 계층에 Fully Connected 계층이 합쳐진 형태의 모델을 Softmax 함수로 학습한다.
OverFeat의 Localization과 Detection
이 부분이 좀 어렵고 창의적이다.
일반적인 합성곱 신경망에서, 합성곱 계층이 만들어낸 feature map은 Flatten 되어 1차원으로 변형된 뒤, Fully Connected 계층으로 넘겨진다. 이를 통해 우리가 원하는 결과를 얻을 수 있지만, Fully Connected 계층에 넣기 위해 합성곱 계층이 출력하는 feature map의 크기가 고정되어야 하고, 이는 모델의 입력 이미지 크기 또한 고정됨을 의미한다.
그러나, OverFeat은 입력 데이터의 크기에 제한을 두는 대신, feature map을 Flatten 하지 않고 사용하기로 했다.
가변적인 크기의 feature map이 어떤 의미를 갖고, 이를 어떻게 분석하여 원하는 결과를 얻을 수 있을까?
Feature Map과 Receptive Field
합성곱 계층은 이미지의 특정 영역을 더 작거나 큰 크기의 feature map 상의 픽셀에 매핑한다.
예를 들어, 4x4 이미지가 합성곱 계층을 통과하여 2x2 크기의 feature map이 되었다면, 이 feature map의 각 픽셀은 4x4 이미지 내부의 2x2 크기의 영역들에 대응된다.
이때, feature map에서 한 픽셀에 해당하는 원본 이미지의 영역들을 receptive field라고 한다.
위의 이미지에서 보다시피, 합성곱은 입력된 이미지를 작은 feature map으로 압축하는데, 이때 feature map은 원본 데이터의 공간적 정보를 반영한다. (이 부분이 중요하다.)
feature map 속 각 픽셀의 값은 이미지 내부의 특정 영역(해당 픽셀의 receptive field)에 특정 클래스가 존재하는지에 대한 확률, 혹은 bounding box가 된다.
CNN을 통해 Sliding Window 방법을 효율적으로 수행하기
직관적으로 눈치챈 사람도 있겠지만, CNN 연산을 통해 feature map을 만드는 것은 이미지 전체를 여러 조각으로 잘라 분석하는 Sliding Window 방법과 같다.
동시에 연산 코스트는 Sliding Window에 비해 절약되는데, 이는 CNN에서 풀링 영역이 겹치는 부분은 완전히 같은 연산이 수행되기 때문이다. (아래 이미지)
OverFeat Detection 모델 구조와 출력 Feature Map의 해석
OverFeat Detection 모델은 입력 이미지를 6가지 사이즈로 조정하여 합성곱 신경망에 투입하고, 이에 따른 6개의 출력을 갖는다.
각 출력은 크기가 다른 feature map으로, 위에서 설명한 것 처럼 feature map의 각 픽셀은 이미지 내부 receptive field 영역에 대한 bounding box이자 특정 클래스에 대한 확률(Confident Score)로 표현될 수 있다.
feature map은 결국 원본 이미지를 특정 비율로 encoding 한 것이기 때문에, 각 픽셀에 해당하는 receptive field를 원본 이미지 위에 시각화할 수 있다.
이미지를 6개의 각기 다른 크기로 입력한 것은, 위 그림에서 볼 수 있듯이 출력 feature map의 한 픽셀이 원본 이미지에서 해당하는 receptive field의 크기가 달라지기 때문이다.
6개의 특성 맵을 이미지 위에 투사하면 여러 개의 bounding box가 만들어지게 된다. 이를 후처리 하여 최종 결과를 만든다.
후처리
먼저, 예측된 bounding box 중 confident score가 50% 혹은 70% 미만인 것들은 삭제한다. (Confident Score Thresholding)
그다음, 한 객체를 대상으로 한 여러개의 bounding box 중 하나만을 남기고 삭제해야 한다.
이를 위한 두 가지 방법이 있는데, 하나는 가장 높은 confident score를 갖는 bounding box를 취하고, 이 box와 겹치는 모든 box를 버리는 것이다.
그러나 이 방법은 자칫 두 객체가 겹쳐있다면 엉뚱한 객체의 bounding box까지 날려먹을 수도 있다.
다른 방법은 가장 높은 confident score를 갖는 box와 겹치는 영역(IOU; Intersection over Union)이 70% 이상인 box만 삭제하는 것이다.
이 방법을 Non Max Suppresion, NMS라 한다.
이렇게 만들어진 Bounding Box를 L2 Loss로 학습시키는 것으로, OverFeat Detector를 학습시킬 수 있다고 한다.
마치며
2-stage Detector인 R-CNN이 가진 복잡한 구조를 보고, OverFeat은 상대적으로 단순한 1-stage 모델이라 방심했는데 정말 잘못된 생각이었다.
너무 어려웠고, 참고한 글들이 없었으면 이해하기 힘들었을 것 같다.
사실 완전히 이해한 것도 아니라서, 추후에 식견이 늘면 다시 봐야겠단 생각이 강하게 드는 논문이었다.
어려웠지만, 동시에 내가 본 논문 중에 가장 재밌는 논문이기도 했다.
합성곱 계층이 정말 유용하지만, 일반적으로 FC 계층에 연결하기 위해 결국 입출력 크기를 고정해야 해서 아쉬웠는데, 이런 식으로 오히려 그 특성을 유용하게 활용하다니 천재적인 것 같다. 논문을 보며 감탄이 계속 나왔다.
OverFeat은 R-CNN에 비해 성능이 낮았지만, 추후에 나온 1-Stage 모델들에게 큰 영향을 주었다고 하여 읽었는데, 과연 읽기를 잘했다는 생각이 든다.
근데 시리즈 이름이 CV 부수기인데 벌써 내가 부숴질 뻔했다... 이거 맞나?
참고자료
'Deep Learning > 공부 노트' 카테고리의 다른 글
OHEM 부수기 [백 병장의 CV 부수기 5편] (1) | 2022.12.10 |
---|---|
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편] (0) | 2022.12.04 |
Fast R-CNN 부수기 [백 병장의 CV 부수기 3편] (0) | 2022.12.03 |
R-CNN 부수기 [백 병장의 CV 부수기 1편] (0) | 2022.11.27 |
Introduction to spiking neural networks: Information processing, learning and applications (0) | 2020.01.04 |
댓글
이 글 공유하기
다른 글
-
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편]
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편]
2022.12.04 -
Fast R-CNN 부수기 [백 병장의 CV 부수기 3편]
Fast R-CNN 부수기 [백 병장의 CV 부수기 3편]
2022.12.03 -
R-CNN 부수기 [백 병장의 CV 부수기 1편]
R-CNN 부수기 [백 병장의 CV 부수기 1편]
2022.11.27 -
Introduction to spiking neural networks: Information processing, learning and applications
Introduction to spiking neural networks: Information processing, learning and applications
2020.01.04