elevne's Study Note
딥러닝 파이토치 교과서 (6-5: 객체인식을 위한 신경망) 본문
객체 인식, Object Detection 은 이미지나 영상 내에 있는 객체를 식별하는 컴퓨터 비전 기술이다. 이미지, 영상 내의 객체가 존재하는 Bounding Box 를 검출하고, 그 객체가 무엇인지 분류하는 작업을 수행하는 것이다. 이러한 기술은 자율주행, CCTV 등에서 활용될 수 있다. 딥러닝을 이용한 객체 인식 알고리즘은 크게 1-stage detector 과 2-stage detector 로 나눌 수 있다.
1-stage detector 은 분류와 위치 검출을 동시에 진행하는 방법이고, 2-stage detector 은 두 문제를 순차적으로 진행하는 방법이다. 1-stage detector 은 객체 인식은 비교적 빠르지만 정확도가 낮고, 2-stage detector 은 느리지만 정확도가 높다.
R-CNN
예전의 객체 인식 알고리즘들은 Sliding Window 방식, 이미지 왼쪽 위부터 일정 크기의 경계 상자를 만들고 그 안에서 객체를 탐색하는 과정을 반복하는 방식을 사용하였다. 알고리즘의 비효율성 때문에 많이 사용하지는 않았으며 현재는 Selective Search 알고리즘을 적용한 Region Proposal 을 많이 사용한다고 한다. R-CNN (Region-based CNN) 은 이미지 분류를 진행하는 CNN 과 이미지에서 객체가 있을만한 영역을 제안해주는 Region Proposal 알고리즘을 결합한 알고리즘이다.
R-CNN 은 이미지를 입력을 받은 뒤, 2000 개의 Bounding Box 를 Selective Search 알고리즘으로 추출한 뒤 Cropping 을 진행한다. (CNN 모델에 넣기위해 227x227 로 크기를 통일) 크기가 동일한 이미지 2000 개에 각각 CNN 모델을 적용하고, 각각 분류를 진행하여 결과를 도출하게 되는 것이다.
위의 Selective Search (선택적 탐색) 은 객체 인식이나 검출을 위해 가능한 Region Proposal 들을 알아내는 방법으로, 이는 분할 방식을 이용하여 Seed 를 선정하고 그 Seed 에 대한 완전 탐색을 적용한다. 우선 각각의 객체가 영역 한 개에 할당될 수 있도록 많은 초기 영역을 생성한다. (이미지를 영역 다수 개로 분할하는 것) 분할된 영역들을 비슷한 영역으로 통합하는데, 이 때 Greedy 알고리즘을 사용하여 비슷한 영역이 하나로 통합될 때까지 반복한다. 이를 기반으로 Bounding Box 들을 추출하게 된다.
R-CNN 은 복잡한 학습과정, 긴 학습시간과 대용량 저장 공간, 오래 걸리는 시간의 문제로 크게 발전하지는 못하였다. 발전된 Fast R-CNN 이 등장하게 되었다.
Fast R-CNN 에 대해 알아보기 전 Spatial Pyramid Pooling 이라는 것에 대해 알아보아야 했다. 기존 CNN 구조들은 모두 완전연결층을 위하여 입력 이미지를 고정해야 했다. 그렇기에 신경망을 통과시키려면 이미지를 고정된 크기로 자르거나 비율을 조정해야 했다. 하지만 이러한 방식은 원본 이미지에 있는 물체의 일부분이 잘리거나 본래의 생김새와 다르게 되는 문제를 발생시켰다. 이러한 문제를 해결해준 것이 Spatial Pyramid Pooling 이다.
Spatial Pyramid Pooling 은 입력이미지의 크기와 상관 없이 합성곱층을 통과시키고, 완전연결층에 전달되기 전에 특성 맵들을 동일한 크기로 조절해주는 풀링층을 적용해주는 기법이다. 이는 입력이미지의 크기를 조절하지 않고 합성곱층을 통과시키기에 원본 이미지의 특징이 훼손되지 않는 Feature map 을 얻을 수 있다.
Fast R-CNN
R-CNN 은 Bounding Box 모두 CNN 을 돌려서 분류를 위한 긴 학습 시간이 필요했다. Fast R-CNN (Fast Region-based CNN) 은 이 속도 문제를 개선하기 위해 RoI 풀링을 사용하였다. Selective Search 에서 찾은 Bounding Box 정보가 CNN 을 통과하면서 유지되도록 하고 최종 CNN 특성 맵을 풀링을 적용하여 완전연결층을 통과하도록 크기를 조정한다.
RoI Pooling 은 크기가 다른 특성 맵의 영역마다 Stride 를 다르게 Max pooling 을 적용하여 결괏값 크기를 동일하게 맞추는 방식이다.
Faster R-CNN
Faster R-CNN 은 더욱 빠른 객체 인식을 수행하기 위해 등장했다. 기존 Fast R-CNN 속도의 걸림돌이었던 후보 영역 생성을 CNN 내부 네트워크에서 진행할 수 있도록 설계하였다. 즉 Faster R-CNN 은 Fast R-CNN 에 Region Proposal Network 를 추가한 것이 핵심인 것이다. Region Proposal Network 는 마지막 합성곱층 다음에 위치하고, 그 뒤에 Fast R-CNN 과 마찬가지로 RoI Pooling 과 분류기, Bouding Box 회귀가 위치한다.
후보 영역 추출 네트워크는 특성 맵 N x N 크기의 작은 윈도우 영역을 입력으로 받고, 해당 영역에 객체의 존재 유무 판단을 위해 Binary Classification 을 수행하는 작은 네트워크를 생성한다. R-CNN, Fast R-CNN 에서 사용하였던 Bounding Box Regression 또한 위치 보정을 위해 추가되었다. 또, 하나의 Feature map 에서 모든 영역에 대한 객체의 존재 유무를 확인하기 위해서는 Sliding window 방식으로 앞서 설계한 작은 윈도우 영역 (N x N 크기) 을 이용하여 객체를 탐색한다.
하지만, 후보 영역 추출 네트워크는 이미지에 존재하는 객체들의 크기와 비율이 다양하기 때문에 고정된 N x N 크기의 입력만으로 다양한 크기와 비율의 이미지를 수용하기 어려운 단점이 있다. 이러한 단점을 보완하기 위해 여러 크기와 비율의 Reference Box k 개를 미리 정의하고 각각의 Sliding window 위치마다 박스 k 개를 출력하도록 설계하는데, 이 방식을 anchor 이라고 한다. 후보 영역 추출 네트워크의 출력 값은 모든 Anchor 위치에 대해 각각 개체와 배경을 판단하는 2k 개의 분류에 대한 출력과 x, y, w, h 위치 보정 값을 위한 4k 개의 회귀 출력을 갖게되는 것이다.
Reference:
딥러닝 파이토치 교과서
'Machine Learning > Pytorch' 카테고리의 다른 글
딥러닝 파이토치 교과서 (7-1: ~ARIMA) (0) | 2023.04.06 |
---|---|
딥러닝 파이토치 교과서 (6-6: 이미지분할을 위한 신경망) (0) | 2023.03.31 |
딥러닝 파이토치 교과서 (6-4: ResNet(2)) (0) | 2023.03.28 |
딥러닝 파이토치 교과서 (6-4: GoogLeNet, ResNet(1)) (0) | 2023.03.22 |
딥러닝 파이토치 교과서 (6-3: VGGNet (2)) (0) | 2023.03.21 |