해결된 질문
작성
·
357
0
안녕하세요! 질 좋은 강의에 감사인사드립니다.
1. 위 코드에서 model 과 training_model 의 차이점이 무엇인가요? 밑에서 create_callbacks 메소드에서는 model 객체를 사용하는 반면 라쿤 데이터셋으로 학습시키는 fit_generator 에서는 training_model 을 사용하는 것으로 보입니다. 두 객체의 차이점은 무엇인가요?
2. 또, prediction_model 은 변수명으로 추측해보기에 뭔가 Inference 용 모델일 것 같은데 강의에서 말씀해주셨다시피 Keras-RetinaNet은 Inference 용 모델로 convert 를 따로 해주어야 하잖아요? 그렇다면 저 prediction_model 객체가 사용되는 상황이나 목적이 따로 있을까요?
3. 위 evaluate 메소드에서 Inference 용으로 바꾼 raccoon_retina_model 객체가 들어가 있는데, 꼭 Inference 용으로 변환된 모델을 넣어야만 evaluate가 가능한가요? Inference 용으로 convert 하기 전의 h5 모델을 로드해서 evaluate 메소드에 넣어도 괜찮은가요?
답변 1
1
안녕하십니까,
1. fyzyr keras retinanet 소스를 보면 model과 training_model은 거의 동일합니다.
다만 training_model은 GPU가 여러개 있을 때도 멀티 GPU 학습을 가능하게 하는 모델입니다. GPU가 1개 이면 model과 training_model은 동일합니다.
아래 소스에서 109 ~ 116 라인을 보시면 됩니다.
https://github.com/fizyr/keras-retinanet/blob/master/keras_retinanet/bin/train.py
2. 일반적으로 Object Detection model은 학습 모델과 inference 모델이 조금 다를 수 있습니다. 거의 대부분의 layer에서 두개가 동일한데, 마지막 결과를 해석해 주는 부분이 inference model에 달려 있습니다.
object detection model은 classification model과 다르게 마지막 layer가 Dense가 아닌 Conv layer로 주로 되어 있습니다. 최종 학습 결과가 conv 결과로 되어 있는데, 이를 해석해서 원본 이미지의 scale에 맞춘Detection 좌표, class로 끄집어 내는 layer + NMS Filtering layer가 inference 모델에 갖추어져 있습니다.
어떤 패키지는 train과 inference 모델을 하나의 모델에서 구현합니다. 하지만 train시에는 마지막 inference layer는 학습을 시키지 않습니다.
fyzyr keras yolo 패키지는 train과 inference 모델을 각각 가져가는 방식을 취했습니다.
3. fyzyr keras yolo 패키지 특성상 evaluate()를 하려면 inference 모델이 있어야 합니다.
감사합니다.
빠른 답변 감사드립니다~!!