지금까지 딥러닝을 이용한 이미지 분류에 대해 배웠다.
이미지 분류에서는 이미지에 주 대상 물체가 하나만 있다고 가정하며, 모델의 역할은 이 물체의 카테고리가 무엇인지 식별하는 것이다.
사물 탐지는 하나 이상의 물체를 식별하거나 물체의 위치를 특정하는 분야를 말한다.
사물 탐지의 두 가지 과업은 물체의 이미지 내 위치를 특정하는 것이고, 다른 하나는 각 물체를 분류하는 것이다.
따라서 출력 결과는 특정 대상의 위치를 나타내는 박스와 해당 물체의 클래스를 예측하는 것이다.
7.1 사물 탐지 알고리즘의 일반적인 프레임워크
사물 탐지 프레임워크는 다음 4개 요소로 구성된다.
- 영역 제안:
이미지에서 시스템이 처리할 영역인 RoI(Region of interest)를 제안하는 딥러닝 모델 또는 알고리즘. RoI는 이미지 내 물체가 존재할 것이라 예상되는 영역. 이 컴포넌트는 각각 물체 존재 확신도가 매겨진 많은 수의 박스 정보를 출력한다. - 특징 추출 및 예측:
각 박스 영역의 시각적 특징이 추출된다. 이러한 특징을 평가해서 물체 존재 여부와 물체의 클래스를 판단한다. - 비최대 억제: 이 단계쯤이면 모델이 같은 물체에 대해 복수의 박스를 발견했을 가능성이 높다. NMS는 같은 물체에 대한 중복된 박스를 탐지하고 통합해서 물체 하나마다 하나의 박스만 남도록 하는 역할을 한다.
- 평가 지표: 이미지 분류의 정확도, 정밀도, 재현율 등과 비슷하게 사물 탐지에도 성능을 측정하는 고유의 평가 지표가 있다. 이 장에 서는 그중 가장 널리 쓰이는 mean (average precision), mAP와 PR 곡선, 중첩률을 설명한다.
7.1.1 영역 제안
이 단계에서는 시스템이 이미지를 관찰하고 추가 분석이 필요한 RoI를 제안한다.
RoI는 시스템이 이미지의 해당 위치에 높은 확률(물체 존재 확신도)로 물체가 존재한다고 판단한 영역이다.
물체 확신도가 높은 영역은 다음 단계로 전달되고, 낮은 영역은 폐기된다.
해당 단계에서 생성된 많은 후보 영역이 이후 단계에서 분석 및 분류를 거치게 된다.
신경망은 이미지를 임계값에 따라 임계값을 넘으면 전경(물체), 안 넘으면 배경(물체 아님)으로 나눈다.
임계값이 너무 낮으면 학습 대상이 많아져 계산 복잡도가 증가한다.
7.1.2 특징 추출 및 예측
해당 컴포넌트에는 특징 추출을 위해 사전 학습된 합성곱 신경망이 포함된다.
대개의 프레임워크에는 이 컴포넌트로 사전 학습된 이미지 분류 모델, 일반화 성능이 높은 모델을 사용한다.
물체가 포함됐을 가능성이 높다고 판단된 모든 영역을 신경망이 분석하며 각 영역마다 두 가지를 예측한다.
- 경계 박스 예측: 물체를 감싸는 박스의 좌표를 예측. 경계 박스의 좌표는 튜플 (x, y, w, h) = (중심점, 너비, 높이)
- 클래스 예측: 해당 영역의 물체가 각 클래스에 속할 확률을 예측하는 소프트맥스 함수.
제안되는 영역의 수가 매우 많아서 물체마다 여러 개의 경계 박스가 생긴다.
7.1.3 비최대 억제
Non-Maximum Suppression, NMS는 같은 물체를 여러 번 탐지 할 수 있는 문제를 해결하기 위한 기법이다.
예측 확률이 가장 높은 경계 박스만 남기고 나머지는 배제한다.
알고리즘의 작동 과정은 다음과 같다.
- 예측 확률이 미리 설정된 신뢰 임곗값에 미치지 못하는 경계 박스를 폐기한다.
- 남아 있는 경계 박스 중 예측 확률이 가장 높은 것을 선택한다.
- 선택된 박스와 예측 클래스가 같은 박스의 중복 영역을 계산한다.
같은 클래스를 예측한 경계 박스끼리의 평균 중복 영역을 계산한다.
이 지표를 중첩률(Intersection over union, IOU)라고 한다. (이후 추가 설명 예정) - 중첩률이 NMS 임계값에 미치지 못하는 경계 박스를 배제한다. 대개의 경우 0.5를 임계값으로 설정한다.
NMS 알고리즘은 사물 탐지 프레임워크에서 거의 표준으로 사용된다.
7.1.4 사물 탐지 성능 평가 지표
사물 탐지의 성능을 평가하는 지표는 크게 초당 프레임 수와 평균평균정밀도 두 가지가 쓰인다.
1) 초당 프레임 수 : 탐지 속도의 평가 지표
성능 비교 실험 결과를 언급한 논문에서 '신경망 X는 Z FPS 속도에서 mAP Y%를 달성했다.'라고 쓰인다.
Z가 초당 프레임수
2) 평균평균정밀도 : 신경망 예측 정밀도의 평가 지표
0부터 100 사이의 값으로 나타내며 값이 클수록 성능이 좋다.
mAP 계산 방법을 이해하려면 먼저 IoU와 PR 곡선을 이해해야 한다.
3) 중첩률(IoU)
2개의 경계 박스가 중첩되는 정도를 나타내는 값.
정답 경계 박스와 예측 경계 박스의 IoU를 계산해서 결과가 유효한지 판단한다.
중첩률 = 중첩되는 부분의 면적 / 두 박스를 합친 부분의 면적
중첩률은 0부터 1까지의 값을 가지며 값이 클수록 좋다.
- 정답 경계 박스: 수동 레이블링 된 경계 박스
- 예측 경계 박스: 모델의 예측 결과
4) PR 곡선
진양성(TP)과 위양성(FP)을 정의했으니 이제 주어진 클래스에 대한 탐지 결과의 정밀도와 재현율을 계산할 수 있다.
재현율 = TP / (TP + FN)
정밀도 = TP / (TP + FP)
모든 대상 클래스에 대해 정밀도와 재현율을 계산하고 나면, PR 곡선을 그릴 수 있다.
재현율이 증가할 때 정밀도가 하락하지 않으면 임계값을 변화시켜도 정밀도가 하락하지 않는다는 의미이므로 모델 성능이 좋은 경우다.
반대로 성능이 낮은 모델은 재현율을 끌어올리면서 위양성의 수가 늘어난다.
PR 곡선을 그렸으니 PR 곡선 아래 면적인 AUC를 계산하여 평균정밀도(AP)를 계산한다.
그 다음 각 클래스의 평균정밀도의 평균인 평균평균정밀도를 계산한다.
각 분류 클래스마다 확률의 임계값을 변화시키면 PR 곡선을 그린다.
7.2 영역 기반 합성곱 신경망
영역기반 합성곱 신경망은 2014년에 로스 거식이 제안한 신경망 구조다.
R-CNN이 발전해 나가는 과정을 알아본다.
7.2.1 R-CNN이란
네 가지 구성 요소는 다음과 같다.
- RoI 추출기(Region Proposal):
영역 제안 모듈이라고도 한다. 선택적 탐색 알고리즘을 이용해서 입력 이미지를 스캔하며 패턴이 있는 영역을 찾아 다음 단계에서 추가 처리하도록 RoI로 제안한다. 제안된 RoI는 고정된 크기로 추출된다. (CNN에 입력하기 위해) - 특징 추출 모듈(CNN Feature Extraction):
사전 학습된 합성곱 신경망에 앞서 제안된 RoI를 입력해 특징을 추출한다. - 분류 모듈(Region-based Clssification):
서포트 벡터 머신 등 기존 머신러닝 알고리즘으로 분류기를 학습한 다음 특징 추출 모듈에서 물체가 무엇인지 분류한다. - 위치 특정 모듈:
경계 박스 회귀 모듈(Bounding Box Regression)이라고도 한다. 이 모듈의 예측 대상은 경계 박스의 위치와 크기다. 분류는 사전 정의된 클래스를 출력, 회귀는 연속값을 예측 대상으로 한다.
물체를 포함하는 영역을 제안하는 데 선택적 탐색 알고리즘이 사용된다.
물체가 존재하는 영역을 찾고, 완전 탐색 알고리즘과 상향식 영역 통합 알고리즘을 적용해 가능한 모든 물체 위치를 감지한다.
알고리즘은 다음과 같은 단계로 구성된다.
- 초기 분할(Initial Segmentation):
입력 이미지를 작은 영역으로 분할한다. 이 단계에서는 이미지의 텍스처, 색상, 경계 등의 저수준 특징을 고려하여 초기 분할을 수행한다. - 유사성 병합(Similarity Measure and Merge):
분할된 영역들 간의 유사성을 측정하고, 유사한 영역들을 병합한다. 이 단계에서는 각 영역의 특징을 비교하여 유사성 점수를 계산하고, 점수가 높은 영역들을 병합하여 큰 영역을 형성한다. 이를 통해 이미지의 공간적인 일관성을 고려한 후보 영역을 생성한다. - 객체 제안(Region Proposal):
유사성 병합된 영역들을 기반으로 객체 제안을 생성한다. 이 단계에서는 다양한 크기와 비율의 후보 영역을 생성하기 위해 다양한 스케일과 종횡비를 사용한다. 이때 생성된 후보 영역은 각각 ROI(Region of Interest)로 표현된다. - 후보 영역 추출(Region Extraction):
객체 제안된 후보 영역을 추출하여 고정된 크기의 영역으로 변환한다. 이때 선택적 검색 알고리즘은 후보 영역 내의 이미지 픽셀 정보를 사용하여 각 후보 영역을 잘라내고 크기를 조정하여 동일한 크기로 맞춘다.
단순하게 선택적 탐색 알고리즘은 이미지를 스캔해서 RoI를 제안해 준다.
번호 순서가 거꾸로 된 것 같다.
1) R-CNN 학습
R-CNN은 RoI 추출기, 특징 추출 모듈, 분류 모듈, 경계 박스 회귀 모듈 이렇게 4개의 요소로 구성된다.
RoI 추출기를 제외한 모든 모듈은 학습이 필요하다.
학습 과정은 다음과 같다.
- 특징 추출 모듈로 사용할 합성곱 신경망을 학습한다.
- SVM 분류기를 학습한다. 레이블링 된 데이터를 학습해야 한다.
- 경계 박스 회귀 모듈을 학습한다. 해당 모델의 출력은 K가지 클래스에 속하는 물체가 포함된 경계 박스를 나타내는 튜플이다.
3개의 모듈을 완전히 별개로 학습시켜야 하고 이미 계산한 결과를 재사용할 수 없다.
2) R-CNN의 단점
하나의 신경망으로 구성된 완결적인 시스템이 아니며 서로 독립된 여러 알고리즘이 조합되어 동작하는 시스템이기 때문에 다음과 같은 단점이 존재한다.
- 사물 탐지 속도가 느리다.
-> 이미지 한 장마다 2,000개 이상의 RoI, RoI 하나하나가 모두 전체 파이프라인을 통과하고 결과를 재사용하지도 못한다. - 학습 과정이 다단계로 구성된다.
- 학습의 공간 및 시간 복잡도가 높다.
7.2.2 Fast R-CNN
다음 두 가지 설계 수정을 통해 처리 속도와 정확도가 개선되었다.
- CNN 특징 추출기를 맨 앞에 배치에 전체 입력 이미지로부터 영역을 제안한다. 이를 통해 전체 이미지를 하나의 CNN으로 처리할 수 있다.
- CNN에 SVM 분류기 대신 소프트맥스층을 추가해서 분류도 수행하게 한다. 하나의 모듈이 두 가지 일을 할 수 있게 된다.
1) Fast R-CNN의 구조
아래 그림에서 보이는 것과 같이 신경망의 마지막 특징 맵을 바탕으로 영역을 제안한다.
이 덕에 전체 이미지를 입력받는 CNN 하나만 학습하면 된다.
구성 요소는 다음과 같다.
- 특징 추출 모듈:
ConvNet으로 시작하여 전체 이미지에서 특징을 추출한다. - RoI 추출기:
선택적 탐지 알고리즘으로 약 2,000개 영역을 제안한다. - RoI 풀링층:
새로 추가된 요소로 특징 맵에서 전결합층에 입력할 고정 크기의 영역을 추출하는 역할을 한다. 최대 풀링을 통해 고정 크기로 추출한다. - 2개의 출력층:
RoI의 각 클래스에 속할 확률을 출력하는 소프트맥스층과 최초 제안된 RoI와의 차이를 출력하는 경계 박스 회귀층
2) Fast R-CNN의 다중 과업 손실 함수
해당 신경망은 물체의 클래스 분류와 경계 박스 위치 및 크기를 함께 학습하는 완결된 신경망 구조다.
따라서 여기에 사용되는 손실 함수도 위 두 사항을 함께 다루는 다중 과업 손실 함수여야 한다.
사물 탐지 문제는 사물 분류와 위치 특정 이렇게 두 가지 목표를 최적화해야 하므로 손실 함수도 2개 있어야 한다.
Fast R-CNN에는 각각 다른 손실 함수가 적용되는 다음 2개의 출력층이 있다.
따라서 전체 손실 함수는 다음과 같다.
[u>=1]은 해당 영역에 물체가 포함되지 않고 배경(u=0)뿐일 때를 구분하기 위한 표시 함수이다.
따라서 이 경계 박스는 무시된다. u>=1 이면 1, 아니면 0을 출력한다.
3) Fast R-CNN의 단점
Fast R-CNN은 성능 측정 시점에는 매우 속도가 빠르다. 그 이유는 합성곱 신경망이 이미지 한 장마다 영역 제안을 2,000개나 처리할 필요가 없기 때문이다.
하지만, 큰 병목 지점이 여전히 남아 있다. 영역 제안을 생성하는 선택적 탐지 알고리즘은 여전히 속도가 느리며 별도의 모델에 들어 있다.
딥러닝만으로 완결된 물체 인식 시스템을 만드는 마지막 단계는 이 영역 제안 알고리즘을 신경망에 통합시키는 단계다.
7.2.3 Faster R-CNN
해당 구조는 선택적 탐지 알고리즘 대신 영역 제안 신경망 Region Proposal Network, RPN을 도입해서 영역 제안을 학습 과정에 포함시켰다.
그런 다음 예측 영역 제안은 RoI 풀링층을 사용하여 재구성되고, 제안된 영역 내에서 이미지를 분류하고 경계 박스의 오프셋값 예측에 사용된다. (경계 상자의 오프셋값은 후보 영역 내의 객체 경계 상자와 실제 객체 경계 상자 간의 차이를 나타내는 값입니다.)
1) Faster R-CNN의 구조
다음 두 신경망으로 구성된다.
- 영역 제안 신경망 RPN:
특징 추출기에서 생성한 특징 맵에서 추가 분석을 이어갈 RoI를 제안하는 역할을 한다. RPN의 출력은 물체 존재 확신도와 경계 박스 위치 등 두 가지다. - Fast R-CNN:
- 특징 추출기 역할을 하는 기본 신경망
- RoI를 고정 크기로 변환하는 RoI 풀링층
- 2개의 전결합층으로 나뉜 출력층. 하나는 클래스 분류 소프트맥스, 하나는 경계 박스 예측 회귀 모듈
이미지는 사전 학습된 VGG16 신경망을 통과해 특징이 추출되고 이는 병렬로 위의 두 신경망으로 입력된다.
이들 출력은 각각 2개의 전결합층으로 전달된다.
이 신경망 구조는 전체 구조가 학습 가능하며, 다음과 같은 요소 전체를 신경망에 내장시키는 데 성공했다.
- 기본 특징 추출기
- 영역 제안 모듈
- RoI 풀링층
- 사물 분류기
- 경계 박스 회귀 모듈
1) 기본 특징 추출기
기본 특징 추출기는 Fast R-CNN에서 사용되는 사전 학습된 CNN에서 분류기 부분을 분리하여 입력 이미지에서 특징을 추출하는 역할을 합니다. 어떤 CNN 구조든 사용할 수 있으며, 최근에는 파라미터 수를 줄이고 성능을 개선한 신경망 구조들이 주목받고 있습니다.
합성곱층은 자신의 이전 층에서 전달된 정보를 더욱 추상화하는 효과가 있다. 이전에 각 이목구비에서 얼굴 전체로 가능 과정처럼~
이런 식으로 마지막 층에서 RPN에 입력하여 물체가 있는 영역을 추출할 수 있는 특징 맵을 만들어낸다.
2) 영역 제안 모듈 (RPN)
영역 제안 모듈(RPN)은 사전 학습된 합성곱 신경망에서 생성된 특징 맵을 기반으로 물체가 위치할 수 있는 영역을 찾는 역할을 한다. RPN은 어텐션 네트워크라고도 불리며, 전체 신경망의 관심을 물체가 있을 만한 영역으로 유도하는 역할을 한다.
Faster R-CNN은 RPN을 사용하여 RoI(Region of Interest) 제안 기능을 신경망 구조에 포함시켰다.
RPN은 3x3 전결합 합성곱층(512 채널)과 물체 포함 여부를 예측하는 분류층과 경계 상자 회귀를 담당하는 1x1 합성층 두 개로 구성된다. 기반 신경망의 마지막 특징 맵에 3x3 합성곱 연산이 적용되고, 이 결과는 두 개의 1x1 합성곱층으로 전달된다.
이 두 합성곱층은 각각 영역의 물체 포함 여부를 예측하고 경계 상자 회귀를 담당한다.
RPN의 목표는 해당 영역에 추가 분석이 필요한 물체가 존재하는지 여부를 판단하는 것이다. 따라서 RPN은 현재 영역의 물체 존재 확신도를 판단하는 분류기를 포함하며, 이를 통해 "이 영역에 물체가 존재하는가?"를 확인한다. 그렇다고 판단된다면 해당 영역은 RoI 풀링층을 통해 추가 분석을 위해 전달된다.
* 전결합 합성곱 신경망
FCN(Fully Connected Network)은 사물 탐지에 사용되는 신경망에서 전결합층을 제거하고, 평균 풀링을 활용하여 예측 결과를 출력하는 구조를 가지고 있다.
FCN은 속도가 빠르고 입력 이미지 크기에 제한이 없는 장점이 있으며, 입력 이미지의 크기가 고정된다는 단점이 있지만 이는 특히 배치 단위로 이미지를 처리하는 경우에 유용하다.
3) 경계 박스 회귀층에서 경계 박스를 예측하는 방법
경계 박스는 튜플 (x, y, w, h)로 결정되는 사각의 물체를 둘러싼 영역이다.
연구 과정에서 좌표 (x, y)를 정의하는 데 어려움이 있었는데, 신경망의 예측값을 이미지 내부에 해당하는 범위로 강제하는 규칙을 적용해야 했기 때문이다.
그래서 그 대안으로 이미지 안에 기준 역할을 할 앵커 박스를 정의하고, 경계 박스 회귀층이 이 앵커 박스를 기준으로 한 오프셋인 델타를 예측하도록 하는 방법을 사용했다.
4) 앵커 박스
RPN은 특징 맵의 각 위치마다 1개의 영역을 생성하는 슬라이딩 윈도우 접근 방식을 사용한다.
이때 영역은 앵커 박스로 표현되며, 앵커는 해당 위치의 슬라이딩 윈도우의 중심에 위치하며 다양한 물체를 포함할 수 있는 가로세로 비율과 크기를 가진다.
앵커 박스는 위치가 고정되어 있으며 객체의 위치 예측에 사용되는 참조점 역할을 한다.
논문에서는 9개의 앵커 박스를 만들었으며, 각각 다양한 가로세로 비율과 크기를 가지도록 설계되었다.
5) RPN 학습
RPN은 앵커 박스의 물체 존재 확신도를 출력할지 여부를 결정하고 물체 좌표값의 네 가지 요소를 예측하도록 학습된다.
학습 데이터는 사람이 직접 레이블링 한 경계 박스이고 이를 정답 경계 박스라고 한다.
각각의 앵커 박스에 대해 중첩 확률 p를 계산한다. 이는 앵커 박스가 정답 경계 박스와 얼마나 겹치는지를 나타낸다.
중첩 확률이 높다면, 앵커 박스에 물체가 포함된 확률은 참으로 분류된다.
물체의 유무가 참 또는 거짓인 앵커 박스는 2개의 전결합층에 입력된다.
6) 전결합층
출력층에 해당하는 전결합층은 두 가지 값을 입력받는다.
하나는 합성곱층에서 출력한 특징 맵이고, 다른 하나는 RPN에서 제안한 RoI다.
출력층은 RoI를 분류하고 해당 영역에 있는 물체의 클래스와 경계 박스를 결정하는 파라미터를 출력한다.
소프트맥스층이 사물 분류를 담당하고, 위치 회귀층은 선형 회귀 모델이 경계 박스의 위치를 예측한다.
이들 전결합층의 파라미터 역시 다중 과업 손실 함수를 최적화하는 방법으로 학습된다.
7) 다중 과업 손실 함수
손실 함수의 수식이 복잡해 보이지만 내용은 그렇게 어렵지 않다.
수식을 단순화시키면 분류 손실과 위치 손실(경계 박스) 이 두 가지 함수의 합임을 알 수 있다.
- 모든 손실 함수는 정답에서 예측값을 빼는 형태로 오차를 계산한다. 분류 손실은 교차 엔트로피이므로 새롭지 않다.
교차 엔트로피는 예측 확률 p과 정답 p*의 오차를 계산하는 로그 손실 함수다.
교차 엔트로피 -> L_cls(p_i, p*_i) = -p*_i log p_i - (1 - p*_i) log (1 - p_i) - 위치 손실은 경계 박스의 예측된 위치와 실제 위치의 차이를 L1 손실 함수로 측정한 것이다. 이 차이에 해당 영역의 물체 존재 여부인 p*를 곱한다. 이 영역에 물체가 없다면 p*는 0이 되어 전체 위치 손실도 0이다.
마지막으로 두 손실 함수를 합해 다중 과업 손실 함수를 만든다.
7.2.4 R-CNN과 그 변종 정리
- R-CNN:
경계 박스를 선택적 탐색 알고리즘이 제안한다. 각 경계 박스의 영역 이미지에서 (AlexNet 등의) 합성곱 신경망이 특징을 추출하고, 이 특징을 통해 선형 SVM이 물체의 클래스, 선형 회귀 모델이 경계 박스 의 위치를 각각 예측한다. - Fast R-CNN:
완결된 단일 모델이 되도록 R-CNN의 설계를 단순화했다. CNN뒤에 배치된 Rol 풀링 층이 각 경계 박스 영역의 크기를 고정 크기로 변환하는 것이 특징이다. 모델이 물체의 클래스 레이블과 Rol를 모두 직접 예측한다. - Faster R-CNN :
전체 과정을 하나의 달러닝 모델로 만든 사물 탐지 모델이다. 선택적 탐색 알고리즘을 영역 제안 신경망으로 대체했는데. 영역 제안 신경망은 CNN에서 추출한 전체 이미지의 특징 맵으로부터 Rol를 제안하도록 학습된다.
1) R-CNN 단점
지금까지 소개한 연구 논문은 모두 R-CNN의 연구 성과를 개선해서 실시간 사물 탐지를 실현하기 위한 결과이다.
단점은 다음과 같다.
- 학습 과정이 복잡하고 시간이 오래 걸린다.
- 학습이 여러 단계에 걸쳐 이루어진다 (예: 영역 제안과 분류).
- 추론 속도가 느리다.
2) 다단계 탐지기와 단일 단계 탐지기
R-CNN 및 변종 모델은 모두 영역 기반 방식이다. 탐지 과정이 두 단계로 나뉘므로 이들 탐지기를 2단계 탐지기라고 한다.
- 다단계 탐지기(R-CNN 및 변종): 영역 기반 방식으로 탐지 과정이 두 단계로 나뉜다.
먼저 선택적 탐지 알고리즘이나 RPN을 통해 영역 제안을 추출하고, 그 후 분류기가 제안된 영역만 처리한다.
이 방식은 영역 제안 수가 상대적으로 적으나(가능한 경계 박스 수가 무한대이기 때문에 영역 제안 수는 상대적으로 희소하다.) 학습과정이 복잡하고 시간이 오래 걸리며 추론 속도가 느리다. - 단일 단계 탐지기(SSD와 YOLO): 영역 제안 추출 단계를 건너뛰고 이미지 내 가능한 모든 위치를 직접 탐지한다.
처리가 빠르고 간단하지만 일부 정확도는 소폭 감소하는 경향이 있다.
단일 단계 탐지기는 2단계 탐지기에 비해 정확도가 낮을 수 있지만 처리 속도는 훨씬 빠르다. SSD와 YOLO는 이러한 단일 단계 탐지기에 속한다.
7.3 싱글샷 탐지기
Single-shot detector, SSD는 2016년 웨이 리우의 논문에서 처음 제안되었다.
R-CNN 및 변종을 다단계 탐지길하고 설명했다. 이러한 종류는 먼저 경계 박스 내 영역의 물체 존재 확신도를 예측한 다음 이 경계 박스를 분류기로 넘겨 물체의 클래스를 예측하는 방식으로 동작한다.
반면, SSD나 YOLO 같은 단일 단계 탐지기는 합성곱층에서 위치와 클래스를 한 번에 예측한다. 그래서 싱글샷이다.
경계 박스가 정답과 완전히 일치하면 물체 존재 확신도가 1이고, 아니면 0, 임계값은 0.5이다.
7.3.1 SSD의 추상적 요소
SSD는 피드포워드 합성곱 신경망 구조를 가지며, 여러 개의 고정 크기 경계 박스를 생성하고 각 박스에 클래스별 물체 존재 확신도를 부여한 다음 비최대 억제 알고리즘을 통해 최적 탐지 결과를 제외한 나머지를 배제한다.
SSD 모델은 크게 다음 세 가지 요소로 구성된다.
- 특징 맵을 추출하는 기본 신경망:
사전 학습된 신경망에서 분류기 부분을 제거한 것. - 다중 스케일 특징층:
기본 신경망 뒤에 배치된 일련의 합성곱 필터. 이들 층은 점진적으로 필터 크기가 감소하며 둘 이상의 배유로 탐지를 시도. - 비최대 억제:
NMS를 적용해서 중첩되는 경계 박스를 배제하고 물체별로 경계 박스를 하나만 남김.
위의 그림에서 보이는 모든 CONV 층이 NMS로 직접 예측 결과를 전달하는 것을 볼 수 있다.
클래스 당 8,732건이 탐지되며 이를 NMS 비최대 억제층에 전달해서 물체 하나에 탐지 한 건만 남기는 것을 알 수 있다.
아래는 GPT의 추가 설명이다.
예측 결과는 어떤 모양을 보일지 생각해 보자.
신경망은 각 특징에 대해 다음과 같은 값을 예측한다.
- 경계 박스를 결정하는 값(4개): (x, y, w, h)
- 물체 존재 확신도(1개)
- 각 클래스의 확률을 나타내는 값(C개)
예측 결과는 5+C개 값으로 구성된다. 분류 대상 클래스 수가 4개 라면 C는 4개가 된다.
즉, 예측 결과 벡터는 [x, y, w, h, 물체 존재 확신도, C1, C2, C3, C4]가 된다.
7.3.2 기본 신경망
SSD 신경망 구조에는 VGG16 신경망에서 분류기 역할을 담당하는 전결합층을 제거하여 사용했다.
VGG16은 고해상도 이미지 분류에서 높은 성능을 보였다.
분류기 역할을 하는 층을 제거한 대신 보조 합성곱층을 추가해서 다양한 배율에서 특징을 추출하고 이어지는 층에서 점진적으로 이미지 크기를 축소해 가는 효과를 얻었다.
기본 신경망의 예측 과정은 다음과 같다.
예제를 통해 기본 신경망의 예측 과정을 살펴보자. 이미지를 입력하고 이미지에 있는 모든 보트를 포함하는 경계 박스를 예측하려 한다.
- SSD에는 R-CNN의 앵커 박스와 비슷한 역할을 하는 격자가 있다. 각 격자점마다 해당 앵커를 중심점으로 하는 경계 박스를 생성한다. SSD에서는 이들 격자점을 프라이어라고 한다.
- SSD에서는 각 경계 박스를 별도의 이미지로 간주한다. 경계 박스마다 '이 경계 박스 안에 보드가 있는가?, 좀 더 정확히 말하자면 '이 경계 박스 안에서 보트의 특징을 뽑았는가?'를 확인한다.
- 보트의 특징을 포함하는 경계 박스를 발견했다면 해당 박스의 예측 좌표와 사물 분류 결과를 NMS 층으로 전 달한다.
- NMS 층은 정답과 중점들이 가장 높은 경께 박스 하나만 남기고 다른 경제 박스는 배제한다.
7.3.3 다중 스케일 특징
다중 스케일 특징층은 기본 신경망 뒤로 이어지는 일련의 합성곱층이다.
합성곱 필터의 크기가 점진적으로 감소하도록 배치되어 다양한 배율로 예측 및 탐지를 수행할 수 있는 것이 특징이다.
1) 다중 스케일 탐지
이미지에 서로 다른 크기로 존재하는 물체를 처리하기 위해 다중 스케일 특징층을 사용하는 것이 필요하다.
합성곱층의 크기를 다르게 조절하여 여러 배율에 해당하는 파라미터를 공유할 수 있다. 이를 통해 큰 물체를 탐지하기 위해 이미지를 축소하고, 특징 맵의 크기를 줄여 활용한다.
합성곱층을 거치면 이미지는 변환되지만, 원래 이미지의 특징은 보존된다.
이러한 과정은 다중 스케일 특징층을 통해 구현된다.
실험을 통해 일반적으로 다중 스케일 특징층 수가 늘어날수록 정확도가 개선된 것을 보였다.
2) 다중 스케일 특징층의 구조
SSD 연구진은 크기가 점차 감소하는 여섯 층의 합성곱층을 추가했는데, 이 층수를 결정하는 과정에서 많은 수의 시행착오를 거쳤다.
CONV6는 커널 크기가 3x3, CONV7은 1x1로 서로 독립된 층이고, 8번째부터 11번째 층은 커널의 크기가 1x1, 3x3인 2개의 합성곱층이 합쳐져 구성된 블록으로 이루어져 있다.
# conv6과 conv7
conv6 = Conv2D(1024, (3, 3), dilation_rate=(6, 6), activation='relu',
padding= 'same') (pool5)
conv7 = Conv2D (1024, (1, 1), activation= 'relu', padding= 'same') (conv6)
# conv8 블록
conv8_1 = Conv2D(256, (1, 1), activation='relu', padding= 'same" )(conv7)
conv8_2 = Conv2D(512, (3, 3), strides (2, 2), activation='relu',
padding='valid')(conv8_1)
# conv9 블록
conV9_1 = Conv2D (128, (1, 1), activation= 'relu', padding= 'same') (conv8_2)
conV9_2 = Conv2D(256, (3, 3), strides= (2, 2), activation= 'relu',
padding='valid')(conv9_1)
# conv10 블록
conv10_1 = Conv2D(128, (1, 1), activation= 'relu', padding= 'same") (conv9 2)
conv10_2 = Conv2D (256, (3, 3), strides=(1, 1), activation= 'relu',
padding= 'valid') (conv10_1)
# conv11 블록
conv11_1 = Conv2D (128, (1, 1), activation= 'relu', padding= 'same") (conv10 2)
conv11_2 = Conv2D(256, (3, 3), strides=(1, 1), activation= 'relu',
padding='valid') (conv11 1)
* 팽창 합성곱
팽창 합성곱에는 새로운 파라미터인 팽창률이 도입된다.
팽창률이란 커널과 대상 이미지의 거리를 의미한다.
팽창률 2를 적용한 3x3 커널은 5x5 커널에서 9개의 파라미터만 사용하는 것과 같다.
팽창 합성곱은 같은 계산 비용으로 더 넓은 감수 영역 효과를 볼 수 있다.
이는 특히 실시간 세그멘테이션 분야에서 널리 사용된다.
합성곱 연산을 여러 번 적용하거나 큰 커널을 적용할 계산 자원의 여유가 없을 때 넓은 범위의 감수 영역이 필요한 경우 사용하면 좋다.
Conv2D(1024, (3, 3), dilation_rate=(2, 2), activation='relu', padding='same')
7.3.4 비최대 억제
SSD에서는 비최대 억제(NMS) 알고리즘을 사용하여 추론 시 생성된 많은 수의 경계 박스 중에서 확신도가 낮거나 중첩률이 낮은 박스를 제외하고 상위 N개의 예측만 남게 한다.
NMS는 경계 박스를 확신도를 기준으로 정렬하고, 현재 경계 박스와 이전에 본 박스들과의 중첩률을 계산한다.
같은 클래스이면서 일정 중첩률을 초과하는 박스는 폐기되어 겹치는 예측을 제거한다.
이 과정을 통해 최종적으로 이미지 당 최대 200개의 경계 박스만 남게 된다
7.4 YOLO
YOLO는 2016년 조셉 레드몬이 최초로 제안한 사물 탐지 신경망으로, R-CNN과 비슷하게 수년에 걸쳐 다음과 같은 개선된 파생 버전이 제안되었다.
- YOLOv1 2016:
사물 탐지와 클래스 분류를 하나로 통합한 설계를 적용했기 때문에 '통합 실시간 사물 탐지'라고 불렸다. - YOLOv2 2016:
물체를 9,000가지 클래스로 분류할 수 있다. 정확도는 mAP 16% 정도로 낮지만, 추론 시 처리 속도가 매우 빨랐다. - YOLOv3 2018:
모델의 규모를 크게 키워 mAP 57.9%를 달성했다.
YOLO 및 그 변종은 모두 전체 처리 과정이 딥러닝으로 구현된 고속 사물 탐지 모델이며, 고속 실시간 사물 탐지에 도전한 초기 시도 중 한 가지다.
정확도는 R-CNN에 미치지 못 하지만 실시간 영상 또는 카메라 입력 처리 데모용으로 자주 사용된다.
해당 신경망은 R-CNN과 같은 영역 제안 단계가 아예 없다.
대신 입력을 비교적 소수의 격자 형태로 분할하고 분할된 영역을 대상으로 직접 경계 박스와 사물 분류를 수행한다.
그 이후는 NMS를 사용해서 최종 예측 결과로 좁히는 방식이다.
7.4.1 YOLOv3 처리 과정
첫 번째 단계는 이미지를 SxS개의 격자 모양으로 분할하는 것이다.
정답 경계 박스의 중심이 이 중 어떤 조각에 포함된다면, 해당 조각에서 물체의 존재가 탐지되어야 한다.
다음과 같은 방법으로 분할된 각 조각마다 B개의 경계 박스와 물체 존재 확신도, 물체의 클래스를 예측한다.
- B개의 경계 박스를 결정하는 좌표:
YOLO에서 경계 박스는 4개의 값을 가진 튜플 (bx, by, bw, bh)로 정의된다. 여기서 x와 y는 조각 위치에 대한 오프셋이다. - 물체 존재 확신도(Po):
해당 이미지 조각에 물체가 포함되어 있을 확률이다. 이 확신도는 시그모이드 함수를 통해 0과 1 사이의 값으로 변환되어 확률로 사용된다. 물체 존재 확신도는 다음과 같이 계산된다.
-> Po = Pr(물체 포함) x 중첩률(예측, 정답) - 물체의 클래스 분류:
경계 박스에 물체가 포함되었다면 K개의 클래스에 대해 물체가 해당 클래스에 속할 확률을 계산한다.
YOLOv3 이전에는 클래스 분류 확률을 구하기 위해 소프트맥스 함수를 사용했지만, YOLOv3에서는 시그모이드 함수를 사용한다.
이는 경계 박스가 하나의 클래스에만 속하는 것을 가정하는 소프트맥스 함수의 한계를 극복하기 위함이다.
YOLOv3에서는 다중 레이블을 부여할 수 있는 모델을 사용 하여 정확도를 높일 수 있다.
각 경계 박스(B)마다 경계 박스 좌표(4), 물체 존재 확신도(1), 분류 클래스의 예측 결과(K)가 부여되며, 예측된 값의 개수는 SxSx(5B+K)가 된다.
1) 배율을 달리하며 예측하기
아래 그림을 보면 예측 특징 맵이 3개의 경계 박스로 구성된 것을 알 수 있다.
SSD의 앵커 개념과 비슷하게 YOLOv3에는 이미지 조각마다 세 가지 다른 배율로 탐지를 시도하는 9개의 앵커가 있다.
탐지층은 스트라이드가 각 32, 16, 8인 세 가지 특징 맵을 대상으로 탐지를 시도한다.
스트라이드가 클수록 비교적 큰 물체를 탐지하는 역할을 한다.
YOLOv3는 다운샘플링 방식을 통해 입력 이미지를 첫 번째 탐지층까지 전달한다.
첫 번째 탐지층은 32 스트라이드의 특징 맵을 사용하여 탐지를 시도하며, 각 층은 2배 크기로 업샘플링된다.
특징 맵 크기가 동일한 이전 층의 특징 맵과 연결하여 크기를 유지한다.
그 후 16 스트라이드의 특징 맵을 사용하여 탐지를 수행하고, 다시 업샘플링이 진행된다.
마지막으로 8 스트라이드의 특징 맵을 사용하여 세 번째 탐지가 수행된다.
2) YOLOv3가 출력하는 경계 박스
입력 이미지의 크기가 416x416일 때 ((52x52)+(26x26)+(13x13))x3 = 10,647개의 경계 박스를 예측 결과로 내놓는다.
경계 박스를 하나만 예측하기 위해 먼저 존재 호가신도가 미리 정한 임계값을 넘는지 기준으로 걸러낸다.
두 번째는 NMS를 사용해서 같은 물체를 가리키는 여러 개의 경개 박스를 제거한다.
7.4.2 YOLOv3 구조
YOLO는 사물 탐지와 클래스 분류를 모두 수행하는 단일 신경망이다.
신경망의 구조는 GoogLeNet(인셉션)의 특징 추출기 부분을 참고했다. 다만, 인셉션 모듈 대신 1x1 축소층과 3x3 합성곱층을 조합한 구조를 사용한다.
레드몬과 파라디는 해당 구조를 다크넷이라고 이름 붙였다.
YOLOv2에는 30층이나 되는 층 수 때문에 작은 물체를 탐지하기 어려웠다.
YOLOv3에는 잔차 블록, 스킵 연결, 업샘플링 등을 추가했다.
해당 신경망 구조는 이미지 데이터셋을 학습한 53층의 구조와 사물 탐지를 보조하는 53개의 층을 덧붙여 106층에 달하는 전결합 합성곱 구조다.
이 때문에 처리 속도는 오래 걸리지만, 정확도에서는 큰 폭의 상승을 보였다.
YOLOv3 전체 구조
YOLOv3의 전체 구조는 입력 이미지가 darknet-53 특징 추출기를 통해 다운샘플링되고, 다양한 배율의 탐지가 이루어짐을 알려준다.
79번 층까지의 다운샘플링 후 신경망이 분기해 첫 번째 탐지가 수행되는 82번 층까지 다운샘플링이 이어진다.
첫 번째 탐지는 13x13 격자를 사용하여 큰 물체를 탐지한다.
다른 쪽 분기는 79번 층의 특징 맵은 두 배로 업샘플링되어 26x26 격자로 분할된 이미지 조각을 형성한 후 61번 층의 특성맵과 연결된다.
이 시점에서 두 번째 탐지는 26x26 격자에서 중간 크기의 물체를 탐지한다.
마지막으로, 91번 층의 특징 맵은 몇 차례의 업샘플링 후 36번 층의 특징 맵을 깊이 방향으로 연접한다.
이후 106번 층에서 52x52 격자로 분할된 이미지를 대상으로 작은 크기의 물체를 탐지하는 세 번째 탐지가 수행된다.
7.5 프로젝트: 자율주행차를 위한 싱글샷 탐지기 학습하기
해당 프로젝트의 구현 코드는 피에를루이지 페라리가 그의 깃허브 저장소에 공개한 것이다.
https://github.com/pierluigiferrari/ssd_keras
이번 프로젝트에서는 피에를루이지 페라리가 공개한 구현 코드를 사용하여 SSD7이라는 소규모 SSD 신경망을 구현한다.
이 프로젝트의 목표는 상대적으로 빠른 학습이 가능한 간단한 신경망을 개인용 컴퓨터에서 구현하는 것이다.
프로젝트에서는 유다시티에서 제공하는 작은 데이터셋을 사용하며, 자동차, 트럭, 보행자, 자전거, 신호등 등 5가지 클래스의 레이블이 부여된 22,000여 장의 이미지로 구성된다.
데이터셋은 고정 크기인 480x300 픽셀의 이미지로 이루어져 있으며, 캘리포니아 마운틴 뷰에서 촬영된 실시간 차량 운행 이미지이다.
데이터셋은 크라우드 소싱을 통해 레이블링되었으며, 훈련 데이터, 검증 데이터, 테스트 데이터의 레이블이 포함된 CSV 파일로 제공된다.
레이블링 포맷은 직관적이고 이해하기 쉽다.
github 프로젝트를 참조하여 진행해보자.
'Study > Vision & Deep Learning' 카테고리의 다른 글
[VISION] 비전 시스템을 위한 딥러닝(9) - 프로젝트: GAN 모델 직접 구현해보기 (0) | 2023.05.31 |
---|---|
[VISION] 비전 시스템을 위한 딥러닝(8) - GAN, 생성적 적대 신경망 (0) | 2023.05.31 |
[VISION] 비전 시스템을 위한 딥러닝(6) - 전이학습 (0) | 2023.05.30 |
[VISION] 비전 시스템을 위한 딥러닝(4) - 프로젝트: 이미지 분류 정확도 개선하기 (0) | 2023.05.29 |
[VISION] 비전 시스템을 위한 딥러닝(3) - 딥러닝 프로젝트 시동걸기 (0) | 2023.05.29 |