CLIP

CLIP은 고정된 레이블 집합 대신 이미지와 텍스트 프롬프트의 점수를 비교하는 이중 타워 모델입니다. LibreYOLO는 학습 단계 없이 제로샷 분류와 이미지/텍스트 임베딩을 지원합니다.

작업
classify, embed
크기
설치
pip install libreyolo
지원 티어
별도 티어, v부터 지원. 자체 팩토리와 계약을 갖춘 별도의 제품 영역입니다.
업스트림
OpenAI; LAION / ML Foundations의 CLIP / OpenCLIP, MIT. 논문, 소스
라이선스
코드 MIT, 가중치 MIT. 상업적 사용

설치

CLIP에는 전용 extra가 필요합니다. 이 extra는 벤더링된 BPE 토크나이저가 정확한 토큰 ID를 재현하는 데 사용하는 패키지를 설치합니다.

bash
pip install "libreyolo[clip]"

예측

처음 사용할 때 Hugging Face에서 가중치를 다운로드해 로컬에 캐시합니다.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])result = model(SAMPLE_IMAGE, save=True) print(model.names[result.probs.top1], float(result.probs.top1conf))
CLI
# set_classes()를 호출하지 않으면 CLI predict는 모델이 기본으로 불러오는# ImageNet 클래스 이름 1,000개를 사용합니다.libreyolo predict model=LibreCLIPb32-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
이미지와 텍스트 임베딩
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")image_embed = model(SAMPLE_IMAGE).embeddings.datatext_embed = model.embed_text("a photo of a forklift") # 둘 다 L2 정규화되므로 일반 내적이 코사인 유사도입니다.similarity = (image_embed @ text_embed.T).item()

set_classes()는 이 모델을 오픈 보캐뷸러리 분류기로 만드는 핵심 기능입니다. 각 레이블을 모든 프롬프트 템플릿으로 렌더링하고 결과를 인코딩해 평균한 뒤 생성된 [K, D] 행렬을 분류기 헤드로 캐시하므로 이미지마다 다시 계산하지 않습니다. 언제든 다시 호출해 클래스를 바꿀 수 있습니다. 호출하지 않으면 LibreCLIP은 ImageNet-1k 클래스 이름 1,000개가 이미 설정된 상태로 불러옵니다.

task="embed"를 사용하면 예측이 클래스 확률 대신 입력마다 L2 정규화된 이미지 벡터 하나를 반환합니다. embed_text()는 같은 벡터 공간에서 정규화된 텍스트 행을 반환하므로 둘 사이의 일반 내적이 코사인 유사도입니다. 두 작업 모두 NMS 단계가 없으므로 iou는 영향을 주지 않습니다. 소스, 스트리밍, 결과 처리는 예측을 참조합니다.

검증

val()은 ImageFolder train/ 분할 아래의 클래스 폴더 이름을 읽고 이를 사용해 set_classes()를 호출한 다음 제로샷 top-1 및 top-5 정확도를 측정합니다. 가중치 업데이트가 전혀 없으므로 정확도는 클래스 이름이 프롬프트로 어떻게 해석되는지에 따라 달라집니다. 검증은 task="classify"만 지원하며 task="embed"에는 데이터셋 검증기가 없습니다.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt") # data는 train/ 분할이 있는 ImageFolder 루트입니다. 폴더 이름이# 이번 실행의 제로샷 클래스 프롬프트가 됩니다.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160

내보내기

작업ONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: 지원함classify to TorchScript: 지원함classify to ExecuTorch: 지원함classify to TensorRT: 지원함classify to OpenVINO: 지원함classify to Paddle: 지원하지 않음classify to MNN: 지원하지 않음classify to RKNN: 지원하지 않음classify to ncnn: 지원하지 않음classify to TFLite: 지원하지 않음classify to CoreML: 지원하지 않음classify to Core AI: 지원함
embedembed to ONNX: 지원함embed to TorchScript: 지원함embed to ExecuTorch: 지원함embed to TensorRT: 지원함embed to OpenVINO: 지원함embed to Paddle: 지원하지 않음embed to MNN: 지원하지 않음embed to RKNN: 지원하지 않음embed to ncnn: 지원하지 않음embed to TFLite: 지원하지 않음embed to CoreML: 지원하지 않음embed to Core AI: 지원하지 않음

