Compare commits

..

7 Commits

Author SHA1 Message Date
KeshavAnandCode
0c56b9285a Final working, with good req.txt and readme 2026-03-20 13:25:47 -05:00
KeshavAnandCode
f28aa1d53b final notebookk run 2026-03-20 13:18:53 -05:00
KeshavAnandCode
66e153ff4a final submission readyu...moved notebookks 2026-03-20 13:12:06 -05:00
KeshavAnandCode
6f854a9d62 Added Deep CNN and ayugmentation 2026-03-18 22:59:28 -05:00
KeshavAnandCode
59f26a299c dropout fixed oerfitting, added 2026-03-18 19:09:41 -05:00
KeshavAnandCode
4f8c48c504 Adam optimized... better at training but worse bc overfitting worse 2026-03-18 18:49:33 -05:00
KeshavAnandCode
4d9bf5965b made modified noteboo to exploit GPU but overfits 2026-03-18 18:41:49 -05:00
11 changed files with 3152 additions and 106 deletions

View File

@@ -1,6 +1,92 @@
# vehicle-classification
# Vehicle Classification — UTD Deep Learning Assessment
UTD Vehicle Classification Assessment Code
A Convolutional Neural Network (CNN) trained to classify 8 vehicle types:
**Bicycle, Bus, Car, Motorcycle, NonVehicles, Taxi, Truck, Van**
Download Zip and move to data/raw/
Extract zip into data/raw/vehicle_classification
---
## Requirements
- Python 3.11 (see `.python-version`)
- pip
---
## Setup
### 1. Clone the repository
```bash
git clone https://git.keshavanand.net/KeshavAnandCode/vehicle-classification.git
cd utd-vehicle-classification
```
### 2. Create and activate a virtual environment
```bash
python3.11 -m venv .venv
```
**Mac/Linux:**
```bash
source .venv/bin/activate
```
**Windows:**
```bash
.venv\Scripts\activate
```
### 3. Install dependencies
```bash
pip install -r requirements.txt
```
### 4. Download the dataset
- Download `vehicle_classification.zip`
- Place and extract it so the structure looks exactly like this:
```
data/
└── raw/
└── vehicle_classification/
├── Bicycle/
├── Bus/
├── Car/
├── Motorcycle/
├── NonVehicles/
├── Taxi/
├── Truck/
└── Van/
```
### 5. Run the notebook
```bash
jupyter notebook notebooks/submission.ipynb
```
Once open: **Kernel → Restart & Run All**
---
## Project Structure
```
utd-vehicle-classification/
├── notebooks/
│ ├── submission.ipynb ← main submission, run this
│ └── experiments/ ← exploratory notebooks (ignore)
├── data/
│ └── raw/
│ └── vehicle_classification/ ← dataset goes here
├── models/ ← saved model weights (auto-created on run)
├── results/ ← training curves (auto-created on run)
├── requirements.txt
└── README.md
```
---
## Expected Output
```
Final Train Accuracy : ~88%
Final Test Accuracy : ~82%
```
---
## Notes
- Device is detected automatically — runs on NVIDIA GPU, Apple Silicon (MPS), or CPU with no code changes required
- `models/` and `results/` directories are created automatically when the notebook runs

View File

File diff suppressed because one or more lines are too long

View File

