안드로이드 앱에 모델을 적용하였으나, output이 location, classes, scores, detections로 나오지 않고, 688,000 개의 raw data로 나왔습니다. 이에 이 데이터를 전처리해야 했습니다.
문제 해결 과정
1. 먼저 이 raw 데이터가 각각 어떤 것을 의미하는 지 확인하는 과정을 거쳤습니다. 이를 위해 공식 문서와 issue의 답변을 참고하였습니다.
raw data는 8,400개의 grid가 있고 각 grid 마다 class의 예측 confidence_rate를 나타낸 것이었습니다. 하지만 제가 카메라로 탐지한 마약의 개수는 많아야 10개였는데 어떻게 8,400개의 결과가 나타나는지 알 수 없었습니다.
이에 yolo8 관련 자료들을 찾아보고, detection model에 대한 정보를 찾아본 결과, raw data는 모든 grid에 대한 정보를 나타내는 것임을 이해했습니다. 또한 이 추가적인 검색을 통해 NMS 알고리즘을 적용해, 중복되는 grid를 없애야 한다는 것을 알게 되었습니다.
2. NMS 알고리즘 적용하기
NMS 알고리즘에 대한 개념을 어느정도 숙지한 이후, 메서드를 만들어 중복 grid를 삭제하였습니다. 아래는 제 깃허브 코드의 캡쳐 입니다.
이를 메서드 적용을 통해, 원하는 숫자의 grid만 추출해 낼 수 있었고 문제를 해결하였습니다.
'IT > 디버깅' 카테고리의 다른 글
한진정보통신 인턴 과제 - yolo8 모델을 android 모델로 변환 중 발생한 문제 - android 인식 안됨 (0) | 2024.06.05 |
---|---|
한진정보통신 인턴 과제 - 특정 라벨에 대한 yolo8 모델 정확도 문제 해결 과정 정리 (0) | 2024.06.04 |
spring security filter exception 처리 이슈 해결 (0) | 2024.02.15 |
oneToMany가 연속적일 때 failed to lazily initialize a collection of role 에러 해결 (0) | 2024.01.28 |
jwt 사용 시 remember me 적용 안되는 이슈 (0) | 2024.01.25 |