import tensorflow as tf
from tensorflow import keras
output_num = 1+4+3 # object_prob 1, bbox coord 4, class_prob 3
input_tensor = keras.layers.Input( shape=(224, 224, 3), name='image' )
base_model = keras.applications.resnet.ResNet50(
input_tensor = input_tensor,
include_top = False,
weights = 'imagenet',
pooling = None,
)
x = base_model.output
preds = keras.layers.Conv2D( output_num, 1, 1 )(x)
localize_model = keras.Model( inputs=base_model.input, outputs=preds )
localize_model.summary()
Sliding Window
- 큰 이미지에서 여러 물체를 한꺼번에 찾아내기 위해 수행함.
- 전체 이미지를 적당한 크기의 영역인 window로 나눈 후에, 각각의 window에 대해 이전 스텝에서 만든Localization network를 이동시키면서(sliding) 반복 적용해 보는 방식
Convolution
- Sliding window의 단점인 연산량과 속도를 개선하기 위한 방법 중 하나
- 연산이 병렬적으로 동시에 진행되므로 훨씬 효율적임.
- convolution의 결과로 얻어지는 1x1 형태의 output도 동일하게 localization 결과로 대체될 수 있음.
Anchor box
- 모델이 추론해야 할 위치의 후보들
- 서로 다른 형태의 물체와 겹친 경우에 대응가능함.
- 인식 범위 내에 물체가 있고 2개의 앵커 박스가 있는 경우, IoU가 더 높은 앵커 박스에 물체를 할당하게 됨.
- 이미지의 모든 영역을 뒤덮을만큼 다양한 앵커 박스를 만들어서 그 중에 물체가 있을 확률이 가장 높은 앵커 박스를 물체의 바운딩 박스라고 예측하게 됨.