2 Stage Detectors
1 Stage Detectors
conv layer를 거쳐 feature map을 추출하는 것은 2 stage와 동일하지만 이후 RPN을 통과하지 않고 바로 객체의 위치와 종류를 찾아내는 예측을 한다.
- Localization, Classification이 동시에 진행된다.
- 전체 이미지에 대해 특징 추출, 객체 검출이 이루어진다.
- 속도가 빠르다
- 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높다.
YOLO v1
YOLO는 별도의 Region Proposal 단계가 없고 전체 이지미에서 bounding box예측과 클래스를 예측하는 일을 동시에 진행한다. 이렇게 이미지, 물체를 전체적으로 관찰하여 추론함으로서 맥락적 이해가 높아진다.
위 그림에서 4행 3열의 grid cell은 왼쪽의 개를 예측하고 4행 4열의 grid cell은 오른쪽의 개를 예측하도록 할당되었다. 이때 나머지 grid cell은 객체를 예측하는데 참여할 수 없다는 것을 의미한다.
각각의 grid cell은 B개의 bounding box와 해당 bounding box에 객체가 포함되어있는지의 여부와 얼마나 정확하게 ground truth box를 예측하였는지를 반영하는 confidence score를 예측한다. 이때 confidence score는 $Pr(Object) * IoU(truthpred)$로 정의한다.
각각의 bounding box는 (center_x, center_y, w, h, confidence score)를 가지는데 x, y는 grid cell 내에 위치하기때문에 0~1사이의 값을 가지지만 객체의 크기가 grid cell의 크기보다 더 클 수 있기 때문에 다음과 같이 width, height 값은 1 이상의 값을 가질 수 있다.
grid cell별로 B개의 bounding box를 예측한다고 할 때 confidence score가 가장 높은 1개의 bounding box만 학습에 사용한다. 각 grid cell에는 C개의 conditional class probabillities $Pr(Calssi|Object)$를 예측한다.
예를 들어 이미지를 7x7 grid로 나누고 각 grid cell은 2개의 bounding box와 20개의 class probabillities(S=7, B=2, C=20(class의 개수))를 예측한다고하면 이미지별 예측값의 크기는 7x7x(2x5+20)이다. 이를 통해 bounding box의 위치와 크기, class에 대한 정보를 동시에 예측할 수 있는 것이다.
1. DarkNet
GoogLeNet을 변형하여 총 24개의 Convolutional Layer와 2개의 FC Layer를 가진다. 또한 Detection을 위한 학습 시에는 448x448 크기로 2배 정도 키워 사용한다고 한다.
2. Loss Function
YOLO v1에서는 Localization loss, Confidence loss, Classification loss의 summation을 하는 SSE(Sum of Squared Error)를 사용한다.
- Localization loss
$\lambda_{coord}$ : grid cell 대부분은 객체를 포함하지 않는 것들이 대부분이기 때문에 객체를 포함하는 cell에 가중치를 주기위한 파라미터이다.
$S^2$ : grid cell의 수
$B$ : grid cell별 bounding box의 수
$1_{ij}^{obj}$ : i번째 grid cell의 j번째 bounding box가 객체를 예측하도록 할당 받았을 때 1, 그렇지 않을 경우 0인 index 파라미터이다. 즉, confidence score가 가장 높은 1개의 bounding box만 학습하는데 사용한다.
$x_i, y_i, w_i, h_i$ : gt box의 x, y, width, height를 의미한다. 위에서 루트를 씌워준 이유는 크기가 큰 bounding box의 작은 오류가 크기가 작은 bounding box의 오류보다 덜 중요하다는 것을 반영하기 위함이다.
$\hat{x}_i$ , $\hat{y}_i$ , $\hat{w}_i$ , $\hat{h}_i$ :예측 bouding box의 x, y, width, height
- Confidence loss
$\lambda_{noobj}$ : 객체를 포함하지 않는 grid cell에 곱해주는 가중치 파라미터이다. 다시 말해 객체를 포함하지 않은 grid cell의 영향력을 줄인 것이다.
$1_{ij}^{noobj}$ : i번째의 grid cell의 j번째 bounding box가 객체를 예측하도록 할당 받지않을 때 1, 그렇지 않으면 0인 index 파라미터이다.
$C_i$ : 객체가 포함되어있을 경우 1, 그렇지 않으면 0
$\hat{C}_i$ : 예측한 bounding box의 confidence score
- Classification loss
$p_i(c)$ : 실제 class probabilities
$\hat{p}_i(c)$ : 예측한 class probabilities
SSD
- Extra Convolution Layer에 나온 feature map들에 모두 detection을 수행한다.
- 6개의 서로 다른 scale의 feature map을 예측에 사용한다.
- 큰 feature map에서는 작은 물체, 작은 feature map에서는 큰 물체를 탐지한다.
- 두 netword를 연결하는 과정에서 FC Layer를 Conv Layer로 대체하면서 detection 속도가 향상된다.
- feature map의 각 cell 마다 서로 다른 scale과 비율을 가진 bounding box(default box)를 사용한다.
1. Multiscale feature maps
backbone으로는 VGG16을 사용하였고 6개의 서로 다른 feature map을 얻기 위해 Extra Convolution Layer를 추가하였다. 입력 이미지 사이즈는 300x300으로 가정하겠다.
YOLO v1의 경우에는 단일 크기의 feature map을 사용하여 다양한 크기의 객체를 포착하는 것이 어려웠다. 이런 문제를 해결하기위해 SSD에서는 중간의 feature map을 추출하여 사용하는 방법을 제안하였다.
위 그림처럼 다양한 크기의 총 6개의 feature map(Multiscale feature maps)을 추출하여 다양한 크기의 객체를 탐지하는 것이 가능해진다.
2. Default boxes
다양한 크기의 객체를 탐지하기 위해 feature map의 각 cell에는 서로다른 scale과 ratio를 가진 Default box를 생성한다. Faster R-CNN의 anchor box와의 차이는 서로 다른 크기의 feature map에 적용한다는 점에 있다고 한다.
$s_k$ : scale
$s_{min}$ : 0.2
$s_{max}$ : 0.9
m : 예측에 사용할 feature map의 수
3. Predictions
최종 예측을 위해 서로 다른 scale의 feature map을 추출한 후 3x3 conv 연산을 적용한다. 이 때 default box의 수를 k, 예측하려는 class의 수를 c라고 할 때, 출력되는 featrue map의 channel 수는 k(4+c)가 되도록 설계한다. 즉, 각 feature map의 cell이 k개의 default box를 생성하고 각 box마다 4개의 offset과 class score를 예측한다는 것을 의미한다.
4. Matching strategy
default box와 gt box를 비교하여 IoU와 비슷한 jaccard overlap을 계산하여 0.5이상은 positive, 0.5 미만은 negative로 labeling한다. 이때 negative sample의 수가 훨씬 많기 때문에 Imbalance문제가 발생한다. 이를 해결하기 위해 높은 confidence loss를 가진 sample을 추가하는 hard negative mining을 수행한다.
5. Loss Function
confidence loss($L{conf}$)와 localization loss($L{loc}$)의 합으로 구성되어있다. $\alpha$는 두 loss 사이의 가중치를 조정하는 balancing parameter이다. N은 gt box와 매칭된 default box의 수이다.
- Localization lossdefault box의 중심 좌표와 너비, 높이를 사용하여 smooth L1 loss를 통해 구한다.
- $l$ : 예측한 box의 파라미터
- $g$ : gt box의 파라미터
- $x_{ij}^k$ : i번째 default box와 class가 k인 j번째 gt box와의 매칭 여부를 알려주는 indicator parameter로 매칭 될 경우 1, 아니면 0을 가진다.
- Confidence loss모든 class에 대한 loss를 softmax를 통해 계산한다.
YOLO v2
1. Concept
- 3가지 파트에서 model 향상
- Better : 정확도 향상
- Faster : 속도 향상
- Stronger : 더 많은 class 예측
2. Better
- Batch normalization
- High resolution classifier
- Convolution with anchor boxes
- FC layer 제거
- anchor box 도입
- 좌표 값 대신 offset 예측하는 문제가 단순하고 학습하기 쉬움
- Fine-grained features
- 크기가 작은 feature map은 low level 정보가 부족
- Early feature map은 작은 low level 정보 함축
- Early feature map을 late feature map에 합쳐주는 passthrough layer 도입
- Multi-scale training
- 다양한 입력 이미지 사용
3. Faster
- Backbone model
- Darknet-19
4. Stronger
- Classification 데이터셋(imagenet), detection 데이터셋(coco)을 함께 사용
- WordTree 구성 (계층적인 트리)
- imagenet : coco = 4 : 1
- detection 이미지 : classification loss는 특정범주에만 loss 계산
- classification 이미지 : classification loss만 역전파(IoU)
YOLO v3
1. Darknet-53
2. Multi-scale Feature maps
- 서로 다른 3개의 scale을 사용
- feature pyramid network 사용
RetinaNet
1. 1 Stage Detector Problem
- Class Imbalance
- negative smaple이 더 많이 나오는 문제
- Anchor box 대부분 Negative Samples
- 2 Stage detector의 경우 region proposal에서 background sample 제거
- hard negative mining을 사용하여 적절한 수를 유지
2. Concept
- 새로운 loss function인 focal loss를 제시
- 쉬운 예제에 작은 가중치, 어려운 예제에 큰 가중치
- 결과적으로 어려운 예제에 집중
'Boostcamp AI Tech' 카테고리의 다른 글
[Boostcamp 9주차] 피어세션과 학습 회고 (0) | 2021.10.02 |
---|---|
[Boostcamp Day-41] EfficientDet (0) | 2021.10.02 |
[Boostcamp Day-40] Neck (0) | 2021.10.01 |
[Boostcamp Day-39] Object Detection Library (0) | 2021.09.30 |
[Boostcamp Day-38] Faster R-CNN (4) | 2021.09.30 |