Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
"""Final Run-Concurrent | |
Automatically generated by Colaboratory. | |
Original file is located at | |
https://colab.research.google.com/drive/19foLOwCXRH0e0P_Xqqc-9VgpnmjYyAX8 | |
""" | |
# Install the Necessary Packages | |
!pip install datasets huggingface_hub sentence-transformers gradio evaluate | |
!pip install git+https://github.com/huggingface/accelerate | |
!pip install transformers==4.28.0 | |
import datasets | |
from datasets import load_dataset | |
import pandas | |
from PIL import Image | |
import cv2 | |
import os | |
from pandas import read_csv | |
from google.colab import drive | |
drive.mount('/content/drive/') | |
raw_dataset = load_dataset("imagefolder", data_dir="/content/drive/MyDrive/california_fire_damage_classification_merged/train") | |
dataset = raw_dataset["train"].train_test_split(test_size=0.2, stratify_by_column="label") | |
from transformers import ViTImageProcessor, ViTForImageClassification | |
import torch | |
device = 'cuda' # for GPU | |
model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224') | |
model.eval() | |
#model.to(device); | |
# image_processor is the same as Tokenizer | |
extractor = ViTImageProcessor.from_pretrained('google/vit-base-patch16-224') | |
labels = raw_dataset['train'].features['label'].names | |
labels | |
from transformers import AutoFeatureExtractor, AutoModelForImageClassification, AutoTokenizer | |
extractor = AutoFeatureExtractor.from_pretrained("/content/drive/MyDrive/california_fire_damage_classification_merged/saved_model_files") | |
model = AutoModelForImageClassification.from_pretrained("/content/drive/MyDrive/california_fire_damage_classification_merged/saved_model_files") | |
import torch | |
def transform(example_batch): | |
inputs = extractor([x.convert("RGB") for x in example_batch['image']], return_tensors='pt') | |
inputs['labels'] = example_batch['label'] | |
return inputs | |
prepared_ds = dataset.with_transform(transform) | |
### RUNNING EVALUATION ON PRETRAINED MODEL | |
from transformers import TrainingArguments, Trainer | |
training_args = TrainingArguments("test_trainer"), | |
import numpy as np | |
from datasets import load_metric | |
metric = load_metric("accuracy") | |
def compute_metrics(eval_pred): | |
logits, labels = eval_pred | |
predictions = np.argmax(logits, axis=-1) | |
return metric.compute(predictions=predictions, references=labels) | |
trainer = Trainer( | |
model=model, | |
args=training_args, | |
train_dataset=None, | |
eval_dataset=prepared_ds['test'], | |
compute_metrics=compute_metrics, | |
) | |
j = 2095 | |
print('Groundtruth: ', y_test_np[j], ' ', labels[y_test_np[j]], 'Prediction: ', y_predicts_np[j], ' ', labels[y_predicts_np[j]]) | |
dataset['test'][j]['image'] | |
pixel_values_array = [] | |
y_test = [] | |
counter = 0 | |
for img_pair in prepared_ds['test']: | |
pixel_values_array.append(img_pair['pixel_values']) | |
y_test.append(img_pair["labels"]) | |
#pixel_values_tensor = torch.concat((pixel_values_tensor, img_pair['pixel_values']), 0) | |
counter += 1 | |
print(counter) | |
#pixel_values_tensor = torch.stack(pixel_values_array) | |
#pixel_values_tensor | |
len(pixel_values_tensor) | |
len(y_predicts_merged) | |
import numpy as np | |
y_test_np = np.array(y_test) | |
y_predicts_np = np.array(y_predicts_merged) | |
np.where((y_test_np == y_predicts_np) == False) | |
y_predicts = [] | |
for i in range(len(pixel_values_tensor)): | |
logits = model(pixel_values_tensor[i:i+1])[-1] | |
y_predict = [logit.argmax(-1).item() for logit in logits] | |
y_predicts.append(y_predict) | |
y_predicts | |
y_predicts_merged = [inner for outer in y_predicts for inner in outer] | |
y_predicts_merged | |
logits = model(pixel_values_tensor[0:1])[-1] | |
logits | |
y_predict = [logit.argmax(-1).item() for logit in logits] | |
y_predict | |
#y_test = [img_pair["labels"] for img_pair in prepared_ds['test']] | |
y_test = prepared_ds['test'][0:100]["labels"] | |
y_test | |
from sklearn.metrics import classification_report, confusion_matrix | |
print(confusion_matrix(y_test, y_predicts_merged)) | |
print(classification_report(y_test, y_predicts_merged)) | |
probability = torch.nn.functional.softmax(logits, dim=-1) | |
probability | |
probs = probability.detach().numpy() | |
probs | |
confidences = [{label: float(prob[j]) for j, label in enumerate(labels)} for prob in probs] | |
confidences | |
# First we get the features corresponding to the first training image | |
encoding = image_processor(images=prepared_ds['test'][0]['image'], return_tensors="pt").to(device) | |
# Then pass it through the model and get a prediction | |
###### | |
outputs = model(**encoding) | |
logits = outputs.logits | |
###### | |
prediction = logits.argmax(-1).item() | |
print("Predicted class:", model.config.id2label[prediction]) | |
# For 1 Sample -> look at distribution of probabilities assigned | |
tokenizer = AutoTokenizer.from_pretrained("google/vit-base-patch16-224") | |
def tokenize_function(examples): | |
return tokenizer(examples["text"], padding="max_length", truncation=True) | |
encoding = image_processor(images=[prepared_ds["test"][0]['image']], return_tensors="pt").to(device) | |
outputs = model(**encoding) | |
logits = outputs.logits | |
prediction = logits.argmax(-1).item() | |
print("Predicted class:", model.config.id2label[prediction]) | |
im_test = [dataset['test'][0]['image'], dataset['test'][1]['image']] | |
features_test = extractor(im_test, return_tensors='pt') | |
features_test['pixel_values'][0] | |
features_test['pixel_values'][-1] | |
logits = model(features_test["pixel_values"]) | |
logits[-1] | |
probability = torch.nn.functional.softmax(logits, dim=-1) | |
logits = model(features_test["pixel_values"])[-1] | |
probs = probability[0].detach().numpy() | |
confidences = {label: float(probs[i]) for i, label in enumerate(labels)} | |
probability = torch.nn.functional.softmax(logits, dim=-1) | |
probability | |
prepared_ds['test'][0]['pixel_values'] | |