|
--- |
|
license: mit |
|
inference: false |
|
tags: |
|
- medical |
|
- code |
|
--- |
|
# EfficientNet Parkinson's Prediction Model 🤗 |
|
|
|
This repository contains the Hugging Face EfficientNet model for predicting Parkinson's disease using patient drawings with an accuracy of around 83%. |
|
Made w/ EfficientNet and Torch. |
|
|
|
## Overview |
|
|
|
Parkinson's disease is a progressive nervous system disorder that affects movement. Symptoms start gradually, sometimes starting with a barely noticeable tremor in just one hand. Tremors are common, but the disorder also commonly causes stiffness or slowing of movement. |
|
|
|
My model uses the EfficientNet architecture to predict the likelihood of Parkinson's disease in patients by analysing their drawings. |
|
Feel free to open a pull request and contribute if you want to. |
|
|
|
## Dataset |
|
|
|
The dataset used to train this model was provided by [Kaggle](https://www.kaggle.com/datasets/kmader/parkinsons-drawings). |
|
|
|
## Usage |
|
|
|
```python |
|
import torch |
|
from transformers import AutoModel |
|
from torch import nn |
|
from PIL import Image |
|
import numpy as np |
|
|
|
# Set the device |
|
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') |
|
|
|
# Load the trained model |
|
model = AutoModel.from_pretrained('/content/final') |
|
|
|
# Move the model to the device |
|
model = model.to(device) |
|
|
|
# Load and resize new image(s) |
|
image_size = (224, 224) |
|
new_image = Image.open('/content/health.png').convert('RGB').resize(image_size) |
|
new_image = np.array(new_image) |
|
new_image = torch.from_numpy(new_image).transpose(0, 2).float().unsqueeze(0) |
|
|
|
# Move the data to the device |
|
new_image = new_image.to(device) |
|
|
|
# Make predictions using the trained model |
|
with torch.no_grad(): |
|
predictions = model(new_image) |
|
logits = predictions.last_hidden_state |
|
logits = logits.view(logits.shape[0], -1) |
|
num_classes=2 |
|
feature_reducer = nn.Linear(logits.shape[1], num_classes) |
|
|
|
logits = logits.to(device) |
|
feature_reducer = feature_reducer.to(device) |
|
|
|
logits = feature_reducer(logits) |
|
predicted_class = torch.argmax(logits, dim=1).item() |
|
confidence = torch.softmax(logits, dim=1)[0][predicted_class].item() |
|
if(predicted_class == 0): |
|
print(f'Predicted class: Parkinson\'s with confidence {confidence:.2f}') |
|
else: |
|
print(f'Predicted class: Healthy with confidence {confidence:.2f}') |
|
|
|
|
|
|