업스트림 체크포인트

LibreYOLO 계열는 릴리스된 체크포인트가 거의 불러올 수 있지만 LibreYOLO 메타데이터가 없는 업스트림 프로젝트에서 포팅됩니다. 자동 변환은 해당 파일을 인식하여 스키마 v1.0으로 감싸고 그 결과를 원본 옆에 작성합니다.

로드 시에 발생하는 일

LibreYOLO()가 이미 완전한 v1.0 체크포인트가 아닌 .pt 파일을 만나면, 자동 변환기를 호출하며, 그 자동 변환기는:

  1. 공통 업스트림 레이아웃에서 텐서 딕셔너리를 풀어냅니다;
  2. 등록된 모든 계열에게 레이아웃을 인식하는지 여부를 묻고, 업스트림 명칭이 네이티브 포트와 다를 경우 키를 다시 매핑합니다;
  3. 승자를 엄격한 v1.0 메타데이터 체크포인트로 래핑하며, 세분화된 체크포인트가 올바르게 변환되도록 텐서 자체에서 크기, 작업 및 클래스 수를 읽습니다;
  4. 그것을 소스 옆에 <source>-<Prefix><size>[-task].pt로 작성하고 해당 경로를 반환하므로, 팩토리가 정상적으로 그것을 로드합니다.

발신자에게 요구되는 것은 아무것도 없습니다. 계열이 주장하지 않는 파일은 아무것도 반환하지 않으며, 팩토리는 파일을 불러올 수 없다고 보고합니다.

그냥 파일을 팩토리에 전달해
from libreyolo import LibreYOLO # 인식된 업스트림 파일은 로드 시 변환되며, 변환된# 그 옆에 체크포인트가 쓰여 있습니다.# model = LibreYOLO("yolov9-t-converted.pt") # 어떤 LibreYOLO 체크포인트도 변경 없이 로드됩니다.model = LibreYOLO("LibreYOLO9t.pt")print(model.family, model.size, model.task, model.nb_classes)

레이아웃이 풀립니다

텐서 사전은 이 우선순위로 검색됩니다. 먼저 EMA를 확인하고, 실제로 텐서를 포함하는 후보가 나올 때까지 각 후보가 시도됩니다. 따라서 비어 있거나 메타데이터만 있는 EMA 블록은 아래의 유효한 가중치를 가리지 않습니다.

열쇠노트
ema.module일반적인 EMA 래퍼
ema텐서를 직접 저장하는 기존 평면 EMA 래퍼
ema_state_dictmodule. 접두사가 붙은 항목은 제거됩니다
params_ema
params
ema_net
net
model
state_dict
그 파일 자체일반적인 상태 딕셔너리

각 후보는 그 후 텐서 값 항목으로 좁혀지고 정규화됩니다: 선행 module. 또는 _orig_mod. 접두사가 제거되며, 키가 모두 model.model.로 시작하는 딕셔너리에서는 해당 접두사가 제거됩니다.

어떤 계열들이 무엇을 인정하는가

Recognition은 각 계열별 클래스 메서드입니다. 기본 구현은 이미 네이티브 포트와 일치하는 키를 가진 레이아웃을 주장합니다. 업스트림 키 이름이 다른 계열는 이를 재매핑으로 재정의하며, 인식하지 못하는 레이아웃에 대해서는 아무 것도 반환하지 않습니다.

리매핑 인식기를 배송하는 계열: centernet, deeplabv3, deformable_detr, dexined, moge2, picodet, rtdetr, rtdetrv2, rtdetrv4, rtmdet, segformer, swin, teed, yolo7, yolo9, yolo9_e2e, yolo9_p2.

자동 변환을 완전히 거부하는 계열: efficientdet, eomtpidnet는 인식기에서 아무 것도 반환하지 않으므로, 해당 상위 파일은 대신 변환 스크립트를 거칩니다. l2cs는 재배포 제한이 있는 가중치를 가진 추론 전용이므로 일반 인식기에서 제외됩니다.

