GPS Prediction Using ResNet Model

This repository contains a trained model for GPS coordinate prediction using a ResNet-based architecture. The model predicts latitude and longitude values from input images and has been deployed on the Hugging Face Hub using the PyTorchModelHubMixin.

Inference Script

Below is the Python implementation of the inference process, where we predict GPS coordinates and evaluate the model's performance using the Root Mean Squared Error (RMSE) based on geodesic distances.

from geopy.distance import geodesic
import numpy as np
import torch
from torch.utils.data import DataLoader
from huggingface_hub import PyTorchModelHubMixin

# Load the pre-trained model from the Hub
model = CustomResNetModel.from_pretrained("5190final/model1")

# Normalization constants for latitude and longitude
lat_mean = 39.951611366653395
lat_std = 0.0006686190927448403
lon_mean = -75.19145880459313
lon_std = 0.0006484111794126842

# Set up device (use MPS if available, otherwise fallback to CPU)
device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
model.to(device)
model.eval() 

# Prepare the dataset and dataloader
test_dataset = GPSImageDataset(
    hf_dataset=dataset_test,
    transform=inference_transform,
    lat_mean=lat_mean,
    lat_std=lat_std,
    lon_mean=lon_mean,
    lon_std=lon_std
)
test_dataloader = DataLoader(test_dataset, batch_size=32, shuffle=False)

# Initialize lists to store predictions and actual values
all_preds = []
all_actuals = []

# Run inference
with torch.no_grad():
    for images, gps_coords in test_dataloader:
        images = images.to(device)
        gps_coords = gps_coords.to(device)
        
        outputs = model(images)
        logits = outputs.logits  # Extract predictions

        all_preds.extend(logits.cpu().numpy())  # Store predictions
        all_actuals.extend(gps_coords.cpu().numpy())  # Store actual values

# Denormalize predictions and actual values
all_preds = np.array(all_preds)
all_actuals = np.array(all_actuals)

all_preds_denorm = all_preds * np.array([lat_std, lon_std]) + np.array([lat_mean, lon_mean])
all_actuals_denorm = all_actuals * np.array([lat_std, lon_std]) + np.array([lat_mean, lon_mean])

# Calculate RMSE using geodesic distances
squared_errors = []
for pred, actual in zip(all_preds_denorm, all_actuals_denorm):
    distance = geodesic((actual[0], actual[1]), (pred[0], pred[1])).meters  
    squared_errors.append(distance**2)  # Square the distance for RMSE

rmse = np.sqrt(np.mean(squared_errors))
print(f"RMSE: {rmse:.2f} meters")
Downloads last month
4
Safetensors
Model size
23.6M params
Tensor type
F32
·
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.