인프런 커뮤니티 질문&답변

딥러너님의 프로필 이미지
딥러너

작성한 질문수

YOLO 구현으로 배우는 딥러닝 논문 구현 with TensorFlow 2.0

loss function 관련 질문입니다

작성

·

168

0

bounding box 관련 loss(coord loss)에서 x, y 부분에 대해서 질문이 있습니다.

논문에 보면 아래와 같은 문장이 나오는데요

We parametrize the bounding box x and y coordinates to be offsets of a particular grid cell location so they are also bounded between 0 and 1.

x, y 값이 이미지 전체 width, height에 대한 비율로 0에서 1사이 값이 되는게 아니고 하나의 cell 안에서의 상대적인 위치로 normalize 하는거 같은데요, 현재 코드는 image 전체의 width, height 기준으로 되어 있는 것 같습니다.

이 부분을 맞게 이해한건지 질문드립니다.

답변 1

0

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요~. 반갑습니다.

현재 코드에서 coord_loss 적용시 cell size내에서 기준으로 normalize를 해주기위해서 cell_size를 반영해서 loss를 계산하고 있습니다. 아래 라인을 참조하세요~.

https://github.com/solaris33/YOLO-v1-tf2/blob/main/loss.py#L83

감사합니다~.

딥러너님의 프로필 이미지
딥러너
질문자

빠른 답변 감사드립니다.

추가질문이 있는데요,

편의를 위해서 input_width = 100으로 하고, 5x5로 gride cell을 나눈다고 가정해보겠습니다. 즉 cell_size = 5인 상황에서

pred_xcenter=70이었다고 하면,

tf.nn.l2_loss(object_exists_cell * best_box_mask * (pred_xcenter - xcenter) / (input_width / cell_size))

 이 식에서 l2_loss 안쪽에 있는 예측값인 pred_xcenter / (input_width / cell_size)를 계산하면

70 / (100/5) = 3.5 가 나오는데요 (object_exist_cell과 best_box_mask는 모두 0 또는 1의 값이므로 모두 1로 가정하였습니다)

0.5가 나와야 맞는거 아닌가요? [60,80)이 하나의 cell이므로 60 -> 0 이 되고 80 -> 1이 되게 normalize되어서 70은 0.5가 나와야 된다고 이해했는데요

3.5는 위의 논문에서 0에서 1사이값으로 parameterize 했다는 것에도 안맞는거 같아서 다시 질문드립니다.

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요~.
pred_xcenter를 단독으로 생각하시기보다는 정답인 xcenter와 같이 생각해보시면 좀더 직관적으로 이해가 되실 것 같습니다.
1. 위 말씀해주신 상황에서 pred_xcenter가 70인데 정답이 75였다면 5의 오차가 생기게됩니다.
2. 이때 그냥 input_width=100로 나눠서 loss를 반영해주면 5/100 = 0.05의 오차가 반영됩니다.
3. 하지만 이때 cell_size=5를 반영해서 적용해주게 되면 5/(100/5) = 0.25의 오차가 반영됩니다.
즉, 5라는 오차는 전체 이미지 기준으로는 0.05(5%)이지만, 하나의 cell_size 기준(=20)에서 5의 오차는 0.25(25%)의 오차이기 때문에 cell_size를 기준으로 오차가 loss로 적용되게 됩니다.

딥러너님의 프로필 이미지
딥러너

작성한 질문수

질문하기