RF-DETR은 자체 인식기를 유지합니다. 왜냐하면 크기를 탐지하고 COCO 클래스를 다시 매핑하기 위해 단순한 텐서 사전만이 아닌 전체 체크포인트가 필요하기 때문입니다. 선택적 종속성이 설치된 경우에만 등록됩니다.

다른 모든 등록된 계열는 기본값을 사용합니다: 자신의 로더가 이미 해당 키를 인식하고 있을 때 파일을 가져옵니다.

어떤 계열이 이기나요

여러 계열이 동일한 파일을 청구할 수 있으므로, 해결 방법은 팩토리의 배포 규칙을 반영합니다.

하위 클래스 클레임은 그 기본 클래스를 이깁니다. 등록 순서는 클래스 생성 순서를 따르므로, 파생된 계열는 그것이 정제하는 기본 클래스 다음에 등록되며, 그 긍정적 마커는 기본 클래스의 더 넓은 패스스루에 지면 안 됩니다.

레지스트리 순서가 그 후에 결정하는데, 이는 특정성을 부호화하기 때문입니다: 가장 먼저 제기된 주장이 가장 구체적인 일치입니다.

한 번에 하나의 연결 등록 순서가 깨질 수 없는 경우는 DEIM이 D-FINE에 대해 이루어질 때이며, 이들의 아키텍처 키는 동일합니다. 바로 그곳, 오직 그곳에서만 파일 이름이 결정 신호가 되며, 이름이 힌트를 제공하지 않는 파일은 추측되지 않고 거부됩니다. 파일 이름은 다른 곳에서는 의도적으로 참조되지 않으므로, 파일 이름만으로 더 구체적인 주장보다 광범위한 오탐 주장이 승격될 수 없습니다.

안전한 적재

업스트림 파일은 가중치 전용 언픽클러를 통해 로드됩니다. 일부 업스트림 학습 체크포인트는 언픽클러가 거부하는 라이브러리 객체를 포함합니다. 이러한 객체는 가중치가 아니라 학습 메타데이터이므로, 차단된 각 전역 객체는 아무 것도 실행하지 않고 언픽클러를 만족시키는 비활성 스탠드인 클래스와 함께 재시도됩니다. 캡처된 이름은 문자열 레이블로만 사용되며, 절대 가져오거나, 평가하거나, 호출되지 않습니다.

민감한 모듈 이름은 즉시 거부되며 절대 스텁되지 않습니다: builtins, os, sys, posix, ntsubprocess. 재시도 루프는 32회 시도로 제한되어 있으므로, 무한히 다양한 글로벌을 생성하도록 설계된 파일은 회전하지 않고 닫힌 상태로 실패합니다. 변환된 체크포인트에는 텐서만 남습니다.

변환된 파일이 저장되는 위치

출력은 <source>-<Prefix><size>[-task].pt라는 이름으로 소스 옆에 작성됩니다. 이는 항상 재사용되지 않고 새로 작성되며, 동일한 소스의 반복된 로드를 신선하게 유지하면서 공식 가중치나 동일한 계열, 크기 및 작업의 다른 파인튜닝과의 충돌을 피할 수 있습니다.

소스 디렉터리가 읽기 전용일 때, 변환은 호출마다 새로 생성된 개인 임시 디렉터리로 대체되며, 로그 라인에는 사용한 경로가 표시됩니다. 그것마저 실패하면 변환은 중단되며 경고가 출력됩니다.

기존 LibreYOLO 체크포인트

LibreYOLO 전용 마커인 libreyolo_version 또는 model_family를 가진 파일은 정상 로드 경로에 속하며 다시 변환되지 않습니다. 이 건너뛰기는 키셋이 변경되지 않은 패스트루 클레임에만 적용됩니다. 변환으로 인해 키셋이 변경된 클레임은 외부 상위 레이아웃의 증거이며, 마커가 있는 파일에서도 허용됩니다.

