# -*- 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']