YOLO 모델 구조_Head(Neck)편

김찬우·2025년 10월 20일

YOLO

목록 보기
4/6

Neck 하나로 통합

Neck와 Head 분리

Neck영역 추출 이미지

Backbone 레이어의 4번, 6번, 9번 레이어에서 특성 맵(상위, 중위, 하위 단계 특성)을 받아 neck영역으로 보낸다.

이후 Upsample과정에서는 nearest방식과 scale_factor값에 2를 주어 이미지의 크기를 상승시킨다.

사용되는 torch Upsample 코드 예시

각각에서 추출된 레이어들은 Upsample 레이어와 Cov 레이어를 거치며 각 이미지 사이즈의 특성을 합친 특성맵을 출력하고 이를 Head의 입력으로 사용해 각 사이즈(특성맵의 width, height)의 정보를 가진 Detect 클래스가 생성된다.

Upsample레이어에 관해 10번 레이어와 13번 레이어에 대해 출력 특성 맵의 차원이 다른 것을 확인할 수 있었는데 Upsample레이어 내부에 출력 채널 수를 결정하는 레이어가 존재하나 model.yaml에서는 해당 요소에 대하여 인가하는 파라미터를 찾을 수 없어 현재 파악 중 (c_ 파라미터가 출력 채널의 수로 256이다 이로 인해 13번의 채널 수가 줄어드는 것은 파악할 수 있었으나 10번 레이어를 통과할 때 채널 수가 줄어들이 않는 이유는 확인하지 못함)

각각에서 추출된 레이어들은 Upsample 레이어와 Cov 레이어를 거치며 각 이미지 사이즈의 특성을 합친 특성맵을 출력하고 이를 Head의 입력으로 사용해 각 사이즈(특성맵의 width, height)의 정보를 가진 Detect 클래스가 생성된다.


블록도에서는 서로 다른 Detect에 연결되는 것처럼 보이지만 실제 코드를 살펴보면 각각의 레이어를 하나의 Head가 모두 받는것을 확인할 수 있다.

참고 사이트
https://docs.ultralytics.com/ko/yolov5/tutorials/architecture_description/#44-build-targets
https://www.reddit.com/r/Ultralytics/comments/1eolwl8/the_correct_way_to_train_from_a_previously/?rdt=53319

0개의 댓글