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

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

RPN Loss함수에서 t,t*값과 Alternating Training 질문입니다!

해결된 질문

작성

·

415

0

안녕하세요! 공부하다가 이해가 잘 안되는 부분이 있어서 질문 남깁니다!

1.RPN Loss함수에서 t, t*값에 대한 설명이 각각 Anchor Box에 대한 예측, 실제좌표라고 하셨습니다. 이 때 '실제좌표'라 함은 RPN 과정에서 새겨진 칸 당 9개의 Anchor Box들의 실제 좌표를 의미하는건가요? Ground Truth의 실제좌표는 아닌거죠? 그렇다고 하면 처음에 Anchor Box 9개를 각각 만들 때, 9개 박스에 대한 좌표값들은 얻지 못하기 때문에 위와 같이 t, t*값을 이용해서 Anchor Box 좌표값을 초기화(t값)시킨다음 처음에 만들었다고 한 9개의 Anchor Box 좌표의 실제값(t*값)에 근접하도록 학습시킨다는 말인가요? (결국, t와 t*에 대해 loss함수를 수행할 때 Ground Truth의 실제 좌표값은 관여하지 않게 되나요?)

2. Alternating Training에서 Fine Tuning이라는 것이 구체적으로 어떻게 동작하는 건가요? 예를 들면...현재 갖고 있는 모든 이미지 데이터셋으로 Feature Extractor가 먼저 RPN을 통해 파라미터가 학습되고 Fast RCNN을 학습시키면서 파라미터가 변경됩니다. 그 이후에 새로운 이미지가 들어와서 학습하게 되면 RPN에서는 1 by 1 컨볼루션 layer를, Fast RCNN에서는 FC layer를 Fine tuning한다는 의미로 이해를 했는데.. 구체적으로 어떻게 파라미터 값이 fine tuning되는건지 궁금합니다! 또 다른 역전파를 통해서 구현된다던지..?

답변 부탁드리겠습니다! 감사합니다!

답변 3

1

권 철민님의 프로필 이미지
권 철민
지식공유자

1. 그렇다면 t*는 Anchor Box에 대한 Ground Truth Bounding Box의 좌표값들이라는 것이죠!?

=> Anchor box는 기본적으로 좌표가 있습니다. 그리고 Ground Truth Bbox의 좌표값을 기반으로 근접한 또는 멀리 떨어진 anchor box인지를 판단해서 Positive or Negative anchor라고 label을 붙입니다. Ground truth bbox는 개별 anchor box의 positive/negative anchor를 찾는데 활용됩니다.

2. 네, 이건 구현 코드를 이해하면 더 쉽습니다.  pseudo code로 말씀드리면

rpn = rpn_network() # rpn network 모델 생성.

fast_rcnn = fast_rcnn_network() # fast rcnn 모델 생성.

for batch in batch_steps: # batch 건수만큼 학습 데이터 추출

   X_gt_bbox, x_gt_label = get_dataset_batch()# 배치건수 만큼 ground truth bbox와 label 추출

   rpn.train_on_batch(X_gt_bbox, x_gt_label) # 배치 만큼 학습

  predicted_obj = rpn.predict_on_batch() # rpn 배치에서 object여부와 object 좌표값 예측

  X_samples, x_labels = get_pos_neg_anchors(predicted_obj) # predicted_obj에서 positive, negative samples 추출하고 해당 클래스 label 할당.

  fast_rcnn.train_on_batch(X_samples, x_labels)

자세한 답변 너무 감사합니다! 수도 코드까지 제공해주시다니요! 수도 코드를 보니 1번에 대한 궁금증도 자동으로 해소가 되네요! 나중에 배운 내용 정리할 때 큰 도움이 될 것 같습니다 :)

0

답변 감사합니다! 답변을 읽고 제가 제대로 이해했는지 확인해보려 합니다! 확실히 이해를 하고 싶어서 계속 질문드리네요 ㅠㅠ

1. 그렇다면 t*는 Anchor Box에 대한 Ground Truth Bounding Box의 좌표값들이라는 것이죠!?

