-
요근래 영상처리 모델링을 좀 진행했었다. 이를 조금 정리해보려한다.
모델은 다음 문제를 해결해야했다.
1.내가 작업해야할 모델링의 데이터들은 real-time detection 이 이루어져야했다.
2. Object의 이동속도가 상당히 빨랐기때문에 Detection Time 또한 최소화해야했다.
3. Object가 겹치는 경우가 상당히 많았다.
1. real-time detection
위 글을 참고했을 때, Object Detection에는 one-stage, two-stage가 존재했다.
Regional Proposal과 Classification이 한 번에 이루어지는가? 2번에 걸쳐 이루어지는가? 의 차이가 있었다.
one-stage는 정확도가 two-stage에 비해 낮으나 비교적 빨랐고, 다른 글들을 참고했을 때도 real time detection에는 one-stage가 더 적합하다는 생각이 들었다.
아래는 real-time object detection에 관한 논문들의 순위를 봤을 때도 one-stage인 yolo가 많이 사용된다는 것을 확인 할 수 있었다.
2. Detection Time
처음에는 이를 어떻게해야할지 몰랐다. 하다보니 모델 튜닝과 양질의 Bbox 라벨링이 곧 Detection time을 줄일 수 있는 key라는 것을 알게되었고 모델 튜닝을 통해 약 10배 이상의 detection time을 얻을 수 있었다.
1. YOLOv5에서 제공한 evolve 옵션을 통한 hyperparameter 튜닝
yolov5의 공식 repo 코드는 evolve 옵션을 제공한다. 이를 통해 hyperparameter 튜닝을 진행한 뒤 loss function value 를 봤을 때 아래와 같이 엄첨난 차이가 난다는 것을 확인할 수 있었다. 다만 recall이나 mAP는 크게 차이가 없었다.(조금 더 나아지긴했다.)
2. Bbox 라벨링 가이드를 통한 re-labeling
- 처음엔 온전한 한 개의 Object에 대해 Bbox를 쳐야한다고 생각했는데 겹쳐있는 Object에 대해서도 Bbox를 쳐야했다.(약 10프로 이상 정도 개체를 인식할 수 있는 모든 경우에 대해 라벨링을 진행했다)
- Detection rate가 3 배 이상 증가했었다.
3. Training Data Augmentation
- 혼자 진행하는 플젝이므로 Data 라벨링을 혼자 1,000 장 이렇게 할 수 없었고 그러고싶지도 않았다.
- 이제 Datat Augmentation이라는 데이터 증강기법이 존재한다는 것을 알았고, Object의 특성상 겹치고 뒤집히고 회전하는 경우가 많았기 때문에 flip, mosaic, roation, crop 등을 사용하여서 100장을 1000장으로 증가시켜 학습했다.
3. Object가 겹치는 경우가 상당히 많았다.
1. 위에 바로 언급했던 Bbox 라벨링을 통해Detection 시 겹치는 경우에 대해선 많이 해소가 되었다.
2. 겹쳤다가 다시 지나가는 경우 id 가 변경되는 문제가 생겼었다. 이를 해소하기 위해 DeepSort라는 알고리즘을 사용했다. 이외에도 ByteTrack, OC_SORT 라는 알고리즘도 존재하나 아직 사용하지 못했다. DeepSort만 봐도 Tracking이 잘되었다.
Sweep
위에 것들만 해도 상당한 양질의 Detection 및 Tracking 결과를 얻을 수 있었다. 추가로 현재는 Wandb에서 제공하는 Sweep을 이용해보고 있다. 아래처럼 그래프를 얻을 수있으며 자동으로 hyperparameter를 튜닝해주며 각 feature의 importance도 체크해주는게 엄첨나게 유용한 방법인 것 같다.
Wandb에서 바로 제공해주나 yolov5에 붙여서 사용하기 위해선 yolov5의 train 코드를 조금 수정해야했다.
1. wandb 내에서 create sweep을 누르고 sweep agent를 server에서 실행해주면 python train.py --파라미터1=값 --파라미터2=값 이렇게 실행이 된다.
2. yolov5의 main 함수에는 이 파라미터가 없기때문에 파라미터만 추가해주면 실행히 가능하고 아래처럼 결과를 얻을 수 있다.
성능 올리는 TIP
이외에도 공식 repo에서 제공하는 tip이 많다. background image 추가도 있었는데 나는 이건 별로 크게 효과가 없었다.
'2022년 > Developement' 카테고리의 다른 글
[ORACLE] GROUPING 함수에 관하여.. (0) 2022.07.26 오라클 계층형 쿼리 (0) 2022.07.11 docker elk 더 좋은 repo를 찾아내다! (0) 2022.04.15 yolov5 하이퍼파라미터 (3) 2022.04.12 소프트웨어 장인 (0) 2022.04.12