티스토리 뷰
https://sims-solve.tistory.com/125
지금까지 모델의 구조와 최종 output을 살펴보았다.
결국 Detection을 모두 진행하면 (batch, ClassNum + 4(xywh) , 8400(Gird cell 수 )) 가 나오는 것을 알 수 있었다.
해당 정보를 바탕으로 이제 학습을 위한 Loss을 어떻게 구하는지 알아보고자 한다.
조금 코드를 살펴보면서 구하는 방식을 살펴보자.
1. pred_distri , pred_scores
해당 코드를 통해 나오는 값들은 각각
pred_distri : 1, 64, 8400 --> Bbox
pred_scores : 1, 80, 8400 --> Class
이전 글에서 1,144,8400이 두개로 Split 되는 과정을 볼 수 있는데, 해당 코드가 그 과정을 해주는 코드다.
그 후 Bbox에 해당하는 정보를 DFL을 통해 1,4,8400으로 바꾸는 과정이 나왔었다.
그래서 최종 출력에는 1,84,8400으로 구성되는 것이었다. 계속해서 코드를 살펴보자.
해당 코드를 통해서 1,64,8400 -> 1, 4, 8400으로 바꿔주게 된다. 한번 더 bbox_decode 함수로 들어가보자.
여기서 pred_dist는 1,8400,64여서 batch, anchors, channels가 된다.
1. 여기서 pred_dist.view(b,a,4,c//4)를 통해 1,8400,4,16으로 다시 차원을 나눠준다.
2. 그 후 softmax(3)를 해준 후 self.proj를 행렬곱 해준다. self.proj는 0~15까지의 숫자가 들어있다 )
3. 그럼 최종 shape은 1,8400,4가 된다.
4. 그 후 dist2bbox를 진행하게 된다.
1. lt ( left top ), rb(right bottom ) 값을 각각 나타내므로 둘을 나눠 anchor_point에 빼고 더하기를 각각 해준다. ( xyxy형태 )
2. 그럼 앵커기준으로 lt, rb가 각각 나오고 그걸 다시 return 해준다.
YOLO는 xywh 형태로 Bbox를 나타내지만, 내부적으로 Bbox를 학습할때는 xyxy형태로 바꿔서 학습을 하는 것을 볼 수 있다.
결국엔 총 3개의 Loss를 구해 더하여 최종 loss을 구하게 된다.
loss[0] -> box에 관련된 loss
loss[1] -> 분류 관련 loss
loss[2] -> dfl 관련 loss
자세히 파면팔수록 알아야 할 내용이 많고, 아직 얕게만 어떻게 돌아가는지 파악이 가능하다.
생각보다 단순하지 않고, 코드적으로 복잡하게 되어있기때문에 추가적으로 Deep Dive를 할 필요가 있어보인다.
지금까지 YOLOv8 전반적인 내용을 살펴보았다. 모델부터 loss을 구하는 방식까지 살펴봤으니 얕게나마 yolo를 이해할 수 있었다.
좀더 Deep Dive를 하여 해당 shape이 어떤 의미를 가질지 생각해보는것도 좋을 것 같다. 필자도 추가적으로 업데이트를 진행할 예정이다.
* 추가 내용
** stride_tensor 를 지정해서, 8, 16 ,32 로 해놓은게 있는데, 이게 나중에 anchor point와 곱해서 실제 이미지의 위치를 나태주는 역할을 한다.
**_mask 관련된 변수는 객체가 있는 부분만 표시해주기 위해 필요한 것임.
YOLO는 xywh형식이지만, 학습할때는 xyxy로 변경하여 진행한다. 위 코드에서 xyxy로 변경하는 것을 볼 수 있다.
'Deep-learning' 카테고리의 다른 글
YOLOv11 - C3K2 Block (0) | 2024.11.13 |
---|---|
YOLOv11 이해하기 (0) - 전체적인 내용 (0) | 2024.11.12 |
YOLOv8 이해하기 (3) - Detection output shape (0) | 2024.11.10 |
YOLOv8 이해하기 (2) - Head (0) | 2024.11.08 |
YOLOv8 이해하기 (1) - Backbone (0) | 2024.11.07 |
- Total
- Today
- Yesterday
- c3k2
- yolov11
- 티스토리챌린지
- 정리
- docker
- 알고리즘
- 깃
- 오류
- github
- CNN
- 자바
- 어탠션
- 디텍션
- 딥러닝
- 오블완
- V11
- 이미지
- GNN
- 초보자
- python
- YOLOv8
- GIT
- java
- 백준
- DeepLearning
- Tree
- 도커
- YOLO
- 욜로
- 뜯어보기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |