라벨 정책이 학습 목표를 만든다
검출 학습은 영상의 물체 클래스와 상자를 감독 목표로 사용한다. 같은 물체를 보더라도 무엇을 라벨링하는지 합의가 없으면 손실이 모순된 목표를 따라간다. 예를 들어 cup과 mug를 합칠지, 손에 가린 컵을 보이는 범위로 둘지 전체 모양을 추정한 상자로 둘지 정한다. 이 단위의 가상 정책은 보이는 범위를 영상 안에서 감싼 상자를 쓰며, 클래스는 0=cup/1=tool로 고정한다. 다른 자료의 amodal/가림 정책과 같다고 가정하지 않는다.
관심 물체가 없다고 확인한 음성 영상과 아직 주석하지 않은 영상은 다르다. 빈 라벨을 의도된 배경으로 사용할 수 있지만 미완료 주석을 그렇게 처리하면 실제 컵이 배경인 것처럼 학습될 수 있다. label_status와 검토자/개정·가림/작은 물체/반사/잘림 정책을 남긴다. 자동 라벨이 점수가 높다는 이유만으로 정답이 되지는 않는다. 원본과 overlay를 눈으로 대조하고 어려운 조건의 일부를 독립적으로 재검토한다.
같은 상자를 서로 다른 숫자로 쓴다
Ultralytics의 일반 검출 텍스트 라벨은 한 물체에 class x_center y_center width height 형식을 쓴다. 클래스 번호는 0부터 시작하며 네 기하 값은 영상 너비/높이로 정규화한 비율이다. 점수나 3차원 깊이를 이 다섯 열에 넣지 않는다. 공식 검출 포맷의 클래스 이름/파일 경로 구성과 함께 확인한다.
원본 영상 너비 W=1000/높이 H=500 pixel, 상자 모서리는 xmin=400/ymin=150/xmax=600/ymax=350이라고 하자. 반열린 연속 좌표의 폭/높이를 쓰고+1은 더하지 않는다. 중심은(500,250), 크기는(200,200) pixel이다. 정규화한 중심은(0.5,0.5), 폭은 200/1000=0.2, 높이는 200/500=0.4이므로 라벨은 다음과 같다.
0 0.5 0.5 0.2 0.4
폭/높이에 같은 분모 1000을 쓰면 비정사각형 영상의 높이가 틀린다. 원본 픽셀의 모서리 좌표를 정규화 중심 포맷이라고 이름만 바꾸어 저장해도 안 된다. 클래스 번호의 정수/범위와 이름표, 유한한 좌표/양의 폭·높이를 검사한다. 이번 ‘보이는 범위’ 정책에서는 중심±반크기로 복원한 모서리도 0~1 안이어야 한다. cx=0.9/w=0.4는 각각 0~1에 있어도 오른쪽 끝 1.1이므로 이 정책에 맞지 않는다. 도구의 자동 clipping이 있다면 원본 결함을 숨겼는지 기록한다.
전처리 후 정답도 같은 곳에 있어야 한다
가상 letterbox는 원본 비율을 유지해 줄인 뒤 남는 영역을 padding으로 채운다. 이번에는 1000×500을 640×640에 넣되 배율s=0.64, 실제 영상 640×320, 위/아래 padding160 pixel로 명시한다. 좌표는 u'=0.64u/v'=0.64v+160이다. 실제 라이브러리의 auto padding/stride/반올림 옵션을 재현한 결과가 아니라 주어진 교육용 변환이다.
그림 M12.03-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
원래 상자는 x=256~384/y=256~384, 중심(320,320), 크기 128×128이 된다. 640으로 정규화하면 라벨은(0.5,0.5,0.2,0.2)다. 원본의 높이 0.4를 그대로 두면 새 영상에서 높이 256 pixel인 다른 상자가 된다. 단, 정규화만 필요하고 영상 변환이 없는 상황에서 라이브러리가 입력 라벨을 다시 변환하는지까지 확인한다. 미리 변환한 라벨을 같은 변환에 두 번 통과시키지 않는다.
원본/변환 영상·상자 overlay를 몇 장 함께 보면 채널/방향/회전·padding과 class 매핑 오류를 발견할 수 있다. 잘라내기/뒤집기/모자이크 같은 증강도 라벨과 함께 변환하고, 작은/부분 가린 물체가 어떻게 남는지 확인한다. 이미지가 예뻐졌다는 판단만으로 라벨 좌표가 맞다고 승인하지 않는다. 증강본은 M11.03의 원본 episode/물체 그룹을 따라 분할하여 train/validation/test에 근접 복제본이 섞이지 않게 한다.
YOLO라는 이름보다 실험 계약을 기록한다
YOLO 계열에는 서로 다른 모델/구현과 세대가 있다. 하나의 아키텍처/출력 후처리/API가 모든 계열에 동일하다고 말하지 않는다. 이 설명에서는 공식 YOLO11 문서를 인터페이스 예로 확인했으며 최신 모델 구매/성능 추천이 아니다. 공식 Python 예의 YOLO(...).train(data=..., epochs=..., imgsz=...)는 모형·자료·학습 조건을 넘기는 호출이다. 코드가 시작된다는 사실이 라벨 품질이나 작업 성공의 증거가 되지는 않는다.
실제 실행을 선택할 때는 패키지 버전/코드 commit, 모델 구성과 초기 가중치의 정확한 파일/해시, task 종류·클래스 이름 순서, train/validation/test manifest를 먼저 고정한다. .yaml 모형 정의와 .pt 가중치의 의미, 사전학습에서 시작하는지 처음부터 학습하는지도 기록한다. 이름이 비슷한 분류/분할 모델을 검출 모델이라고 쓰지 않는다. data 설정의 경로/names, imgsz와 실제 전처리, batch/device·seed/epoch·optimizer/학습률·증강·출력 경로를 남긴다.
기본 실습은 이 명세를 읽는 활동이며 설치나 학습 명령을 요구하지 않는다. 실제 환경을 만들지 않았으므로 임의의 최신 패키지 번호를 검증된 재현 조합처럼 고정하지 않는다. 학습을 실행했다면 선택된 checkpoint/검증 기준과 로그·실패 사례/최종 시험 지표/추론 비용을 보존해야 한다. 표시된 상자 몇 개만으로 새로운 물체/환경의 검출 성능을 실증했다고 하지 않는다.
코드와 자료의 사용 조건도 독립된 출처다
공식 Ultralytics 저장소의 LICENSE는 AGPL-3.0 문서를 담고, 공급자는 별도의 enterprise 조건도 안내한다. 이것만으로 임의 제품/가중치/자료의 모든 사용 조건을 판단하지 않는다. 사용할 코드 개정의 라이선스, pretrained 가중치의 모델 카드/조건, 원본 이미지/라벨의 출처·촬영/재배포 조건을 각각 기록한다. ‘다운로드 가능’이나 ‘오픈소스’라는 단어가 모든 사용/배포 방식이 동일하다는 뜻은 아니다. 여기서는 실제 배포/구매를 진행하지 않는다.
자료의 파일명/클래스 정의·주석 정책/개정과 split, 변환 코드, 모델/API/가중치 및 평가 조건을 한 run에 연결하면 결과의 원인을 설명할 수 있다. 기존 5.8 학습 기록의 지도학습 절차를 검출 과제에 옮기되 상자와 행동의 출력 계약을 혼동하지 않는다. 아래 자료는 실제 YOLO 학습 결과가 아니다.