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

최준희님의 프로필 이미지
최준희

작성한 질문수

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

MMdetection Transfer learning에 관련하여.

작성

·

411

0

안녕하세요.

이번에 강의를 들으면서 Mask-RCNN 모델을 프로젝트에 적용해보려 준비중인 대학원생입니다.

MMdetection에서 제공하는 COCO dataset으로 12 epochs pretrained model을 불러와서 전이학습을 하여 ballon dataset을 이용해 학습하는 것으로 강의 내용을 이해했습니다.

이 과정에서 모델을 학습하는데 정확히 어떤 어떤 부분의 weight 들이 학습되는지 궁금합니다.

Transfer learning이라고 하면 보통 단순히 image classification model이라면 feature extraction 하는 부분은 그대로 학습에 반영하지 않고 FC layer의 output layer만 학습시킨다는 이야기도 보이는 것 같아서요. (예를들어 https://neptune.ai/blog/transfer-learning-guide-examples-for-images-and-text-in-keras 와 같은 정보를 참고했습니다.)

만약 MMdetection의 train_detector를사용하여 학습할 경우 어떤 부분의 weight들이 학습에 반영되고 어떤 부분이 고정된 상태로 학습이 진행되는지 궁금합니다.

감사합니다.

답변 1

0

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

안녕하십니까, 

모델을 학습하면 모델의 전체 layer에 있는 weight가 학습이 됩니다. 

coco로 pretrained 된 모델을 이용하여 자신만의 모델을 학습 시킬때는 weight 초기화를 pretrained 모델의 weight를 활용합니다. 학습은 이 weight초기화 부터 시작하면서 weight를 update합니다. 그러니까 pretrained 모델을 이용한다는 것은 weight학습의 출발점이 다르다는 것입니다(즉 금수저로 출발합니다 ^^). pretrained 모델을 이용한다고 특정 layer의 weight를 학습을 하지 않는건 아닙니다. 

pretrained 모델을 적용하면 어떤 layer까지 weight를 초기화하는 지는 구현 모델마다 다릅니다. 물론 image classification 같은 경우는 마지막, 또는 CNN 이후 연결하는 Dense layer 계층을 제외하고 전 CNN영역을 Weight 초기화 합니다. 

Object Detection이나 Segmentation은 조금 다를 수 있는데,  주로 anchor 쪽에 class의 갯수에 따른 CNN이 되어 있는 부분을 제외하고 초기화 합니다. 그러니까 이들 모델은 강의에서 body-> neck -> head 형태로 구분하면 주로 head를 제외하고 body, neck 부분을 pretrained 영역에서 초기화 합니다.  구현에 따라서는 head의 일부분도 pretrained 영역에서 초기화 할수도 있습니다. 

감사합니다. 

최준희님의 프로필 이미지
최준희
질문자

답변 감사드립니다!

조금 추가적으로 궁금한 부분이 있어 댓글로 남깁니다.

혹시, Pretrained weight로 말씀주신 영역들을 초기화한 이후에 학습하는 과정에선 weight 값들이 고정되어 학습되는 경우 없이 body, neck, head 영역에서 모든 weight 값들이 학습되는 것이 맞을까요?

좋은 강의 만들어주셔서 감사합니다!

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

네, 맞습니다. 

최준희님의 프로필 이미지
최준희

작성한 질문수

질문하기