R-CNN 부수기 [백 병장의 CV 부수기 1편]
오늘부터 차근차근 Computer Vision 분야에 입문하기 위한 프로젝트로 [백 병장의 CV 부수기]를 시작합니다.
많은 관심 부탁드립니다.
CV라고는 합성곱 신경망 밖에 몰랐던 내게 R-CNN이 뭐냐고 물으면 Recurrent CNN 아니냐고 답할 때가 있었다.
그나마 최근에야 R-CNN이 Object Detection 분야의 기초 모델 중 하나인 Regions with CNN features 임을 알았다.
오늘은 R-CNN을 이론적으로 공부하고 정리해보았다.
(R-CNN이 소개된 논문 Rich feature hierarchies for accurate object detection and semantic segmentation을 읽고 리뷰하는 것이 아닌, R-CNN 모델 자체에 대한 공부만 진행한 만큼, 논문의 내용을 전체적으로 포함하고 있지는 않음을 미리 알린다.)
Exhaustive Search vs Selective Search
기존의 Object Detection 모델들은 객체를 찾아야 할 이미지 전체를 작은 탐색 영역(윈도우)으로 나누어 훑어보며 윈도우 내에 객체가 있는지 판별하는, 완전 탐색(Exhaustive Search) 방법을 사용했다.
이는 이미지 전체를 매우 많은 영역으로 나누어 하나하나 Classification을 수행하기 때문에, 오래 걸리고 비효율적이었다.
R-CNN은 이미지에서 객체로 추정되는 임의의 영역을 선택하여 Classification과 Bounding Box Regression을 수행하는 선택적 탐색(Selective Search) 방식을 사용한다.
R-CNN의 동작 구조
R-CNN은 다음과 같은 순서로 Object Detection을 수행한다.
- 입력 이미지로부터 Selective Search 방법을 통해 임의의 영역(region)들을 제안한다.
- 제안된 영역들을 CNN의 입력 크기에 맞게 조절한다. (wraped region)
- CNN을 통해 영역들에게서 특성을 추출한다. (feature extraction)
- CNN으로 추출한 특성을 기반으로 영역의 클래스를 분류한다. 논문에서는 SVM을 활용하였다.
- 1에서 제안된 영역을 Regression으로 보정하여 최종 Bounding Box를 만들어 준다.
이렇듯 R-CNN은 이미지 내부에서 객체의 위치를 찾는 Localization과 객체를 분류하는 Classification을 별도로 수행하는, 대표적인 2-stage Detector 모델이다.
Region Proposal by Selective Search
R-CNN이 입력된 이미지로부터 객체가 있는 것으로 추정되는 영역들을 생성하는, 선택적 탐색 알고리즘을 들여다보자. 이 부분은 Efficient Graph-Based Image Segmentation 논문에서 소개된 알고리즘을 활용했다고 한다.
우선, 이미지를 그래프로 표현한다. 각 픽셀은 그래프의 정점(Vertex)이 되고, 각 픽셀들과 인접한 픽셀들 간의 연결은 간선(Edge)이 되는 식이다.
각 간선 $e(v_i, v_j)$는 정점에 해당하는 픽셀의 밝기(intensity)의 차이의 절댓값으로 정의된 weight를 갖는다.
$$ w(e(v_i, v_j)) = |I(v_i) - I(v_j)| $$
weight가 낮다면, 밝기의 차이가 적은 것이고, 이는 곧 두 픽셀이 유사성을 갖는다고 볼 수 있다.
일정한 기준을 갖고 유사한 픽셀들을 합쳐 Component를 만든다.
Component와 Component간의 유사성을 비교하여 가장 유사한 Component들을 합쳐 더 큰 Component를 만든다.
이 방법을 몇 차례 반복하면 다음 그림과 같이 이미지 내부에 몇 개의 큰 영역을 얻을 수 있다.
이를 계층적 그룹화 알고리즘(Hierarchical Grouping Algorithms)이라 한다.
이 Component들을 기반으로 직사각형 모양의 Region을 만들어낸다.
영역 간 비교를 통한 병합
위에서 Component를 합치는 것에 대해 언급했는데, 다음 판별식 $D(C_1, C_2)$를 기반으로 병합을 수행한다.
$$ D(C_1, C_2) = \begin{cases}
true, & \text{if } Dif(C_1, C_2) > MInt(C_1, C_2) \\
false \text{(병합)}, & \text{otherwise}
\end{cases}$$
$$MInt(C_1, C_2) = \min \{Int(C_1) + \tau(C_1), Int(C_2) + \tau(C_2)\} $$
$$\tau(C) = k / |C| $$
$$Int(C) = \max_{e\in MST(C.E)} w(E)$$
$$ Dif(C_1, C_2) = \min_{v_i \in C_1, v_j \in C_2, (v_i, v_j) \in E} w((v_i, v_j))$$
$k$는 병합을 조절하는 매개변수이다.
쉽게 말해, 각 Component $C_1, C_2$에 속한 $v_i, v_j$를 연결하는 간선 중 weight가 가장 적은 간선의 weight $Dif(C_1, C_2)$가 $MInt(C_1, C_2)$보다 작으면 두 Component를 하나의 Component로 병합하는 것이다.
이때, $MInt(C_1, C_2)$는 각 Component에 속한 간선 중 가장 높은 weight에, 병합을 조절하는 매개변수 $k$로 계산된$\tau(C)$를 더한 값 중, 작은 값을 취하여 선택된다.
한마디로, Component 내부에 있는 연결보다 Component와 Component를 잇는 연결이 가중치가 낮다면 병합한다.
논문에서는 이렇게 생성되는 관심 영역의 수를 2천 개로 제한하였다고 한다.
Bounding Box Regression
일련의 과정을 거쳐 생성된 관심 영역(Region of Interest; ROI)들을 적절한 Bounding Box로 만들어주는 과정이다.
생성된 ROI와 정답 Bounding Box의 IOU(Intersection over Union)를 계산하여, IOU가 일정 수준(논문에서는 0.5) 이상 되도록 조정하는 회귀 모델을 학습시킨다.
$$IOU = \frac{\text{(영역의 교집합)}}{\text{(영역의 합집합)}}$$
Bounding Box는 Box의 중앙 좌표 $(x,y)$와 박스의 가로 세로 길이 $(w,h)$로 표현된다.
예측된 Bounding Box $P^i$, 정답 Bounding Box $G$는 다음과 같이 표현된다.
$$ P^i = (P^i_x, P^i_y, P^i_w, P^i_h) $$
$$G = (G_x, G_y, G_w, G_h)$$
이때, $P$에 대하여 $G$는 다음과 같이 나타내어진다.
$$ G_x = P^i_wd_x(P)+P_x \\ G_y = P^i_hd_y(P)+P_y\\
G_w = P_w\exp(d_w(P)) \\ G_h = P_h\exp(d_h(P))$$
이를 학습시키면 Bounding Box Regressor를 얻을 수 있다.
CNN을 활용한 특성 추출과 SVM을 통한 분류
일련의 과정을 거쳐 생성된 관심 영역(Region of Interest) Bounding Box를 사전 학습된 CNN에 투입하여 특성을 추출한다. 논문에서는 ImageNet 데이터셋에서 사전 학습된 AlexNet을 사용했다.
CNN은 고정 크기의 입력을 받으므로, 위에서 생성한 Bounding Box들을 비율과 관계없이 축소/확대하여 CNN의 입력 크기에 맞게 조정한다.(Wrapping)
CNN을 통과하여 추출된 특성을 SVM에 투입하여 객체의 클래스를 분류한다.
R-CNN의 의미와 한계
R-CNN은 선택적 탐색을 통해 이미지를 나누어 CNN에 투입하는 방식으로 기존 Object Detection 모델들을 압도한 모델이며, Object Detection 분야에 최초로 CNN과 딥러닝을 도입한 모델이다.
그러나, 너무 복잡한 모델의 구조와 Selective Search 알고리즘이 CPU에서 동작하여 오랜 시간이 소요되는 등 단점 또한 존재하는 모델이다.
R-CNN의 복잡성에 대해 얘기해보자면, 사전학습된 CNN 모델을 fine tune 하고, 분류용 SVM을 학습시켜야 하며, Bounding Box Regressor 모델도 학습시켜야 하여, 무려 3개의 모델을 별도로 학습시켜야 한다.
그러나 추후에 R-CNN의 이러한 단점들을 보완한 모델들이 등장하여 Object Detection 및 CV 분야를 주도하고 있는 만큼, 매우 중요한 모델임에는 틀림이 없다.
마치며
딥러닝 공부에 있어 필자가 개인적으로 생각하기에, 딥러닝 책 한 권 읽으면 닿을 수 있는 영역과 논문과 독학을 통해 도달할 수 있는 영역 사이에 있다고 느끼는 모델이 R-CNN이었다.
오늘은 언젠가 딥러닝 분야의 연구자가 되기를 꿈꾸는 필자의 여정의 첫 단계로 R-CNN을 공부해보았다.
필자의 글이 다음에 이 길을 걸을 누군가에게 도움이 되기를 바라며, 혹시 글에 잘못된 부분이나 궁금한 부분이 있다면 가감 없는 지적과 질문 부탁드리겠다.
읽어주셔서 감사합니다!
참고자료
- Rich feature hierarchies for accurate object detection and semantic segmentation - Ross Girshick et al.
- Efficient Graph-Based Image Segmentation - Pedro F. Felzenszwalb and Daniel P. Huttenlocher
- R-CNN 을 알아보자 - janim, velog
- 10분딥러닝 R-CNN 1편 2편 - 10min deep learning, youtube
- Selective Search for Object Detection | R-CNN - pawangfg
- RCNN - Time Traveler
'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 |
OverFeat 부수기 [백 병장의 CV 부수기 2편] (0) | 2022.11.28 |
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 -
OverFeat 부수기 [백 병장의 CV 부수기 2편]
OverFeat 부수기 [백 병장의 CV 부수기 2편]
2022.11.28 -
Introduction to spiking neural networks: Information processing, learning and applications
Introduction to spiking neural networks: Information processing, learning and applications
2020.01.04