• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

model.cfg = cfg

21.08.07 21:46 작성 조회수 426

0

안녕하세요. 

tiny kitti 데이터로 MMDetection Train 실습 - Train 실행 후 이미지 inferece 강의 마지막 부분에서 

model.cfg = cfg 부분의 코드가 이해가 되지 않아서 문의드립니다. 


먼저 inferece를 하기 전에 왜 model.cfg = cfg 라는 코드가 필요한지 이해가 되지 않습니다. ㅜㅜ 그런데 해당 작업을 하지 않으면 코드가 되지 않는 것을 보아서 왜 그런지 이해가 되지 않은 상태입니다 .... 애초에 model이라는 객체를 생성할 때 수정된 cfg에 대한 내용이 반영되는 것으로 이해를 하고 있어서요.... 

아니면 train_detector(model, datasets, cfg, distributed=False, validate=True)
코드 이후에 .. cfg에 대한 부분이 반영이 되고

해당 cfg를 반영하기 위해서
model.cfg = cfg로 작업을 하는지 궁금합니다.


두번째 질문입니다. 

model = build_detector(cfg.model, train_cfg=cfg.get('train_cfg'), test_cfg=cfg.get('test_cfg'))
model.CLASSES = datasets[0].CLASSES
model.cfg

해당 데이터셋을 모델에 넘겨줄 때, model이라는 객체를 생성하는데 왜 이 경우에는 model.cfg의 경우, 에러가 발생하는지 문의드립니다.

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

1. 학습 시에는 model 과 config가 별도로 구성되어 있어야 하지만 inference시에는 model 객체가 config를 가지고 있어야 하는 식으로 API가 구성이 된 것 같습니다. (음, 왜 이렇게 일관성없이 API를 설계했는지는 모르겠습니다.)

Config가 비단 model 뿐만 아니라 학습 Pipeline이라든가 다양한 요소를 가지기 때문에 model과 config가 별도로 되어 있고, 필요하면 model에서 config의 특정 요소를 가져가는 방식을 취하는 게 맞을것 같습니다.  

그래서 아래와 같이  train_detector(model, datasets, cfg, distributed=False, validate=True) 시 model객체에서 내부 변수로 cfg를 가져가지 않는 것으로 보입니다.

그리고 inference 시에는 inference_detector()에서 config입력이 없으므로 model 객체의 내부 변수로 config를 할당하는 방식을 취한 것으로 보입니다. 

model.cfg = cfg


result = inference_detector(model, img)
2. 첫번째 답변 드린것과 유사하게 build_detector()시  model 객체에서 내부 변수로 config를 가져가지 않아서 발생하는 오류로 보입니다. 
감사합니다.