작성
·
476
·
수정됨
0
안녕하세요.
이렇게 좋은 강의 들을 수 있는 기회 주셔서 감사드립니다.
강의를 들을때마다, 강의의 내용과 질에 감탄하고 있습니다.
강의를 듣다, 궁금한 점이 있어 질문드립니다.
섹션 4의 MMDetection의 이해와 Faset RCNN 적용 실습 01의
‘tiny kitti 데이터로 MMDetection Train 실습 - Train 실행 후 이미지 Inference’ 에서 궁금한 점이
있습니다.
저는 GPU를 가지고 있어 우분투 환경에서 아나콘다의 spyder를 에디터로 사용하고 있습니다.
첫번째 질문입니다.
mm_faster_rcnn_train_kitti.py 파일의 225라인
train_detector(model, datasets, cfg, distributed=False, validate=True) 에서 12epoch 동안 학습을 하고,
다음과 같이 00000068.jpeg 파일에 대해 추론을 했습니다.
--추론부분 시작-------------
img = cv2.imread('./kitti_tiny/training/image_2/000068.jpeg')
model.cfg = cfg
result = inference_detector(model, img)
show_result_pyplot(model, img, result)
--추론부분 종료-------------
그런데, 추론을 할때 여전히 pretrained model로서 faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth 을 이용하여 학습을 하는 것 같습니다.
(혹시 tiny kitti 데이터를 이용하여 학습한 결과의 파라미터가 faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth에도 적용되는지도 궁금합니다.
faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth의 속성을 찍어보면 최종 modified date는 2021년 11월 3일로 되어있어서 적용이 안되는것으로 추정됩니다.)
print(model.cfg)로 찍어보면 다음과 같이 되어 있습니다.
load_from = '../mmdetection/checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
제 소견에는 학습을 했으면
0000068.jpeg 파일에 대해 추론을 할때 사전학습을 통해 새롭게 만들어진 epoch_12.pth이나 latest.pth을 pretrained model로서 사용하는것이 어떤가 하는것입니다.
만약 그렇게 하자면, 다음과 같이 바꾸면 되는지도 궁금합니다.
---추론부분 수정 시작-------------------------------
img = cv2.imread('../kitti_tiny/training/image_2/777.jpeg')
cfg.load_from = './tutorial_exps/latest.pth' ; pretrained 모델 바꾸는 부분
model.cfg = cfg
result = inference_detector(model, img)
show_result_pyplot(model, img, result)
---추론부분 수정 종료----------------
두번째, 질문입니다.
위에서 추론을 할때 model.cfg=cfg를 하고
print(model.cfg)를 출력을 해보면,
다음과 같이 roi_head 부분에 train_cfg, test_cfg가 하나씩 생기고
바로 그 밑에 보면 train_cfg, test_cfg가 하나씩 더 있는데 내용이 pos_iou_thr, neg_iou_thr, pos_iou 등 설정값이 서로 다르게 되어 있습니다.
train_cfg, test_cfg가 서로 다르게 2개씩 설정되어 있다면 추론이나 학습이 어떤 cfg가 적용되는지 궁금합니다.
세번째, 질문입니다.
만약 resnet을 transfer learning이나 fine tuning을 하려면, /mmdetection/mmdet/models/backbones/resnet.py를 수정하면 되는지 문의드립니다.
강의를 듣다보니, 지식이 짧아 제대로 질문드렸는지 모르겠습니다.
강의를 이해하지 못해 드리는 우문이라면, 수강생의 열정으로 생각해주시고 너그러이 이해하여 주시기 바랍니다.
좋은 강의, 열강에 감사드리며 앞으로 이런 강의가 많이 만들어지기를 희망합니다.
감사합니다.
답변 1
0
안녕하십니까,
잘 듣고 계시다니 저도 기분이 좋군요 ^^
더불어 훌륭한 질문도 감사드립니다.
아래와 같이 학습이 완료된 model 객체에서 inference할 때
result = inference_detector(model, img)
model 변수는 학습이 완료된 모델의 객체 변수 입니다. 즉 model 변수는 메모리에 있는 모델을 access한 것입니다.
이미 학습이 된 메모리에 있는 model 객체는 checkpoint pretrained 모델을 더 이상 참조하지 않습니다.
그리고 메모리에 있는 model 객체를 사용하지 않고 epoch시마다 생성된 파일을 기반으로 모델을 로드하기를 원한다면 init_detector() 를 사용하시면 됩니다.
from mmdet.apis import init_detector, inference_detector
checkpoint_file='./tutorial_exps/latest.pth'
model = init_detector(cfg, checkpoint_file, device='cuda:0')
result = inference_detector(model, img)
학습 시에는 train_cfg를 사용합니다. 추론 시에는 test_cfg를 사용합니다.
backbone resnet은 이미 faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth에서 pretrained되었기 때문에 transfer learning이나 fine tuning을 하실 필요는 없을 것 같습니다. 혹 fine tuning을 적용하시려 해도 /mmdetection/mmdet/models/backbones/resnet.py를 수정하셔서 될 것 같지는 않습니다.
감사합니다.
첫번째 질문은 다음 강의를 듣다보니, 자세히 설명해주셨는데, 마음이 급해서 질문을 드렸습니다.
감사합니다.