해결된 질문
작성
·
71
0
제가 이해한 바로는
원본 이미지(ex. pascalVoc)와 Annotation 파일을 이용해 selective search를 진행해 후보 바운딩 박스 2000개 추출. 이때 G.T는 Annotation 파일에 담겨있던 정답 바운딩 박스 정보로, 바운딩 박스 좌표와 정답 object label이 담겨있고, SS predicted는 selective search로 뽑은 후보 바운딩 박스로, 바운딩 박스 좌표만 존재.
이렇게 얻은 2000개의 후보 바운딩 박스를 딥러닝 네트워크에 주입하기전, ImageNet 데이터로 Feature Extractor Pre-train.
질문1) 이 Pre-train의 목적이 무엇인가요? AlexNet이 입력으로 이미지를 받으면 출력으로 그 이미지의 클래스를 예측하도록 훈련하는 것인가요?
G.T와 SS 영역 IOU가 0.5 이상인 경우만 해당 클래스로, 나머지는 Background로 fine-tuning
질문2) 이때 fine-tuning이라는 것은 iou 점수에 따라 SS 즉, 후보 바운딩 박스에 이 바운딩 박스와 IOU가 높은 G.T에 담긴 label을 부여하는 작업. 즉, 데이터 전처리 같은 작업인 것인가요?
아니면 pre-train 된 AlexNet에 2000개의 후보 바운딩 박스와 G.T를 입력해 어떠한 학습이 진행되는 것인가요.
위의 과정으로 얻은 Feature Map을 1차원으로 만들고, 그 값을 SVM에 넣어 예측값을 만드는데, 그 전에 SVM을 G.T로만 학습한다.
질문3) 여기서 G.T로만 학습한되 0.3 IOU 이하인 SS는 background로 설정, 0.3 이상이지만 G.T와 label이 다른 SS는 무시하고 학습한다는데, 저는 이 말이 SS 중에서 IOU 점수와 label에 따라 background와 무시할 것을 정하고 그 이외에 것으로 SVM을 학습한다고 이해되는데, 이 말이 첫번째 줄의 G.T로만 학습한다는 말과 맞지 않은것 같아 이해가 힘듭니다.
답변 2
0
안녕하십니까,
질문1) 이 Pre-train의 목적이 무엇인가요? AlexNet이 입력으로 이미지를 받으면 출력으로 그 이미지의 클래스를 예측하도록 훈련하는 것인가요?
=> pre-train은 object detection 모델을 학습하기 전에 미리 weight를 imagenet 데이터 세트로 학습을 시키는 것입니다. 일반적으로 pytorch의 torchvision이나 tensorflow에는 imagenet 데이터 세트르로 weight값을 미리 학습한 모델들을 제공합니다.
그와 동일하게 당시에 RNN은 AlexNet을 기반으로 imagenet 데이터를 image classification 용도로 미리 학습을 시킨 것이 pre-trained 모델입니다. 이렇게 미리 학습된 모델을 처음부터 이미지를 학습하는 것보다 더 높은 image classification 성능을 나타낼 수 있습니다. RCNN 논문이 나온 시점이 2013년이라 당시만 해도 torchvision이나 tensorflow에서 imagenet 데이터 세트로 weight값을 미리 학습한 모델을 제공하지 않았을 가능성이 높아서 논문에서는 pretrained 를 미리 시킨 다음에 이 모델을 학습에 사용하였다고 기술되어 있습니다. 지금 기준으로는 따로 pretrained 할 필요 없이 이미 pretrained 된 모델을 그냥 가져다 쓰면 됩니다.
질문2) 이때 fine-tuning이라는 것은 iou 점수에 따라 SS 즉, 후보 바운딩 박스에 이 바운딩 박스와 IOU가 높은 G.T에 담긴 label을 부여하는 작업. 즉, 데이터 전처리 같은 작업인 것인가요?
아니면 pre-train 된 AlexNet에 2000개의 후보 바운딩 박스와 G.T를 입력해 어떠한 학습이 진행되는 것인가요.
=> 두번째 입니다. fine-tuning이라고 논문에 되어 있는데, 일반적인 fine-tuning과는 좀 거리가 있고, 다만 학습률을 낮춰서 학습을 시켰기 때문에 fine-tuning이라고 설명되어 있지만, SS로 생성된 후보 바운딩 박스와 GT를 입력해서 학습을 수행하는 단계입니다. SS의 경우 iou가 0.5 이상인 경우만 학습을 object class로, 나머지는 background(배경)으로 지정하여 학습합니다.
질문3) 여기서 G.T로만 학습한되 0.3 IOU 이하인 SS는 background로 설정, 0.3 이상이지만 G.T와 label이 다른 SS는 무시하고 학습한다는데, 저는 이 말이 SS 중에서 IOU 점수와 label에 따라 background와 무시할 것을 정하고 그 이외에 것으로 SVM을 학습한다고 이해되는데, 이 말이 첫번째 줄의 G.T로만 학습한다는 말과 맞지 않은것 같아 이해가 힘듭니다.
=> 질문을 정확하게 이해하지 못했습니다만,
SVM은 Deep Learning Object Detection과 별도로 또 모델을 만듭니다. 다만 사용되는 데이터가 RCNN의 Classification의 출력값을 기반으로 하는데, 출력값을 생성할 때 GT와 SS가 IOU 0.3 이하인 것들은 Background로, 0.3보다는 크지만 GT가 아닌 경우는 아예 학습 대상에서 제거하는 방식으로 별도로 SVM을 학습해서 모델로 만든 것입니다.
RCNN은 당시 기술에서는 최선을 다한 것이지만, 현재 기준으로 보면 매우 복잡한 방식으로 학습이 되어 있습니다. 어떠한 방식이 사용되었는지, 그리고 이 방식이 후에 어떻게 개선되었는지 개괄적으로만 이해하셔도 충분하지 않을까 싶습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 배진영님.
질문하신 RCNN 학습 과정에 대해 하나씩 풀어 설명드리겠습니다.
Pre-trained Feature Extractor의 목적:
IoU를 활용한 후보 바운딩 박스 처리:
SVM을 활용한 최종 분류:
아래의 링크를 참고하시면 질문과 관련된 더 많은 정보를 얻을 수 있습니다:
- RCNN Training에 대한 이해
이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
그렇다면 학습 과정을
1. 원본 이미지+annotation 파일을 selective search해 2000개의 후보 바운딩 박스를 얻는다.
2. feature extrator(AlexNet)을 imagenet으로 pre-train 시키는데 이것의 목적은 모델이 이미지를 받았을 때 그 이미지의 특징맵을 잘 포착하고 추출하도록 학습시키는 것이다.
annotation 파일에 담긴 g.t 정보와 ss predicted 박스를 사용해 iou 점수에 따라 ss에 label을 부여하는 전처리 과정을 거친다.
질문1) 이때 이 전처리 과정이 전처리를 위한 코드로 진행되는지 아니면 AlexNet에 데이터를 넣어서 진행이 되는 것인지 궁금합니다.
3)에서 단순 전처리 과정이라면 전처리가 끝나고 전처리된 데이터를 AlexNet에 넣어서 특징맵 추출.
단순 전처리 과정이 아닌 학습 과정이라면 AlexNet에서 학습 과정에서 label 부여와 특징맵 추출.
그 후, 특징맵을 1차원으로 펼친 후 svm에 넣어서 예측을 만들 준비.
svm에 데이터를 넣기 전 svm에 g.t와 g.t에 버금가는 정확한 데이터를 ss에서 iou를 기준으로 추출한 것, 이 두가지를 입력해 학습시킨다.
질문2) 이때 ss에서 데이터를 추출하는 전처리 과정은 전처리 코드를 따로 작성해 진행되는지, 아니면 svm에서 진행되는것인지 궁금하고, 그렇게 데이터를 넣어 svm을 학습시키는 것은 특징맵에서 받은 해당 특징과 예측 클래스를 매칭하는 결과를 얻기 위한 것인지 궁금합니다.
감사합니다!