Views
No views yet
bitsandbytes). It is suitable for multi-label classification tasks involving 20 distinct image categories.adapter_model.safetensors)classifier_head.pt)openai/clip-vit-large-patch14load_in_8bit=True)peftLayerNorm → Dropout → Linear(num_labels=20)q_proj, k_proj, v_proj, out_projClass 0, Class 1, Class 2, ..., Class 19!pip install transformers peft bitsandbytes accelerate1import torch
2import torch.nn as nn
3from transformers import CLIPModel, BitsAndBytesConfig, CLIPProcessor
4from peft import PeftModel
5
6class CLIPForMultiLabel(nn.Module):
7 def __init__(self, backbone, num_labels=20, dropout=0.1):
8 super().__init__()
9 self.backbone = backbone
10 hidden_size = backbone.config.projection_dim
11 self.classifier = nn.Sequential(
12 nn.LayerNorm(hidden_size),
13 nn.Dropout(dropout),
14 nn.Linear(hidden_size, num_labels)
15 )
16
17 def forward(self, pixel_values):
18 image_feats = self.backbone.get_image_features(pixel_values=pixel_values)
19 return self.classifier(image_feats)
20
21# Load LoRA backbone
22quant_cfg = BitsAndBytesConfig(load_in_8bit=True)
23base = CLIPModel.from_pretrained("openai/clip-vit-large-patch14", quantization_config=quant_cfg)
24backbone = PeftModel.from_pretrained(base, "YOUR_USERNAME/clip-lora-multilabel")
25
26# Load classifier head
27model = CLIPForMultiLabel(backbone, num_labels=20)
28state_dict = torch.hub.load_state_dict_from_url(
29 "https://huggingface.co/YOUR_USERNAME/clip-lora-multilabel/resolve/main/classifier_head.pt",
30 map_location="cpu"
31)
32model.classifier.load_state_dict(state_dict)
33model.eval()
34
35# Load processor
36processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")1from PIL import Image
2
3image = Image.open("your_image.jpg").convert("RGB")
4inputs = processor(images=image, return_tensors="pt")
5pixel_values = inputs["pixel_values"]
6
7with torch.no_grad():
8 logits = model(pixel_values)
9 probs = torch.sigmoid(logits)
10 preds = (probs > 0.5).int().cpu().numpy()
11
12print("Predicted multi-hot vector:", preds)