작성
·
266
·
수정됨
0
안녕하세요 선생님!
선생님 강의해주신 내용 바탕으로 개인 프로젝트를 진행하는 와중에 10일동안 구글링을 통해서도 해결을 못한 문제가 있어 여쭤봅니다..!
AI허브(https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100)에서 받은 컨테이너고유번호(BIC)를 FasterRCNN으로 detect하는 코드를 작성중인데, 6천개로 학습시키고 학습시켰던 데이터 일부로 evaluation을 하면 검출을 잘 하는데, 새로운 데이터(학습데이터와 유사한 이미지)로 evaluation을 하면 아무것도 검출을 못하는(빈 텐서만 출력) 현상이 일어납니다. 에폭을 1부터 10까지 해보고 loss가 0.01까지 줄어들며 수렴하는것을 확인했는데도 아무것도 검출을 못하네요.
ㅇ모델 : pytorch fasterrcnn_resnet50_fpn(pretrained=True)
ㅇ학습과정 * 구글코랩 활용
1. AI 허브 json파일을 coco 형식으로 변경(시각화를 통해 정상변경 확인)
2. customdataset 정의
3. 학습환경 설정 및 학습
4. 가중치 저장
5. evaluation 환경 설정(pretrained=False) 및 evaluation(가중치 로드)
6. pycocotools로 평가지표 출력
구글코랩에서 작성한 코드는 링크로 첨부했습니다.
https://colab.research.google.com/drive/1dq4wx7M5GFwLSrz8lcCLIL431Othr94O
train 모드 모델정의하고, eval모드 모델 정의하는 부분에 뭔가 오류가 있는것 같은데 못 찾겠습니다...ㅜㅜ
답변 1
0
안녕하십니까,
음, 코드 오류만 봐서는 정확한 원인을 찾기 어렵지만,
argmax(scores)에서 오류가 나는 걸로 봐서는 scores 결과가 안나오는 걸로 보입니다.
이게 원래 scores에서 결과가 안나오는지, 아님 np.where로 score_threshold로 filtering된 scores가 결과가 안나오는지는 모르겠습니다.
scores = output['scores'].cpu().numpy()
에서 print(scores)를 해보시고,
keep = np.where(scores > score_threshold)[0] 다음에
scores = scores[keep] 한 뒤 print(scores)를 해보십시요.
만약 scores = output['scores'].cpu().numpy() 에서 결과가 안나오면 detect api를 뭔가 잘못 사용하지 않았나 싶고, scores = scores[keep] 에서 결과가 안나오면 score_threshold 값을 낮춰서 다시 한번 적용해 보십시요.
감사합니다.