• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

Fast R-CNN 구현 질문

22.04.26 16:30 작성 조회수 154

0

Fast R-CNN 구현중에 가장 난감한 부분이 RoI pooling layer 였는데, 논문에서 보면 mini-batch를 이미지 2개에 roi box를 128개 사용한다고 써있더라구요. 그러면 학습할 때 입력 데이터로 이미지 2개 + roi box(region proposal된 roi)가 들어간다고 이해했습니다. 

그런데 여기서 이해가 안되는 점이 여러개가 있습니다 .

1. 이론상 fast rcnn은 입력 크기가 정해지지 않아도 되는데, tensorflow 에서 pre-trained vgg16 모델을 사용하려면 입력 크기가 224x224x3으로 고정되어 있어서 결국 mini-batch를 구성할 때 입력 사이즈를 모두 224x224x3으로 맞춰줘야 하는건가요? 

2. 이미지 + roi box가 입력으로 들어가면 multi input으로 인풋값을 동시에 두 가지를 분리해서 넣어줘야 하나요? 

3. 마지막에 box regressor와 classifier에서 box regressor는 x,y, w,h 좌표를 output으로 / classifier는 K(클래스 개수) + 1(배경) 총 K+1개 output이 도출되어야 하는데 입력 데이터 구성이 이미지 데이터 + roi box에 주어진 target 데이터는 ground truth box여서 mini-batch 구성할 때 Pascal IoU 기준에 따라 ground truth box와 이미지당 roi box 64개를 roi 비교하여 0.5이상인 경우는 1 0.2이상 0.5 미만을 0으로 구성한 후에 학습을 해야 하는건가요? 

여기서 예를 들어 클래스가 4개라고 가정했을 때 target 데이터는 [N, 64, 4] (N은 데이터 개수) 크기로 구성하는게 맞을까요? (64개는 roi 개수 4개는 클래스입니다) 

추가 설명 : [1, 64, 4]라고 했을 때 1개 이미지에 해당하는 64개 roi 각각 4개 클래스 중 overlap되는 roi가 0.5이상 되는 경우 1을 추가하고 클래스가 강아지, 고양이, 사람, 배경이라고 했을 때 강아지가 2마리 사람이 1명 이면 [2, 0, 1, 0] 이렇게 target 데이터가 구성되는게 맞나요..? ㅠㅠ 

4. Roi pooling layer에 들어가는 input값이, 14x14x256(input 크기가 224x224x3이라고 가정했을 때) feature map + roi 인걸로 이해 했는데, tensorflow 구현시 roi는 input으로 어떻게 넘겨 줘야 할지 모르겠습니다..ㅠㅠ 

5. Pre-trained model로 imagenet 데이터로 학습된 vgg16모델을 쓴다고 했을 때, 만약에 한식 이미지를 detection 해야 하는 문제가 있으면 fine tuning 한 후에 적용해야 정확도가 올라가겠죠? pre trained 된 이미지와 새로 detection할 이미지가 유사한지 유사하지 않은지는 추론해보고 결과가 좋지 못하면 fine tuning을 해야겠다 판단하는 건가요 아니면 사전에 학습된 이미지와 새로 학습하거나 추론할 이미지와 유사성을 분석 해보고 fine tuning을 하나요..? 당연히 추론해보고 결과가 좋지 못하면 할것 같지만, fine tuning을 해야 겠다 판단하는 기준이 혹시 따로 있을지 궁금합니다 

 

논문보고 이해가 안가는 부분은 블로그도 보고 이것 저것 참조하다 보니 엄청 헷갈리는 상태가 돼서 질문이 정갈하지 않는 점 양해부탁드립니다 ㅠㅠ 

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

 

0. Fast R-CNN 구현중에 가장 난감한 부분이 RoI pooling layer 였는데, 논문에서 보면 mini-batch를 이미지 2개에 roi box를 128개 사용한다고 써있더라구요. 그러면 학습할 때 입력 데이터로 이미지 2개 + roi box(region proposal된 roi)가 들어간다고 이해했습니다. 

=> batch 수행시 이미지 2개에 대해서 Selective search를 통해서 ROI에 해당하는 ROI Box를 128개를 batch로 loss 계산을 한다는 것입니다.  이미지 2개 + roi box 개념 보다는 이미지 2개에 있는 selective search box로 생각해 주시면 됩니다. 

1. 이론상 fast rcnn은 입력 크기가 정해지지 않아도 되는데, tensorflow 에서 pre-trained vgg16 모델을 사용하려면 입력 크기가 224x224x3으로 고정되어 있어서 결국 mini-batch를 구성할 때 입력 사이즈를 모두 224x224x3으로 맞춰줘야 하는건가요? 

=> fast rcnn은 이미지가 아니라 selective search에서 찾아낸 서로 다른 크기의 object들을 ROI Pooling으로 매핑하는 방식입니다. 이미지 크기는 동일하게 맞춰 주셔야 합니다. 

2. 이미지 + roi box가 입력으로 들어가면 multi input으로 인풋값을 동시에 두 가지를 분리해서 넣어줘야 하나요? 

=> 0번에서 말씀 드렸듯이 이미지에 있는 selectvie search에 해당하는 roi가 입력으로 들어갑니다. 

3, 4번은 제가 질문을 잘 이해하지 못했습니다. 0, 1, 2 답변 드린 내용을 참조하셔서 다시 한번 정리 부탁드립니다. 

5. Fine tuning의 특정한 기준은 없습니다. 일반적으로 Fine tuning을 하면 사알짝 성능이 좋아지는 경향은 없습니다만, 그렇게 크지는 않습니다. 

감사합니다.