작성
·
253
0
안녕하세요
keras yolov3 raccoon 학습 관련하여 지난번에 mAP 구하고 싶다고 문의 드렸을 때, github 알려주셔서 보고 있습니다.
추가 문의 사항 있습니다.
1) 일반적으로 학습할 때는, train set: test set 7:3 으로 나눠서 학습과 테스트를 하게 되는데, 이때 학습에 썼던 데이터를 테스트에서도 쓴다면 이미지를 외워버리는게 되어 오버피팅이 일어날 수도 있다고 알고 있습니다.
keras-yolov3 raccoon 을 할 때는, xml 200건을 csv 로 변환하여 9:1로 학습, 검증에 사용하는데, 코드상으로는, inference 할 때도 그 200장 동일한 이미지를 사용하고 있습니다. 여기서 학습에 사용되지 않은 이미지로 inference를 해야 하는게 아닌가 궁금합니다.
개인 보유 이미지에 적용하려다 보니 의문이 들었습니다. xml 파일이 있는 걸 학습에 써야하고, inference는 xml 파일이 없는 (학습에 사용하지 않은 ) 이미지를 써야 한다고 생각해서요.
2) mAP를 구할 때 ground-truth, detection result 파일이 필요한데요,
ground-truth 는 <class_name> <left> <top> <right> <bottom> 이 필요하고
detection-result는 <class_name> <confidence> <left> <top> <right> <bottom> 가 필요합니다.
여기서, ground-truth 는 학습에 쓸 xml 파일, detection-result 는 inference 에서 나오는 결과를 활용해야 할 거 같은데 요, 위 질문에 이어서 봤을 때, inference에 학습에 미사용된 이미지를 사용했을 경우에 mAP를 구하려면 precision, recall 개념을 보면, 왠지 정답지가 이미 있는 이미지 (그러니까 학습에 쓴 이미지)를 가지고 테스트에도 활용해야 잘 예측을 했는지 (정답을 정답으로 맞췄는지) 구할 수 있을거 같아서 입니다.
머신러닝 위주로 해 보다 보니 딥러닝 특히 object detection에 대해 이해가 잘 안되는 부분들이 있습니다.
답변 미리 감사 드립니다.
답변 3
0
https://github.com/Cartucho/mAP#create-the-ground-truth-files
을 이용하려고 하시는것 같군요.
detection result 파일은 ground-truth 파일 형식과 동일하게 적어주시면 될 것 같습니다만,
<class_name> <left> <top> <right> <bottom>
그런데 이러한 포맷으로 데이터를 만들려면 keras-yolo3 API 를 조금 수정해야 할 것 같습니다.
https://github.com/qqwweee/keras-yolo3/blob/master/yolo.py 에 보시면 detect_image(self, image) 가 반환하는 것이 class name, left, top, right bottom 을 이미지에 적용한 이미지를 반환합니다.
이걸 좀 수정해서 return image가 아닌, 좌표와 클래스값을 함께 담아서 return image, [좌표, 클래스값] 으로 반환하는 것으로 소스 코드를 수정해야 할 것 같습니다. 한번 시도해 보시고, 상황 update해주시면 좋을 것 같습니다.
0
답글 감사합니다.
제가 2) 질문 설명이 미흡했나 봅니다.
mAP를 구하려고 보니, ground_truth 파일, detection result 파일이 필요한데,
1번 답변처럼 학습과 테스트를 진행 후 ground-truth(학습할 때 만든 .csv 파일 변환하여 이용)까지는 준비 하였습니다.
그런데 detection result 파일을 어떤걸 써야 하는지 어려워서요.
우선,, 학습했던 이미지를 테스트 하여 나온 결과를 mAP 구하는 폴더에 넣어서 해 보겠습니다.
질문을 설명하기가 어렵네요..
0
안녕하십니까,
1. 네 맞습니다. 원래대로라면 evaluation 시 학습 데이터에 사용된 데이터는 사용되지 않아야 합니다. 이미지갯수가 많지 않아서 그렇게 한것이었습니다.
2. 두번째 질문은 잘 이해를 하지 못했습니다. "왠지 정답지가 이미 있는 이미지 (그러니까 학습에 쓴 이미지)를 가지고 테스트에도 활용해야 잘 예측을 했는지 (정답을 정답으로 맞췄는지) 구할 수 있을거 같아서 입니다. " 란 설명이 어떤 의미인지 잘 이해를 못했습니다. 좀 더 부연 설명해 주시면 감사하겠습니다.