Zero-Shot Image Classification
Transformers
English
medical
multimodal
vision-language pre-training
chest x-ray
Instructions to use pykale/MeDSLIP with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use pykale/MeDSLIP with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("zero-shot-image-classification", model="pykale/MeDSLIP") pipe( "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/parrots.png", candidate_labels=["animals", "humans", "landscape"], )# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("pykale/MeDSLIP", device_map="auto") - Notebooks
- Google Colab
- Kaggle
| from cmath import nan | |
| import csv | |
| import json | |
| import logging | |
| import os | |
| import sys | |
| import pydicom | |
| from abc import abstractmethod | |
| from itertools import islice | |
| from typing import List, Tuple, Dict, Any | |
| from torch.utils.data import DataLoader | |
| import PIL | |
| from torch.utils.data import Dataset | |
| import numpy as np | |
| import pandas as pd | |
| from torchvision import transforms | |
| from PIL import Image | |
| from skimage import exposure | |
| import torch | |
| # from dataset.randaugment import RandomAugment | |
| from torchvision.transforms import InterpolationMode | |
| class RSNA2018_Dataset(Dataset): | |
| def __init__(self, csv_path): | |
| data_info = pd.read_csv(csv_path) | |
| self.img_path_list = np.asarray(data_info.iloc[:, 1]) | |
| self.class_list = np.asarray(data_info.iloc[:, 3]) | |
| self.bbox = np.asarray(data_info.iloc[:, 2]) | |
| normalize = transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)) | |
| self.transform = transforms.Compose( | |
| [transforms.Resize([224, 224]), transforms.ToTensor(), normalize,] | |
| ) | |
| self.seg_transfrom = transforms.Compose( | |
| [ | |
| transforms.ToTensor(), | |
| transforms.Resize([224, 224], interpolation=InterpolationMode.NEAREST), | |
| ] | |
| ) | |
| def __getitem__(self, index): | |
| img_path = self.img_path_list[index] | |
| class_label = np.array([self.class_list[index]]) # (14,) | |
| img = self.read_dcm(img_path) | |
| image = self.transform(img) | |
| bbox = self.bbox[index] | |
| seg_map = np.zeros((1024, 1024)) | |
| if class_label == 1: | |
| boxes = bbox.split("|") | |
| for box in boxes: | |
| cc = box.split(";") | |
| seg_map[ | |
| int(float(cc[1])) : (int(float(cc[1])) + int(float(cc[3]))), | |
| int(float(cc[0])) : (int(float(cc[0])) + int(float(cc[2]))), | |
| ] = 1 | |
| seg_map = self.seg_transfrom(seg_map) | |
| return { | |
| "image": image, | |
| "label": class_label, | |
| "image_path": img_path, | |
| "seg_map": seg_map, | |
| } | |
| def read_dcm(self, dcm_path): | |
| dcm_data = pydicom.read_file(dcm_path) | |
| img = dcm_data.pixel_array.astype(float) / 255.0 | |
| img = exposure.equalize_hist(img) | |
| img = (255 * img).astype(np.uint8) | |
| img = PIL.Image.fromarray(img).convert("RGB") | |
| return img | |
| def __len__(self): | |
| return len(self.img_path_list) | |
| def create_loader_RSNA( | |
| datasets, samplers, batch_size, num_workers, is_trains, collate_fns | |
| ): | |
| loaders = [] | |
| for dataset, sampler, bs, n_worker, is_train, collate_fn in zip( | |
| datasets, samplers, batch_size, num_workers, is_trains, collate_fns | |
| ): | |
| if is_train: | |
| shuffle = sampler is None | |
| drop_last = True | |
| else: | |
| shuffle = False | |
| drop_last = False | |
| loader = DataLoader( | |
| dataset, | |
| batch_size=bs, | |
| num_workers=n_worker, | |
| pin_memory=True, | |
| sampler=sampler, | |
| shuffle=shuffle, | |
| collate_fn=collate_fn, | |
| drop_last=drop_last, | |
| ) | |
| loaders.append(loader) | |
| return loaders | |