|
# Image to GPS Model: DINO-ResNet Fusion |
|
|
|
## Training Data Statistics |
|
The following mean and standard deviation values were used to normalize the GPS coordinates: |
|
|
|
- **Latitude Mean**: {39.95156391970743} |
|
- **Latitude Std**: {0.0007633062105681285} |
|
- **Longitude Mean**: {-75.19148737056214} |
|
- **Longitude Std**: {0.0007871346840888362} |
|
|
|
## How to use the model |
|
|
|
Please include the definition of the model first before loading the checkpoint: |
|
|
|
```python |
|
# Import all the dependencies |
|
import torch |
|
import torch.nn as nn |
|
import torchvision.models as models |
|
import torchvision.transforms as transforms |
|
from torch.utils.data import DataLoader, Dataset |
|
from transformers import AutoImageProcessor, AutoModelForImageClassification, AutoModel |
|
from huggingface_hub import PyTorchModelHubMixin |
|
from PIL import Image |
|
import os |
|
import numpy as np |
|
|
|
|
|
class EfficientNetGPSModel(nn.Module, PyTorchModelHubMixin): |
|
def __init__(self, eff_name="efficientnet_b0", num_outputs=2): |
|
super(EfficientNetGPSModel, self).__init__() |
|
|
|
# Load the EfficientNet backbone |
|
self.efficientnet = getattr(models, eff_name)(pretrained=True) |
|
|
|
# Replace the classifier head while keeping the overall structure simple |
|
in_features = self.efficientnet.classifier[1].in_features |
|
self.efficientnet.classifier = nn.Sequential( |
|
nn.Linear(in_features, num_outputs) # Directly map to GPS coordinates |
|
) |
|
|
|
def forward(self, x): |
|
return self.efficientnet(x) |
|
|
|
def save_model(self, save_path): |
|
self.save_pretrained(save_path) |
|
|
|
def push_model(self, repo_name): |
|
self.push_to_hub(repo_name) |
|
``` |
|
|
|
Then you can download the model from HF by running, and this will also load the checkpoint automatically: |
|
|
|
```python |
|
model = EfficientNetGPSModel.from_pretrained("cis519/efficient-Net") |
|
``` |