2023.12.29 방학 TIL
어제에 이어 YOLO v3 구현을 하였다. feature mapd의 shape이 어떤 의미를 담고 있는지를 계속 확인하는 것이 시간이 많이 걸렸다. 코드가 길어짐에 따라 feature map의 shape이 변하고, 담고있는 정보들이 달라지는데 이를 놓치면 다시 뒤로 돌아가서 확인하는 것을 반복하였다ㅠㅠ 그 뒤로는 그때마다 shape을 확인해서 주석으로 달아놓았다...ㅎㅎ 그리고! 드디어 kitty dataset을 다운받았다!! 용량이 커서 그랬는지 오래걸렸다...ㅎㅎ
코드를 구현하면서 느낀 점인데 python 문법도 부족하다고 느꼈다... 이제 코딩테스트도 준비하면서 python 문법도 확실히 확인해야될 것 같다.
📝 배운 내용
Data loader
- data의 정보를 읽어온다
- 이미지 파일을 array로 읽어온다
- annotation에 있는 class 정보와 bounding box의 정보를 읽어온다
- bbox 정보 : center_x, center_y, width, height
- return : img, target, anno
- img shape : [batch, channel, height, width]
- target shape : [batch, object, 6(batch_idx, class, box coordinate 4)]
- data를 model에 맞게 변환하고 추가로 원한다면 data의 수를 늘리는 방법
- 현재 bbox의 좌표는 normalize 되어 있다. 이를 절대좌표로 변환하여 augmentation을 수행하고 다시 normalize한다
- augmentaion은
imgaug
라이브러리를 사용한다
- augmentaion 순서
- xywh 형식의 bbox을 xyxy 형식으로 변환
- bbox를 augmentaion 형식으로 변환
- augmentation 수행 -> img와 bbox 모두 변환
- 다시 xywh 형식의 bbox로 변환
- 모델의 input size에 맞게 이미지 resize
- array인 img를 tensor로 변환