2. 예를 1가지만 들어보겠습니다. 첫 번째 batch로 32개의 이미지 데이터셋이 들어가고 선생님께서 말씀해주신 과정(RPN학습->오브젝트여부,좌표를 predict->Positive/Negative Anchor로 Faster-RCNN학습)을 한 번 수행한 다음, 두 번째 batch로 32개의 다른 이미지 데이터셋이 들어가게 되면 첫 번째 과정을 수행할 때랑 'RPN을 잠깐 학습'하는 동작을 동일하게 수행하나요? '잠깐 학습'이라는 것이 강의 속에서 언급해주셨던 RPN에서는 1 by 1 컨볼루션 layer, Faster RCNN에서는 FC layer에서만 이루어지는 학습을 의미하시는 건가요? '잠깐 학습' 한다는 의미가 새로운 batch 데이터셋이 들어갔을 때 어떤 과정으로 이루어진다는 건지..어떻게 새로운 데이터셋이 들어갔음에도 1 by 1 컨볼루션 layer의 파라미터만 변경이 되는건지... 감이 잘 안옵니다.. 흑흑..ㅜㅜ.. 이거는 구현 코드를 이해해야 할 문제일까요..

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

1.RPN Loss함수에서 t, t*값에 대한 설명이 각각 Anchor Box에 대한 예측, 실제좌표라고 하셨습니다. 이 때 '실제좌표'라 함은 RPN 과정에서 새겨진 칸 당 9개의 Anchor Box들의 실제 좌표를 의미하는건가요? Ground Truth의 실제좌표는 아닌거죠? 그렇다고 하면 처음에 Anchor Box 9개를 각각 만들 때, 9개 박스에 대한 좌표값들은 얻지 못하기 때문에 위와 같이 t, t*값을 이용해서 Anchor Box 좌표값을 초기화(t값)시킨다음 처음에 만들었다고 한 9개의 Anchor Box 좌표의 실제값(t*값)에 근접하도록 학습시킨다는 말인가요? (결국, t와 t*에 대해 loss함수를 수행할 때 Ground Truth의 실제 좌표값은 관여하지 않게 되나요?)

=> anchor box 9개는 다 좌표값을 가지고 있습니다. 학습 데이터가 들어올 때 이 anchor box는 Ground truth의 좌표와 비교해서 positive anchor box, negative anchor box를 결정하게 됩니다.  그런 다음에 학습 데이터를 기반으로 계속 anchor box를 예측을 합니다. 예측한 anchor box는 최대한 positive anchor box에 가깝게 예측이 되도록 loss함수가 설정이 되어 있습니다(거리가 멀어지면 loss가 커짐). 그런 방식으로 positive와 negative anchor box 모두를 학습을 시킵니다. Ground truth의 실제 좌표값은 positive anchor와 negative anchor를 결정할 때 사용됩니다.

2. Alternating Training에서 Fine Tuning이라는 것이 구체적으로 어떻게 동작하는 건가요? 예를 들면...현재 갖고 있는 모든 이미지 데이터셋으로 Feature Extractor가 먼저 RPN을 통해 파라미터가 학습되고 Fast RCNN을 학습시키면서 파라미터가 변경됩니다. 그 이후에 새로운 이미지가 들어와서 학습하게 되면 RPN에서는 1 by 1 컨볼루션 layer를, Fast RCNN에서는 FC layer를 Fine tuning한다는 의미로 이해를 했는데.. 구체적으로 어떻게 파라미터 값이 fine tuning되는건지 궁금합니다! 또 다른 역전파를 통해서 구현된다던지..?

=> 일단 RPN Network은 별도의 loss, 별도의 network으로 구성됩니다.  그리고 RPN Network이 하는 것은 object 여부와 해당 좌표를 Predict하는 것입니다. 

그래서 Faster R-CNN을 train 시킬 때는 먼저 batch 개수만큼 학습 데이터를 받아서  RPN 부터 학습 시킵니다. 그리고 Batch 건수 만큼 학습된 RPN Network에서 predict를 호출해서 Object 여부와 좌표값 데이터를 받습니다. 이들 중 Positive Anchor, Negative anchor에 해당하는 데이터를 이제 Faster R-CNN으로 입력해서 학습을 시킵니다. 즉 RPN을 잠깐 학습 시키고, 예측하고 RPN 결과를 받아서 Faster RCNN을 다시 학습 시키는 일련의 과정을 계속 되풀이 하면서 전체적으로 Faster RCNN을 학습 시키는 것입니다.

감사합니다.

=>

밑바닥개발자님의 프로필 이미지
밑바닥개발자

작성한 질문수

질문하기