YOLO (You Only Look Once)
R-CNN과 같은 Object dectection 방법은 이미지 안에서 obejct가 존재할만한 region을 추출해내는 과정(region proposal)을 수행한 후에, 추출된 region proposal에서 classification을 수행한다.
region proposal 과정을 수행한 뒤, classification을 수행하기 때문에 이런 방법들을 2 stage라고 부른다.
이런 2 stage방법은 구조가 복잡하여 느리고, 각 단계가 각각 학습되기 때문에 최적화가 어렵다는 단점이 있다.
YOLO는 2단계를 순차적으로 진행하던 2 stage방법을 1 stage로 바꾼다.
다시 말하면 YOLO는 region proposal을 수행한 뒤 classification을 진행하는 기존 2 stage 방법과는 달리, bounding box 좌표 추출과 classification 수행을 동시에 진행하게 된다.
아래 사진은 YOLO의 inference 과정을 아주 간략히 보여주는 그림이다.
convolution 과정을 몇번 거친 후 결과물로 바로 bounding box와 class 확률이 동시에 구해지게 된다.
Unified Detection
input 이미지는 S * S grid로 구분된다.
각 grid cell에서는 B개의 bounding box를 추측하게 되고, 각 bounding box 마다 실제로 물체가 있는지에 관한 confidence score을 연산하게 된다.
bounding box 위치 정보는 4가지 변수(x, y, w, h)로 표현된다.
x := bounding box의 중심 좌표(가로축)
y := bounding box의 중심 좌표(세로축)
w := bounding box의 width
h := bounding box의 height
bounding box의 confidence score은 아래와 같이 정의된다.
따라서 각 bounding box는 x, y, w, h, confidence score 총 다섯가지 정보를 가지게 된다.
그리고 이와 동시에 각 grid cell은 object에 대한 class 조건부 확률을 추측한다.
inference 과정에서는 각 박스에 대한 class-specific confidence를 아래와 같은 식으로 구한다.
위의 전체적인 과정을 그림으로 표현하면 아래와 같다.
Network Architecture
YOLO의 Network는 아래와 같다.
24개의 convolution layer를 통해 이미지의 feature를 추출해내는 작업을 거친 뒤, 2개의 fully connected layer를 통해 bounding box 좌표와 class 확률을 추측한다.
Training
먼저 처음 20개의 convolution layer만 따로 떼어 뒷단에 2개의 layer만 붙인 뒤 ImageNet 2012 데이터셋에 대한 classification 문제를 학습시킨다.
이 과정을 통해 이미지에 대한 general한 특징들을 학습할 수 있게 될 것이다.
그 후 앞서 학습시킨 20개의 convolution layer에다가 4개의 convolution layer와 2개의 fully connected layer를 붙여 object detection에 관한 task를 학습시킨다.
최종 layer의 output의 결과물은 bounding box 좌표와 각 class별 확률이다.
Activation function & Loss
activation function으로는 leaky relu를 사용했으며 loss는 sum-squared error을 사용했다.
(sum-squared error을 사용한 이유는 optimize를 하는 과정이 비교적 단순하기 때문이라고 소개하고 있음)
하지만 YOLO에서 단순히 sum-squared error을 사용했을 때에는 문제점이 생기게 된다.
문제점
- localization error(bounding box의 위치 정보에 대한 loss)와 classification error에 대한 weight를 동일하게 주는 것은 이상적이지 않다.
- 모든 grid cell에 물체가 포함된 것은 아니다.
이것은 종종 confidence score 계산에 부정적인 영향을 끼친다. - 큰 박스의 오차와 작은 박스의 오차의 weight를 동일하게 주는 것은 이상적이지 않다.
YOLO가 제시한 해결책은 아래와 같다.
해결책
- bounding box 위치 정보에 대한 loss에 대해 weight를 크게 준다.
- 물체가 포함되어 있지 않은 부분에 대한 confidence prediction에 대한 weight는 작게 준다.
- bounding box의 width와 height는 값을 그대로 쓰는 것이 아닌 square root(제곱근) 적용한 값으로 error을 처리한다.
아래는 완성된 loss 식이다.
한계
- 각 grid cell 마다 B개의 bounding box만 추측해내야 한다는 공간적 제약성은 가까이 붙어있는 물체를 판별해내는데에 부정적 영향을 끼친다.
(예를들면 꽃을 object dectection을 한다고 가정하면, 작은 꽃들이 밀집해있는 경우를 상상하면 됨) - data로 부터 bounding box를 훈련시키기 때문에, 학습데이터에는 없는 특이한 ratio의 bounding box가 test data로 주어진다면 이를 잘 검출해내지 못한다.
<요약>
YOLO는 구성이 간단하며 전체 이미지에서 직접 학습할 수 있다.
Classifier 기반 접근법과 달리 loss function을 통해 학습한다.
빠르고, 새로운 도메인으로 잘 일반화된다.
SSD (The Single Shot Detector)
R-CNN 계열 모델같은 2 stage detector의 정확도를 가지면서 1 stage detector(YOLO)의 속도를 가지는 모델이다.
Network Architecture
SSD 모델은 VGG16을 base network로 사용하고 보조 network(auxiliary network)를 추가한 구조를 가지고 있다.
두 network를 연결하는 과정에서 fc layer를 conv layer로 대체하면서 detection 속도가 향상된다.
SSD 모델은 Convolutional Network 중간의 conv layer에서 얻은 feature map을 포함시켜, 총 6개의 서로 다른 scale의 feature map을 예측에 사용한다. 또한 feature map의 각 cell마다 서로 다른 scale과 aspect ratio를 가진 bounding box인 default box를 사용하여 객체의 위치를 추정한다.
Auxiliary structure
Multi-scale feature maps for detection
YOLO 모델의 경우 7x7(x30) 크기의 feature map만을 사용했다. 하지만 이처럼 단일한 scale의 feature map을 사용할 경우, 다양한 크기의 객체를 포착하는 것이 어렵다는 단점이 있다.
이러한 문제를 해결하기 위해 논문의 저자는 SSD network 중간에 존재하는 conv layer의 feature map들을 추출하여 detection 시 사용하는 방법을 제안한다.
CNN과 pooling 적용 → 사이즈가 줄어든 feature map 획득 → 객체 예측 → 사이즈 줄어든 feature map → … (반복)
이 layer들은 점진적으로 size를 감소시키고, 여러 크기(scale)에 대한 detection 예측을 한다.
Convolutional predictors for detection
Predictor는 mxn with p channels의 feature layer(map)에 3x3xp kernel의 convolutional detector를 사용한다. 이는 category score와 defualt box 좌표들의 상대적인 offset을 출력한다.
cf) YOLO는 convolutional predictor가 아닌 fully connected layer를 사용한다.
Default boxes and aspect ratios
논문의 저자는 원본 이미지에서 보다 다양한 크기의 객체를 탐지하기 위해 feautre map의 각 cell마다 서로 다른 크기(scale)과 aspect ratio를 갖는 default box를 생성한다. SSD 모델은 38x38, 19x19, 10x10, 5x5, 3x3, 1x1 총 6개의 scale의 feature map의 각 cell마다 default box를 생성한다.
Default box의 scale = . 이는 원본 이미지에 대한 비율을 의미한다.
각 feature map별로 적용할 default box의 scale을 구하는 공식은 다음과 같습니다.
Predictor는 각 cell마다 (c+4)k개의 예측을 한다. 이때, c는 dataset의 class 수, k는 default box의 개수를 나타낸다.
즉 각 cell의 하나의 default box에서는 c개의 class score와 4개의 offset을 나타내고 defualt box마다 예측하므로 하나의 cell에서는 (c+4)k개의 예측을 한다.
이를 mxn feature map에 적용하면 (c+4)kmn개의 output을 출력한다.
Training
Matching
Feature Map의 Default Bounding Box를 Ground-truth Box에 매칭하고 아래 두가지 조건을 만족하는 default bounding box를 찾는다.
1. Ground-truth Box와 IoU를 비교하여 점수가 가장 높은 Default Bounding Box 찾기
2. Ground-truth Box와 IoU를 비교하여 점수가 0.5 보다 큰 Default Bounding Boxes 찾기
Loss
SSD 모델의 loss function은 confidence loss인 와 localization loss인 의 합으로 구성되어 있다. 는 두 loss 사이의 가중치를 조절하는 balancing parameter로 디폴트값으로 을 사용한다. N은 ground truth box와 매칭된 default box의 수이다. 만약 이라면 loss는 0이 된다.
localization loss는 Faster R-CNN 모델과 마찬가지로 default box의 중심 좌표 (cx, cy)와 너비와 높이 (w, h)를 사용하여 smooth L1 loss를 통해 구한다.
여기서 은 예측한 box의 파라미터(여기선 좌표), 는 ground truth box의 파라미터(여기선 좌표)를 의미한다. 는 번째 default box와 class가 인 j번째 ground truth box와의 매칭 여부를 알려주는 indicator parameter로, 매칭될 경우 1, 그렇지 않을 경우 0을 가진다.
confidence loss는 모든 class에 대한 loss를 softmax loss를 통해 계산한다.
<요약>
SSD 모델은 다양한 scale의 feature map에 다양한 scale과 aspect ratio를 가진 default box를 생성하여 다양한 크기를 가진 객체를 포착했습니다.
또한 전체 network가 분리되어 있지 않아 빠른 속도의 detection이 가능합니다.
PASCAL VOC 데이터셋으로 시험했을 때, Faster R-CNN 모델은 7FPS, mAP=73.2%, YOLO v1 모델은 45FPS, mAP=63.4%의 성능을 보인 반면 SSD 모델은 59FPS, mAP=74.3%라는 놀라운 속도와 detection 정확도를 보였습니다.