schema_version는 다른 학습 및 내보내기 도구들이 그 일반 이름을 사용하기 때문에 의도적으로 마커로 취급되지 않으며, names, nc, size, task 또는 imgsz도 마찬가지입니다. 이는 업스트림 파인튜닝이 그것들을 포함할 수 있기 때문입니다. 따라서 단순히 일반 names 키를 포함한 외부 파인튜닝은 표시되지 않으며, 해당 키가 원래 키를 기반으로 한 주장을 정상적으로 변환하고 텐서 헤드에서 클래스 수를 파생하며 잘못 로드되어 80 클래스로 처리되지는 않습니다.

컨버터가 읽는 메타데이터

클래스 이름은 최상위 names 키에서 가져오거나, args 또는 hyper_parameters 블록 내부의 class_names에서 가져옵니다. 클래스 인덱스가 아닌 레이블로 키가 지정된 이름 맵은 사용할 수 없으며, 생성된 기본값으로 대체됩니다. 탐지된 클래스 수보다 긴 이름 목록은 잘려서 처리됩니다. 범위를 벗어난 인덱스는 엄격한 검증기에 의해 실패하고 변환이 조용히 중단되기 때문입니다.

업스트림 args는 일반 메타데이터로 전달되며, 문자열, 숫자, 불리언, 리스트 또는 딕셔너리가 아닌 모든 값은 삭제되므로 안전하지 않은 값이 저장된 파일에 도달하지 않습니다.

RF-DETR COCO 정규화

업스트림 RF-DETR 체크포인트는 COCO의 90개 클래스와 배경을 포함한 91개 출력 분류 헤드를 노출합니다. 자동 변환은 COCO RF-DETR을 COCO-80 규칙으로 정규화하며, 리맵은 후처리 단계에서 적용됩니다.

체크포인트는 정확히 80개의 이름을 포함하거나, 클래스 수가 80이라고 선언하거나, coco 데이터셋 힌트를 가지고 있거나, 클래스나 데이터셋 메타데이터가 전혀 없을 때 COCO로 취급됩니다. 마지막 경우가 중요합니다: 메타데이터가 없는 원본 업스트림 상태 사전이 정식 COCO 사전학습 체크포인트이며, 배포되는 유일한 메타데이터 없는 91-출력 RF-DETR입니다.

진정한 맞춤 90-클래스 RF-DETR은 90개 클래스로 유지됩니다. 이는 이름 목록, 명시적인 80이 아닌 클래스 수, 또는 COCO가 아닌 데이터셋 힌트로 식별되므로, 베어 체크포인트 대체가 작동하지 않습니다. 데이터셋 힌트가 있는지를 결정할 때 빈 자리 표시자는 무시됩니다.

한계

자동 변환은 릴리스된 업스트림 레이아웃을 인식합니다. 그것은 아키텍처를 재작성하지 않으며, 포팅되지 않은 모델을 로드 가능하게 만들지도 않습니다. 어떤 계열도 파일을 소유하지 않을 때, 답변은 팩토리 인수가 아니라 변환 스크립트입니다: 저장소는 필요로 하는 계열들을 위해 weights/convert_*.py를 제공합니다. 여기에는 EoMT, PIDNet, EfficientDet이 포함됩니다.

변환은 또한 읽을 수 없는 메타데이터를 생성하지 않습니다. 크기, 작업 및 클래스 수는 텐서에서 나오며; 이름은 파일에 존재할 경우 파일에서 오고, 그렇지 않을 경우 class_i와 같이 생성됩니다.

libreyolo/models/autoconvert.py와 BaseModel.convert_upstream_state_dict에서 읽은 동작; 각 계열의 convert_upstream_state_dict 오버라이드를 읽어 확인한 계열별 인식기, 모두 v1.5.0에서. docs/checkpoint_schema.md.의 RF-DETR COCO 규칙