사진에서 물체의 위치를 추정하는 것은 회귀 작업으로 나타낼 수 있다. 물체 주위의 바운딩 박스(bounding box)를 예측하는 일반적인 방법은 물체 중심의 수평, 수직 좌표와 높이, 너비를 예측하는 것이다. 즉 네 개의 숫자를 예측해야 한다. 이 때문에 모델을 크게 바꿀 필요는 없다. (일반적으로 전역 평균 풀링 층 위에) 네 개의 유닛을 가진 두 번째 밀집 출력 층을 추가하고 MSE 손실을 사용해 훈련한다.
base_model=keras.applications.xception.Xception(weights='imagenet',include_top=False)
avg=keras.layers.GlobalAveragePooling2D()(base_model.output)
class_output=keras.layers.Dense(n_classes,activation='softmax')(avg)
loc_output=keras.layers.Dense(4))(avg)
model=keras.Model(inputs=base_model.input,
outputs=[class_output,loc_output])
model.compile(loss=['sparse_categorical_crossentropy','mse'],
loss_weights=[0.0,0.2],
optimizer=optimizer,metrics=['accuracy'])
꽃 데이터셋의 모든 이미지에 대해 바운딩 박스가 준비되어있다고 가정해보자(여기서는 이미지마다 하나의 바운딩 박스가 있다고 생각한다). 클래스 레이블, 바운딩 박스와 함께 전처리된 이미지의 배치가 하나의 원소인 데이터셋을 만들어야 한다. 각 원소는(images,(class_labels,bounding_boxes)) 형태의 튜플이 된다.
MSE는 모델을 훈련하기 위한 손실 함수로 사용할 수 있다. 하지만 모델이 바운딩 박스를 얼마나 잘 예측하는지 평가하는 데 아주 좋은 지표는 아니다. 바운딩 박스에 널리 사용되는 지표는 IoU(Intersection over union)이다. 이 값은 예측한 바운딩 박스와 타깃 바운딩 박스 사이에 중첩되는 영역을 전체 영역으로 나눈 것이다. tf.keras에서는 tf.keras.metrics.MeanIoU에 구현되어 있다.
'Computer Vision > Deep learning' 카테고리의 다른 글
26. 객체 탐지 (0) | 2021.06.15 |
---|---|
24. 사전훈련된 모델을 사용한 전이 학습 (0) | 2021.06.13 |
23. 케라스를 사용해 ResNet-34 CNN 구현 (0) | 2021.06.13 |
22. ResNet, Xception (0) | 2021.06.12 |
21. LeNet-5, AlexNet, GoogleNet (0) | 2021.06.12 |