에이블 스쿨 7주차(9. 18~ 9.22) - 4기 AI트랙
시각지능 딥러닝
지난주 목금에 이어서 진행된 시각지능 딥러닝 3-5일차 !!
다양한 실습을 했지만 무엇보다 마지막 날에 진행한 미니미니(강사님 왈)프로젝트가 시간 가는 줄 모를 정도로 흥미롭게 느껴졌다.
하지만 밤에 알바도 몇 번 가고.. 이것저것 하다 보니(핑계 맞다) 당일에 수업 마치고 복습을 제대로 못해서 내용 숙지가 좀 부족한 것 같아 강의를 다시 보며 학습하는 시간을 가졌다. 수업들을 때의 나는 3차 미프가 두렵지 않았나 보다 ヽ( ຶ▮ ຶ)ノ!!!
미니프로젝트 3차
더더더더 열심히 해야겠다고 생각을 하게 된 미프 3차다.. ^~^
안 그래도 복습을 제대로 못하고 시작했는데 이번 미프는 뭔가 예전 미프에 비해 가이드라인도 줄어들고 수업 때 배우지 않았던 라이브러리랑 함수도 알아서 사용해야 했다. 스스로 찾아보고 공부하며 더욱 발전(?)시키는 과정으로 개발자가 되기 위해서 필요한 역량이라고 생각했다. 하지만 역시 처음 접하는 것은 어렵다고 느껴질 뿐..
주제 : 저시력자를 위한 화폐 탐지
1일차 - 데이터 전처리
2일차 - 모델링
3일차 - 성능 평가
1일차
데이터는 이미지 파일과 json 파일로 구성되어 있었고 전처리를 하는 첫 번째 과정으로 Image 파일과 Label 폴더를 만들어 구분시키고 각각의 파일에서 training set과 validation set으로도 나누어 데이터를 저장해야 했다. 기존에 이용했던 train_test_split을 사용하였고 이 과정에서 shutil 모듈의 copy 함수도 사용해 보았다!!
다음 단계에서는 json 파일(Label 파일)에서 필요한 정보를 추출하여 yolo 모델 형식에 맞게 변경한 뒤 txt파일로 저장하는 것이다. 위치 정보를 축소하기 위해 나는 따로 함수로 만들어서 작성하였고 사용되는 이미지 원본에서 1/5로 줄였다.
x1, x2, y1, y2 값뿐만 아니라 이미지의 너비, 높이도 줄여 yolo label 형식에 맞게 반환하는 함수를 작성하였다. 반환하는 라벨은 화폐 클래스가 앞뒷면으로 구분되어 있는 것을 없애기 위해 json 파일에서 필요한 정보를 추출하여 바꿔주었다.
이후, 이렇게 변경된 값으로 txt 파일을 만들어 저장시키고 기존에 있던 json 파일을 삭제해 주었다.
이 과정을 진행하는데 생각보다 오랜 시간이 걸렸다. 하지만 이런 실습을 경험해 봄으로써 조금 더 성장할 수 있게 된 게 아닐까..? 라고 긍정적으로 생각해 보았다 ( ˙◞˙ )
2일차
모델링을 진행하기 위해 전에 전처리과정을 통해 만든 데이터 셋으로 yaml 파일을 생성하였다. 그리고 필요한 모델 라이브러리와 학습 가중치 파일 또한 설치하였다. UltraLytics YOLO v5을 사용하기 위해 데이터 셋 정보가 담긴 yaml 파일, 모델 구조에 대한 yaml 파일, 모델의 가중치 파일의 경로를 통해 train.py를 생성하여 학습을 진행하였다.
모델을 학습하는데 내 mAP는 계속 0.2-0.3 정도에 머물렀고 다른 분들 거는 0.9 이상이었다.
학습하는 과정을 보니 train 이미지와 validation 이미지가 전부 사용되지 않고 각각 806개의 이미지가 배경이미지로 인식된 상태로 진행되었다. 배경이미지에 관해 찾아보니 라벨링이 제대로 안되었을 때 배경이미지로 인식할 수 있다고 하여 전처리 과정도 다시 점검하며 계속 바꾸고 시도해 보았지만 주말 동안 진전이 없었다 ㅜㅜ 그래서 이 모델을 가지고 그냥 탐지까지 해야 하나..? 고민이 되었다.
3일차
모델 학습이 제대로 되지 않은 상태로 마지막날이 왔다.
But, 나에겐 든든한 팀원이 있었다..! 나와 같은 상황(mAP가 현저하게 낮았던 상황)이었던 한 팀원분이 주말에 열심히 모델링하시면서 해결하여 그 방법을 나에게 알려주었다 !!!!!!! 너무 멋있다...(˶˚ ᗨ ˚˶)
원인을 들어보니 이미지 파일과 json 파일을 분리했을 때 랜덤으로 각각 분리돼서 각각의 이미지 파일과 json 파일이 매핑이 되지 않아 대부분의 파일이 라벨링이 제대로 안된 것이었다. 그래서 이미지 파일과 json 파일을 분리하고 sorted()을 사용해서 정렬한 뒤 다시 train_test_split을 이용하여 train 셋과 test 셋으로 나누어 학습을 진행하니 0.95 이상의 mAP가 나올 수 있었다. 드디어 제대로 된 모델을 가지고 결과를 확인해 볼 수 있었다.
학습 결과 지폐나 동전을 제대로 학습한 것처럼 보였는데 데이터 셋이 거의 정면으로 찍힌 사진이었다. 그래서 여러 지폐가 겹쳐진 지폐나 동전을 넣고 결과를 확인하니 역시나 정확히 판단할 수는 없었다.
이를 해결하기 위해 image Augmentaion을 추가하였다. 나는 하이퍼파라미터 설정 파일을 지정하여 scratch-low.yaml 파일의 degree를 변경해 보았다!!
이후 IoU threshold와 confidence threshold을 조정해 가며 결과를 비교해 보았다.
▶ iou : 0.7, confidence : 0.2로 설정하여 탐지 결과
여러 개체를 탐지하지만 정확도가 좀 낮은 결과도 확인할 수 있다.
▶ iou : 0.5, confidence : 0.5로 설정하여 탐지 결과
탐지된 개체의 정확도는 대체로 높았으나 일부 개체는 미탐지된 상태이다.
➯ iou을 높게 설정했을 때 조금 더 세분화되어 탐지된 결과를 얻을 수 있었고 confidence을 높게 설정했을 때 탐지된 개체의 정확도가 높은 것을 확인할 수 있었다.
결론은...
모델링을 진행하고 탐지하는 과정에서 데이터셋 구성과 이 데이터를 전처리하는 과정이 굉장히 중요하다는 것을 느꼈다.
또한, iou와 confidence을 다양하게 바꾸어 보면서 어떻게 설정하였을 때 더 좋은 모델이라 할 수 있는지 고민이 되기도 하였다. 조금 더 다양한 사진이나 동영상으로 실험해보지 못해서 아쉬웠지만 시각지능 딥러닝 수업을 복습하면서 추가적으로 진행해 보아야겠다.
'교육 > KT 에이블스쿨' 카테고리의 다른 글
[KT AIVLE School(에이블스쿨)] - 9주차 후기(언어지능 딥러닝) (14) | 2023.10.08 |
---|---|
[KT AIVLE School(에이블스쿨)] - 8주차 후기(언어지능 딥러닝) (4) | 2023.09.30 |
[KT AIVLE School(에이블스쿨)] - 6주차 후기(미니 프로젝트 2차, 시각지능 딥러닝) (2) | 2023.09.19 |
[KT AIVLE School(에이블스쿨)] - 5주차 후기(딥러닝) (4) | 2023.09.09 |
[KT AIVLE School(에이블스쿨)] - 4주차 후기(머신러닝) (0) | 2023.09.03 |