강의

멘토링

커뮤니티

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

limtony1님의 프로필 이미지
limtony1

작성한 질문수

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

COCO 형태 BCCD 데이터 학습 - Dataset 변환, Config 설정, 학습 및 Inference 수행

mm_faster_rcnn_train_coco_bccd 실행 오류 질문드립니다.

작성

·

39

·

수정됨

0

안녕하세요 강사님, 좋은 강의 감사히 듣고 있습니다. 다름이 아니라, old colab에서 new kaggle로 수정 후 실습을 하는 과정에서 faster rcnn의 mm_faster_rcnn_train_coco_bccd 파일을 실행하고 있었습니다.

다음의 코드에서 동일한 에러가 발생합니다.
중간에 학습을 하는 코드
train_detector(model, datasets, cfg, distributed=False, validate=True)


테스트셋을 평가하는 코드
metric = dataset.evaluate(outputs, metric='bbox')

를 실행한 결과, 다음의 에러코드가 출력됩니다.

--> 314         res.dataset['info'] = copy.deepcopy(self.dataset['info'])
    315         res.dataset['images'] = [img for img in self.dataset['images']]
    316 

KeyError: 'info'

제가 열심히 검색하며 추가 조사를 해본 결과,

epoch를 기본으로 설정한 12회를 다 돌고 나서 bbox를 evaluate하는 과정에서 에러가 나는 것 같습니다.

annotation파일들인 train.json 파일과 test.json파일에 info의 키가 없어서 에러가 발생한 것 같다... 라는 결론에 이르렀는데 강사님께서 보시기에 무엇이 문제인지 궁금하여 질문드립니다.

궁극적으로 해결을... 어떻게 할지도 고민이 좀 많이 됩니다.


PS. 구글 서치와 챗지피티 프롬프트 질문 결과, 에러의 원인은 mmdetection >= 2.28.0 버전에서 pycocotools 2.0.x 이상을 사용할 때 이 오류가 보인다는 의견이 있었고
pycocotools는 내부적으로 딥카피(copy.deepcopy(self.dataset['info']))를 사용하기 때문에, 필드 누락이 바로 Error로 이어지지 않았나... 까지 찾았습니다.

답변 1

0

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

안녕하십니까,

강의를 잘 듣고 계시다니 저도 기분이 좋군요.

정확한 원인은 아닐 수도 있지만, mmdetection의 2.x 버전과 numpy 버전, coco 버전 등의 현재 호환 이슈등으로 train_detector(model, datasets, cfg, distributed=False, validate=True)호출 시 validate=True로 해서 validation data의 evaluate를 수행하면 오류가 발생합니다.

아쉽게도 현재는 train_detector(model, datasets, cfg, distributed=False, validate=False) 와 같이 validate=False로 해서 validation data의 evaluation을 skip 해줘야 합니다.

감사합니다.

limtony1님의 프로필 이미지
limtony1
질문자

감사합니다 강사님.
train 과정에서의 에러는 스킵으로 해결이 되었으나,

 

bbox evaluate을 하는 파일의 마지막 줄 코드
metric = dataset.evaluate(outputs, metric='bbox') 에서는 여전히 info를 못 찾겠다는 에러를 내고 있습니다.

좀 더 열심히 찾아보도록 하겠습니다. :)

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

dataset.evaluate() 수행하면 mmdetection 호환성 문제로 버전이 안맞아서 그러는것 같습니다. 아마 제가 내년 1월말쯤에는 mmdetection 신규 버전으로 실습 코드와 강의 영상을 변경을 완료할 예정입니다. 현재는 evaluate() 이슈가 있다 정도로 넘어가시면 어떨까 싶습니다.

limtony1님의 프로필 이미지
limtony1

작성한 질문수

질문하기