내보내기는 모델의 현재 상태를 고정 그래프에 넣습니다. task="classify"의 경우 set_classes()가 마지막으로 설정한 레이블과 내보낼 때의 해상도가 최종 선형 계층에 고정됩니다. 따라서 내보낸 ONNX 또는 TensorRT 그래프는 텍스트 타워와 토크나이저가 없는 일반 [B, K] 이미지 분류기이며 클래스나 크기를 바꾸면 다시 내보내야 합니다. task="embed" 내보내기는 이미지 타워만 추적합니다. 둘 다 ONNX opset 14 이상이 필요하며 내보내기가 기본으로 이를 설정합니다.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # 현재 set_classes() 레이블과 입력 해상도가 그래프에 고정됩니다.# 둘 중 하나라도 바꾼 뒤에는 다시 내보냅니다.
CLI
# 여기서는 set_classes()를 호출하지 않으므로 모델이 불러온 기본# ImageNet 클래스 1,000개가 고정됩니다.libreyolo export model=LibreCLIPb32-cls.pt format=onnx
임베딩 내보내기
from libreyolo import LibreYOLO # task="embed"는 이미지 타워만 추적하므로 클래스가 필요하지 않습니다.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")

체크포인트

이 계열에 공개된 모든 가중치 파일입니다. 두 체크포인트는 모두 COCO 학습 결과가 아니라 OpenCLIP의 LAION-2B 학습 체크포인트(ViT-B-32, ViT-B-16)를 변환한 것입니다.

파일입력(px)가중치 라이선스
classify
LibreCLIPb32-cls.ptmit
LibreCLIPb16-cls.ptmit

위의 모든 파일은 현재 LibreYOLO 조직에 있으며 처음 사용할 때 내려받습니다.

LAION-2B 학습 데이터에는 CSAM 콘텐츠가 포함되었다는 기록이 있습니다(Stanford Internet Observatory, 2023년 12월). LAION은 이후 정제하여 다시 공개한 Re-LAION을 출시했습니다. 이러한 가중치를 다시 호스팅한다면 가능한 경우 Re-LAION 파생 체크포인트를 우선 사용합니다.

라이선스

내려받는 특정 가중치의 Hugging Face 저장소에서 라이선스를 확인하십시오. LibreYOLO 조직의 모든 체크포인트에는 라이선스가 있으며 한 계열 안에서도 항상 같지는 않습니다. 해당 저장소가 신뢰할 수 있는 기준입니다. 아래 요약은 이 페이지를 마지막으로 검증했을 때 적용된 내용을 설명합니다.

관련 라이선스에 관한 설명이며 법률 자문이 아닙니다. 상업적으로 중요한 사안이라면 라이선스를 직접 읽고 별도의 법률 자문을 받으십시오.

원작
CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
업스트림 라이선스
MIT
LibreYOLO 코드
MIT
가중치
MIT, huggingface.co/LibreYOLO에 다시 게시됨
해석
MIT is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep the license text and copyright notice with any copy you redistribute, and it places no obligation on your own application code. LibreCLIP's tokenizer is vendored from the OpenAI CLIP / OpenCLIP byte-pair-encoding tokenizer (also MIT); its image and text towers are a clean-room re-implementation of the standard CLIP architecture, built without open_clip as a runtime dependency. The shipped checkpoints (b32, b16) are converted from OpenCLIP's LAION-2B-trained weights, which OpenCLIP publishes as MIT-redistributable. Training is not offered for this family: LibreCLIP is zero-shot, and set_classes() replaces the fine-tuning step a trained classifier would otherwise need.

인용

@software{ilharco_gabriel_2021_5143773,
  author       = {Ilharco, Gabriel and
                  Wortsman, Mitchell and
                  Wightman, Ross and
                  Gordon, Cade and
                  Carlini, Nicholas and
                  Taori, Rohan and
                  Dave, Achal and
                  Shankar, Vaishaal and
                  Namkoong, Hongseok and
                  Miller, John and
                  Hajishirzi, Hannaneh and
                  Farhadi, Ali and
                  Schmidt, Ludwig},
  title        = {OpenCLIP},
  month        = jul,
  year         = 2021,
  note         = {If you use this software, please cite it as below.},
  publisher    = {Zenodo},
  version      = {0.1},
  doi          = {10.5281/zenodo.5143773},
  url          = {https://doi.org/10.5281/zenodo.5143773}
}

github.com/mlfoundations/open_clip#citing에 있는 저자의 인용 블록에서 복사했습니다.

LibreYOLO v1.5.0에서 검증되었습니다. 이 페이지의 지원 표, 체크포인트, 벤치마크 수치는 출시된 라이브러리와 공개된 가중치에서 생성되며 수동으로 작성되지 않습니다.