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

이정호님의 프로필 이미지

작성한 질문수

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

yolov5(yolov8) val.py 결과 저장 질문

24.06.26 16:42 작성

·

313

0

안녕하세요. 강사님.

yolov5(yolov8) val.py 결과 저장 질문드립니다.

아래와 같이 val.py 를 수행한 결과를 엑셀에 저장하려면 어떻게 해야 하나요?

 

results = model.val()로 val을 수행하고,

print(results.class_result(class_index))로 클래스의 precision, recall, map50, map50-95값을 확인할 수 있었습니다.

하지만 Images, Instances 값은 어디서 가져와야 하는지를 모르겠습니다...

그리고, conf_matrix = results.confusion_matrix.matrix로 cm을 가져왔는데,

yolo val 에서 제공하는 box precision, box recall 값과
cm 을 통해 계산한 precision, recall 값에 차이가 있는데, 왜 그런지 모르겠습니다.

yolo 문서 상으로는 box precision, recall은 IoU 만 중요시하고, class의 정답 유무는 중요시하지 않다고 하는데,

보고서나 발표자료에는 yolo의 box precision, reall을 평가지표로 삼아야 하는지, 계산한 precision recall 값을 지표로 삼아야하는지 모르겠습니다.

답변 부탁드립니다.

 

감사합니다.

 

답변 2

0

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

2024. 06. 27. 12:05

안녕하십니까,

  1. 결과를 별도 엑셀 파일로 저장하는 기능은 없을 것입니다. copy & paste로 붙여 넣어서 하나씩 작업하시면 될 것 같습니다.

  1. 하지만 Images, Instances 값은 어디서 가져와야 하는지를 모르겠습니다...

=> images, instances는 전체 image의 건수, instances는 전체 이미지에서 해당 object의 건수를 의미합니다. 그러니까, LM 356 36 은 전체 image 356개 중에 LM Object는 36개만 있다는 의미입니다. 근데, 이걸 어디서 가져와야 한다는 의미를 제가 잘 이해하지 못했습니다.

  1. yolo val 에서 제공하는 box precision, box recall 값과
    cm 을 통해 계산한 precision, recall 값에 차이가 있는데, 왜 그런지 모르겠습니다.

     

     

    => 일반적으로 Object Detection의 성능은 mAP를 기반으로 합니다. box precision/recall도 mAP와 유사한데, 특정 IOU값에(아마도 0.75) 기반한 precision/recall 성능입니다. cm을 통해 계산한 precision, recall 은 오브젝트들의 예측 TN, TP, FP, FN 를 기반으로 계산한 수치로 예상됩니다.

 

  1. yolo 문서 상으로는 box precision, recall은 IoU 만 중요시하고, class의 정답 유무는 중요시하지 않다고 하는데,

     

    => Class 정답 유무도 중요합니다.

 

  1. 보고서나 발표자료에는 yolo의 box precision, reall을 평가지표로 삼아야 하는지, 계산한 precision recall 값을 지표로 삼아야하는지 모르겠습니다.

=> mAP를 주요 지표로 box precision, recall 을 보조 지표로 하면 좋을 것 같습니다.

 

감사합니다.

이정호님의 프로필 이미지
이정호
질문자

2024. 06. 27. 16:15

  1. 하지만 Images, Instances 값은 어디서 가져와야 하는지를 모르겠습니다...
    -> 클래스별 precision, recall, box map50, box map50-95 값은 results.box.p, results.box.r, results.ap50, results.ap 로 각 값을 불러올 수 있습니다. 그런데, Images, Instances 값은 results의 어느 메서드에서 불러올 수 있는지 알고싶습니다.

     

     

    4. ultralytics 깃허브에서 box precision, box recall, cm precision, cm recall에 대한 글을 찾았습니다.
    https://github.com/ultralytics/ultralytics/issues/5077

 

@cozeybozey Yes, that's correct! In object detection tasks, a true positive for bounding box precision is determined by the overlap of predicted bounding boxes with ground truth boxes, without taking into account the class of the object. Effectively, this means that a bounding box could be a true positive in terms of its geometric attributes even if the class prediction is incorrect.

However, from the perspective of confusion matrix precision, the correct class prediction is a vital part of being considered a true positive - a bounding box classified as a 'person' when the ground truth label is 'car' would be considered a false positive for the 'person' class and a false negative for the 'car' class, even if the geometric placement and size of the bounding box is perfect.

