2023.12.30 ~ 2024.01.01 주말 TIL
이제 2024년이 되었다!! 시간이 진짜 빠르다... 연말이고 새해여서 공부를 많이 하지는 못했지만 그래도 YOLO v3 구현을 많이 해서 TIL을 합쳐서 작성해본다!
data loader를 구현했으니 이제 모델과 loss를 계산하는 부분을 구현하였다. model 자체를 만드는 것은 layer를 쌓는거라서 어렵지 않았지만 output 결과 shape을 만들어주는 부분이 어려웠다. 후에 loss를 계산하고 하는 것까지 생각하여 shape을 변환해주어야하는 부분이 이해가 가지만 나중에 혼자 구현하면 시간이 오래걸릴 것 같다는 생각을 했다.
📝 배운 내용
model 구현
nn.ModuleList()
- 모듈을 list로 관리할 수 있게 해준다
- forward할때 여기서 모듈을 하나씩 불러와서 사용한다
nn.Sequential()
- 하나의 모듈로 만들어 준다
- convolution과 activation을 하나의 모듈로 사용할 때 많이 사용한다
- 모델의 weight와 bias를 초기화해준다
- forward 결과
- 3가지 크기의 feature map (19x19, 38x38, 76x76)
- output feature map의 shape : [batch, anchor수, grid, grid, box attribute(class수 + bbox 좌표 + objectness)]
loss 구현
- 3가지 loss
- 예측한 x, y, w, h의 값을 통해 bbox에 맞게 계산하고 GT box와의 iou를 통해 계산한다
- 이때 GT의 값이 예측한 box와 형식이 다르기 때문에 맞춰주어야한다