@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"id": "7a37220a",
"metadata": {},
"outputs": [
@@ -20,7 +20,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 2,
"id": "d318d1f0",
"metadata": {},
"outputs": [
@@ -42,7 +42,7 @@
"source": [
"import os\n",
"\n",
"data_dir = '../data/raw/vehicle_classification'\n",
"data_dir = '../../data/raw/vehicle_classification'\n",
"\n",
"for class_name in os.listdir(data_dir):\n",
" class_path = os.path.join(data_dir, class_name)\n",
@@ -61,7 +61,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 3,
"id": "5604ace3",
"metadata": {},
"outputs": [
@@ -110,7 +110,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 4,
"id": "3cedd586",
"metadata": {},
"outputs": [
@@ -150,7 +150,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 5,
"id": "8f556b22",
"metadata": {},
"outputs": [
@@ -184,7 +184,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 6,
"id": "37793c77",
"metadata": {},
"outputs": [
@@ -222,7 +222,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 7,
"id": "f68c1a25",
"metadata": {},
"outputs": [
@@ -257,7 +257,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 8,
"id": "e1539eaa",
"metadata": {},
"outputs": [
@@ -289,7 +289,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 9,
"id": "d1b7d9ca",
"metadata": {},
"outputs": [
@@ -347,7 +347,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 10,
"id": "54d11a04",
"metadata": {},
"outputs": [],
@@ -370,7 +370,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 11,
"id": "374d0590",
"metadata": {},
"outputs": [
@@ -378,16 +378,16 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1: Loss=1.575, Accuracy=50.54%\n",
"Epoch 2: Loss=1.196, Accuracy=60.35%\n",
"Epoch 3: Loss=1.018, Accuracy=64.98%\n",
"Epoch 4: Loss=0.909, Accuracy=68.58%\n",
"Epoch 5: Loss=0.842, Accuracy=70.87%\n",
"Epoch 6: Loss=0.784, Accuracy=72.83%\n",
"Epoch 7: Loss=0.738, Accuracy=74.24%\n",
"Epoch 8: Loss=0.703, Accuracy=75.30%\n",
"Epoch 9: Loss=0.671, Accuracy=76.30%\n",
"Epoch 10: Loss=0.641, Accuracy=77.64%\n",
"Epoch 1: Loss=1.518, Accuracy=51.03%\n",
"Epoch 2: Loss=1.110, Accuracy=62.02%\n",
"Epoch 3: Loss=0.976, Accuracy=66.24%\n",
"Epoch 4: Loss=0.906, Accuracy=68.52%\n",
"Epoch 5: Loss=0.838, Accuracy=70.77%\n",
"Epoch 6: Loss=0.782, Accuracy=72.33%\n",
"Epoch 7: Loss=0.735, Accuracy=74.25%\n",
"Epoch 8: Loss=0.696, Accuracy=75.42%\n",
"Epoch 9: Loss=0.665, Accuracy=76.53%\n",
"Epoch 10: Loss=0.634, Accuracy=77.40%\n",
"Finished Training\n"
]
}
@@ -425,12 +425,12 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 12,
"id": "2bf2b9a2",
"metadata": {},
"outputs": [],
"source": [
"PATH = '../models/tutorial-cnn.pth'\n",
"PATH = '../../models/tutorial-cnn.pth'\n",
"torch.save(model.state_dict(), PATH)"
]
},
@@ -444,7 +444,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 13,
"id": "bc158602",
"metadata": {},
"outputs": [
@@ -452,7 +452,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Test Accuracy: 74.53%\n"
"Test Accuracy: 75.66%\n"
]
}
],
@@ -474,7 +474,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 14,
"id": "8cc7ed40",
"metadata": {},
"outputs": [
@@ -482,14 +482,14 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy for class: Bicycle is 43.5%\n",
"Accuracy for class: Bus is 53.8%\n",
"Accuracy for class: Car is 87.6%\n",
"Accuracy for class: Motorcycle is 75.2%\n",
"Accuracy for class: NonVehicles is 99.0%\n",
"Accuracy for class: Taxi is 20.0%\n",
"Accuracy for class: Truck is 13.9%\n",
"Accuracy for class: Van is 24.7%\n"
"Accuracy for class: Bicycle is 73.6%\n",
"Accuracy for class: Bus is 65.1%\n",
"Accuracy for class: Car is 86.2%\n",
"Accuracy for class: Motorcycle is 55.7%\n",
"Accuracy for class: NonVehicles is 99.3%\n",
"Accuracy for class: Taxi is 32.9%\n",
"Accuracy for class: Truck is 24.8%\n",
"Accuracy for class: Van is 22.9%\n"
]
}
],

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,67 +1,8 @@
asttokens==3.0.1
comm==0.2.3
contourpy==1.3.3
cuda-bindings==12.9.4
cuda-pathfinder==1.2.2
cuda-toolkit==12.8.1
cycler==0.12.1
debugpy==1.8.20
decorator==5.2.1
executing==2.2.1
filelock==3.25.2
fonttools==4.62.1
fsspec==2026.2.0
ipykernel==7.2.0
ipython==9.10.0
ipython_pygments_lexers==1.1.1
jedi==0.19.2
Jinja2==3.1.6
jupyter_client==8.8.0
jupyter_core==5.9.1
kiwisolver==1.5.0
MarkupSafe==3.0.2
matplotlib==3.10.8
matplotlib-inline==0.2.1
mpmath==1.3.0
nest-asyncio==1.6.0
networkx==3.6.1
numpy==2.4.3
nvidia-cublas-cu12==12.8.4.1
nvidia-cuda-cupti-cu12==12.8.90
nvidia-cuda-nvrtc-cu12==12.8.93
nvidia-cuda-runtime-cu12==12.8.90
nvidia-cudnn-cu12==9.20.0.48
nvidia-cufft-cu12==11.3.3.83
nvidia-cufile-cu12==1.13.1.3
nvidia-curand-cu12==10.3.9.90
nvidia-cusolver-cu12==11.7.3.90
nvidia-cusparse-cu12==12.5.8.93
nvidia-cusparselt-cu12==0.7.1
nvidia-nccl-cu12==2.29.7
nvidia-nvjitlink-cu12==12.8.93
nvidia-nvshmem-cu12==3.4.5
nvidia-nvtx-cu12==12.8.90
packaging==26.0
parso==0.8.6
pexpect==4.9.0
pillow==12.1.1
platformdirs==4.9.4
prompt_toolkit==3.0.52
psutil==7.2.2
ptyprocess==0.7.0
pure_eval==0.2.3
Pygments==2.19.2
pyparsing==3.3.2
python-dateutil==2.9.0.post0
pyzmq==27.1.0
six==1.17.0
stack-data==0.6.3
sympy==1.14.0
torch==2.12.0.dev20260318+cu128
torchaudio==2.11.0.dev20260318+cu128
torchvision==0.26.0.dev20260318+cu128
tornado==6.5.5
traitlets==5.14.3
triton==3.6.0+git9844da95
typing_extensions==4.15.0
wcwidth==0.6.0
torch>=2.0.0
torchvision>=0.15.0
numpy>=1.24.0
matplotlib>=3.7.0
Pillow>=9.0.0
scikit-learn>=1.0.0
jupyter>=1.0.0
ipykernel>=6.0.0

BIN
results/training_curves.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File