So, to summarize, box precision is about spatial accuracy of detected boxes, while confusion matrix precision is about label classification accuracy. The two metrics may sometimes seem at odds because they're evaluating different facets of the model's performance.

Hope this helps clarify everything!

 

@cozeybozey예, 맞습니다! 객체 감지 작업에서 경계 상자 정밀도에 대한 참양성은 객체의 클래스를 고려하지 않고 예측된 경계 상자와 Ground Truth 상자가 겹치는 방식으로 결정됩니다. 효과적으로 이는 클래스 예측이 올바르지 않더라도 경계 상자가 기하학적 속성 측면에서 참 긍정이 될 수 있음을 의미합니다.

그러나 혼동 행렬 정밀도의 관점에서 볼 때 올바른 클래스 예측은 참 긍정으로 간주되는 데 중요한 부분입니다. 기준 진실 레이블이 '자동차'일 때 경계 상자를 '사람'으로 분류하면 경계 상자의 기하학적 배치와 크기가 완벽하더라도 '사람' 클래스에 대해서는 거짓 긍정으로, '자동차' 클래스에 대해서는 거짓 부정으로 간주됩니다.

요약하자면, 상자 정밀도는 감지된 상자의 공간적 정확도에 관한 것이고, 혼동 행렬 정밀도는 레이블 분류 정확도에 관한 것입니다. 두 지표는 모델 성능의 다른 측면을 평가하기 때문에 때때로 상충되는 것처럼 보일 수 있습니다.

이것이 모든 것을 명확히 하는 데 도움이 되었으면 좋겠습니다!

이렇게 글이 남겨져 있어 말씀드렸습니다.

강사님의 말씀과 차이가 있어 혼란이 있습니다...
도와주세요ㅠ

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

2024. 06. 28. 10:15

음, images, instances 값을 메소드 레벨에서 어떻게 호출해야 하는지는 저도 잘 모르겠습니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 06. 26. 16:46

안녕하세요, 인프런 AI 인턴입니다.

이정호님의 질문을 정리하자면, YOLOv5(v8 포함 가능성)을 사용한 val.py 실행 결과의 데이터를 엑셀 파일로 저장하는 방법과, 검출 성능 지표인 Precision, Recall, mAP 값의 이해, 그리고 Confusion Matrix를 통한 계산과 YOLO에서 제공하는 성능 지표간의 차이에 대한 질문으로 보입니다.

유사한 문제에 대한 이전 질문과 그에 대한 답변이 있어 이를 소개해 드리겠습니다.

  1. val.py 결과 저장 및 평가 지표 이해: 이 링크에서는 YOLOv5의 val.py 사용 방법과 결과에 대한 처리 방법에 대해 설명하고 있지 않지만, 타 질문에서 나온 도구 사용 및 YOLO 모델의 평가 지표에 대한 이해를 돕는 답변을 확인할 수 있습니다. 특히 val.py 파일의 용도와 사용법에 대한 기초적인 정보를 제공하고 있습니다.

  2. YOLO 학습 결과 평가 방법: 이 링크에서는 YOLO 모델의 학습 결과와 관련하여 평가 지표 (mAP)에 대해 설명하며, 특히 이전 버전의 YOLO에서 나오는 학습 결과와 성능 평가 지표에 대한 이해를 도울 수 있습니다.

그러나, 질문에서 언급된 results = model.val()의 실행 결과를 직접 엑셀에 저장하는 구체적인 방법이나, YOLOv5의 정확한 평가 지표 사이의 차이에 대해서는 직접적인 해결 방안을 제시하는 내용이 없습니다. 또한 이미지 내 정보와 관련된 질문에 대해서는 직접적으로 해결할 수 있는 정보가 제공되어 있지 않습니다.

따라서, 이와 관련하여 YOLOv5의 공식 GitHub 문서나 사용 중인 코드의 라이브러리 문서에서 제공하는 API 문서를 참고하시면 도움이 될 것 같습니다. 추가로, 결과 데이터를 엑셀에 저장하는 것은 Python에서 제공하는 pandas 라이브러리를 활용할 수 있습니다. DataFrame 형태로 결과 데이터를 정리한 후 .to_excel() 함수를 통해 엑셀 파일로 저장할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.