Compare commits

...

3 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
12 changed files with 983 additions and 961 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

File diff suppressed because one or more lines are too long

View File

@@ -42,7 +42,7 @@
"source": [ "source": [
"import os\n", "import os\n",
"\n", "\n",
"data_dir = '../data/raw/vehicle_classification'\n", "data_dir = '../../data/raw/vehicle_classification'\n",
"\n", "\n",
"for class_name in os.listdir(data_dir):\n", "for class_name in os.listdir(data_dir):\n",
" class_path = os.path.join(data_dir, class_name)\n", " class_path = os.path.join(data_dir, class_name)\n",
@@ -378,16 +378,16 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Epoch 1: Loss=1.480, Accuracy=50.95%\n", "Epoch 1: Loss=1.518, Accuracy=51.03%\n",
"Epoch 2: Loss=1.073, Accuracy=62.46%\n", "Epoch 2: Loss=1.110, Accuracy=62.02%\n",
"Epoch 3: Loss=0.974, Accuracy=66.04%\n", "Epoch 3: Loss=0.976, Accuracy=66.24%\n",
"Epoch 4: Loss=0.899, Accuracy=68.51%\n", "Epoch 4: Loss=0.906, Accuracy=68.52%\n",
"Epoch 5: Loss=0.834, Accuracy=70.87%\n", "Epoch 5: Loss=0.838, Accuracy=70.77%\n",
"Epoch 6: Loss=0.779, Accuracy=72.60%\n", "Epoch 6: Loss=0.782, Accuracy=72.33%\n",
"Epoch 7: Loss=0.730, Accuracy=74.29%\n", "Epoch 7: Loss=0.735, Accuracy=74.25%\n",
"Epoch 8: Loss=0.689, Accuracy=75.64%\n", "Epoch 8: Loss=0.696, Accuracy=75.42%\n",
"Epoch 9: Loss=0.649, Accuracy=77.14%\n", "Epoch 9: Loss=0.665, Accuracy=76.53%\n",
"Epoch 10: Loss=0.620, Accuracy=78.21%\n", "Epoch 10: Loss=0.634, Accuracy=77.40%\n",
"Finished Training\n" "Finished Training\n"
] ]
} }
@@ -430,7 +430,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"PATH = '../models/tutorial-cnn.pth'\n", "PATH = '../../models/tutorial-cnn.pth'\n",
"torch.save(model.state_dict(), PATH)" "torch.save(model.state_dict(), PATH)"
] ]
}, },
@@ -452,7 +452,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Test Accuracy: 76.35%\n" "Test Accuracy: 75.66%\n"
] ]
} }
], ],
@@ -482,14 +482,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Accuracy for class: Bicycle is 45.2%\n", "Accuracy for class: Bicycle is 73.6%\n",
"Accuracy for class: Bus is 71.3%\n", "Accuracy for class: Bus is 65.1%\n",
"Accuracy for class: Car is 77.3%\n", "Accuracy for class: Car is 86.2%\n",
"Accuracy for class: Motorcycle is 81.2%\n", "Accuracy for class: Motorcycle is 55.7%\n",
"Accuracy for class: NonVehicles is 98.2%\n", "Accuracy for class: NonVehicles is 99.3%\n",
"Accuracy for class: Taxi is 37.0%\n", "Accuracy for class: Taxi is 32.9%\n",
"Accuracy for class: Truck is 35.6%\n", "Accuracy for class: Truck is 24.8%\n",
"Accuracy for class: Van is 35.5%\n" "Accuracy for class: Van is 22.9%\n"
] ]
} }
], ],

View File

@@ -42,7 +42,7 @@
"source": [ "source": [
"import os\n", "import os\n",
"\n", "\n",
"data_dir = '../data/raw/vehicle_classification'\n", "data_dir = '../../data/raw/vehicle_classification'\n",
"\n", "\n",
"for class_name in os.listdir(data_dir):\n", "for class_name in os.listdir(data_dir):\n",
" class_path = os.path.join(data_dir, class_name)\n", " class_path = os.path.join(data_dir, class_name)\n",
@@ -378,36 +378,36 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Epoch 1: Loss=1.732, Accuracy=43.80%\n", "Epoch 1: Loss=1.693, Accuracy=43.96%\n",
"Epoch 2: Loss=1.403, Accuracy=54.06%\n", "Epoch 2: Loss=1.285, Accuracy=56.70%\n",
"Epoch 3: Loss=1.137, Accuracy=60.66%\n", "Epoch 3: Loss=1.070, Accuracy=62.78%\n",
"Epoch 4: Loss=1.003, Accuracy=64.95%\n", "Epoch 4: Loss=0.964, Accuracy=66.34%\n",
"Epoch 5: Loss=0.917, Accuracy=67.92%\n", "Epoch 5: Loss=0.891, Accuracy=68.85%\n",
"Epoch 6: Loss=0.845, Accuracy=70.22%\n", "Epoch 6: Loss=0.826, Accuracy=70.92%\n",
"Epoch 7: Loss=0.796, Accuracy=72.06%\n", "Epoch 7: Loss=0.764, Accuracy=72.87%\n",
"Epoch 8: Loss=0.741, Accuracy=73.88%\n", "Epoch 8: Loss=0.734, Accuracy=74.25%\n",
"Epoch 9: Loss=0.711, Accuracy=75.05%\n", "Epoch 9: Loss=0.690, Accuracy=75.77%\n",
"Epoch 10: Loss=0.670, Accuracy=76.52%\n", "Epoch 10: Loss=0.636, Accuracy=77.49%\n",
"Epoch 11: Loss=0.636, Accuracy=77.59%\n", "Epoch 11: Loss=0.616, Accuracy=78.49%\n",
"Epoch 12: Loss=0.611, Accuracy=78.49%\n", "Epoch 12: Loss=0.581, Accuracy=79.67%\n",
"Epoch 13: Loss=0.580, Accuracy=79.42%\n", "Epoch 13: Loss=0.558, Accuracy=80.53%\n",
"Epoch 14: Loss=0.546, Accuracy=80.87%\n", "Epoch 14: Loss=0.526, Accuracy=81.44%\n",
"Epoch 15: Loss=0.519, Accuracy=81.77%\n", "Epoch 15: Loss=0.498, Accuracy=82.36%\n",
"Epoch 16: Loss=0.502, Accuracy=82.36%\n", "Epoch 16: Loss=0.458, Accuracy=83.76%\n",
"Epoch 17: Loss=0.474, Accuracy=83.28%\n", "Epoch 17: Loss=0.436, Accuracy=84.62%\n",
"Epoch 18: Loss=0.445, Accuracy=84.34%\n", "Epoch 18: Loss=0.398, Accuracy=86.02%\n",
"Epoch 19: Loss=0.424, Accuracy=85.12%\n", "Epoch 19: Loss=0.378, Accuracy=86.44%\n",
"Epoch 20: Loss=0.392, Accuracy=86.07%\n", "Epoch 20: Loss=0.327, Accuracy=88.69%\n",
"Epoch 21: Loss=0.366, Accuracy=86.99%\n", "Epoch 21: Loss=0.310, Accuracy=89.20%\n",
"Epoch 22: Loss=0.330, Accuracy=88.30%\n", "Epoch 22: Loss=0.265, Accuracy=90.82%\n",
"Epoch 23: Loss=0.304, Accuracy=89.51%\n", "Epoch 23: Loss=0.237, Accuracy=91.60%\n",
"Epoch 24: Loss=0.267, Accuracy=90.67%\n", "Epoch 24: Loss=0.212, Accuracy=92.75%\n",
"Epoch 25: Loss=0.227, Accuracy=92.35%\n", "Epoch 25: Loss=0.193, Accuracy=93.34%\n",
"Epoch 26: Loss=0.222, Accuracy=92.38%\n", "Epoch 26: Loss=0.161, Accuracy=94.54%\n",
"Epoch 27: Loss=0.176, Accuracy=94.24%\n", "Epoch 27: Loss=0.119, Accuracy=96.25%\n",
"Epoch 28: Loss=0.156, Accuracy=94.71%\n", "Epoch 28: Loss=0.095, Accuracy=96.94%\n",
"Epoch 29: Loss=0.143, Accuracy=94.92%\n", "Epoch 29: Loss=0.099, Accuracy=96.86%\n",
"Epoch 30: Loss=0.124, Accuracy=95.87%\n", "Epoch 30: Loss=0.078, Accuracy=97.66%\n",
"Finished Training\n" "Finished Training\n"
] ]
} }
@@ -450,7 +450,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"PATH = '../models/tutorial-cnn-modified.pth'\n", "PATH = '../../models/tutorial-cnn-modified.pth'\n",
"torch.save(model.state_dict(), PATH)" "torch.save(model.state_dict(), PATH)"
] ]
}, },
@@ -472,7 +472,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Test Accuracy: 78.54%\n" "Test Accuracy: 76.90%\n"
] ]
} }
], ],
@@ -502,14 +502,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Accuracy for class: Bicycle is 52.4%\n", "Accuracy for class: Bicycle is 61.4%\n",
"Accuracy for class: Bus is 79.0%\n", "Accuracy for class: Bus is 75.6%\n",
"Accuracy for class: Car is 74.9%\n", "Accuracy for class: Car is 76.0%\n",
"Accuracy for class: Motorcycle is 85.9%\n", "Accuracy for class: Motorcycle is 76.0%\n",
"Accuracy for class: NonVehicles is 98.7%\n", "Accuracy for class: NonVehicles is 98.5%\n",
"Accuracy for class: Taxi is 58.2%\n", "Accuracy for class: Taxi is 45.6%\n",
"Accuracy for class: Truck is 44.9%\n", "Accuracy for class: Truck is 38.0%\n",
"Accuracy for class: Van is 29.8%\n" "Accuracy for class: Van is 31.6%\n"
] ]
} }
], ],

View File

@@ -42,7 +42,7 @@
"source": [ "source": [
"import os\n", "import os\n",
"\n", "\n",
"data_dir = '../data/raw/vehicle_classification'\n", "data_dir = '../../data/raw/vehicle_classification'\n",
"\n", "\n",
"for class_name in os.listdir(data_dir):\n", "for class_name in os.listdir(data_dir):\n",
" class_path = os.path.join(data_dir, class_name)\n", " class_path = os.path.join(data_dir, class_name)\n",
@@ -378,36 +378,36 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Epoch 1: Loss=1.337, Accuracy=56.65%\n", "Epoch 1: Loss=1.301, Accuracy=56.17%\n",
"Epoch 2: Loss=0.965, Accuracy=66.88%\n", "Epoch 2: Loss=1.014, Accuracy=64.94%\n",
"Epoch 3: Loss=0.870, Accuracy=69.80%\n", "Epoch 3: Loss=0.933, Accuracy=67.15%\n",
"Epoch 4: Loss=0.789, Accuracy=72.31%\n", "Epoch 4: Loss=0.858, Accuracy=69.63%\n",
"Epoch 5: Loss=0.746, Accuracy=73.78%\n", "Epoch 5: Loss=0.783, Accuracy=72.12%\n",
"Epoch 6: Loss=0.692, Accuracy=75.63%\n", "Epoch 6: Loss=0.749, Accuracy=73.16%\n",
"Epoch 7: Loss=0.659, Accuracy=76.80%\n", "Epoch 7: Loss=0.695, Accuracy=75.33%\n",
"Epoch 8: Loss=0.624, Accuracy=77.99%\n", "Epoch 8: Loss=0.662, Accuracy=76.60%\n",
"Epoch 9: Loss=0.608, Accuracy=78.58%\n", "Epoch 9: Loss=0.634, Accuracy=77.59%\n",
"Epoch 10: Loss=0.566, Accuracy=80.22%\n", "Epoch 10: Loss=0.618, Accuracy=78.29%\n",
"Epoch 11: Loss=0.540, Accuracy=80.91%\n", "Epoch 11: Loss=0.586, Accuracy=79.37%\n",
"Epoch 12: Loss=0.517, Accuracy=81.71%\n", "Epoch 12: Loss=0.554, Accuracy=80.26%\n",
"Epoch 13: Loss=0.495, Accuracy=82.49%\n", "Epoch 13: Loss=0.538, Accuracy=81.11%\n",
"Epoch 14: Loss=0.460, Accuracy=84.00%\n", "Epoch 14: Loss=0.507, Accuracy=82.21%\n",
"Epoch 15: Loss=0.436, Accuracy=84.83%\n", "Epoch 15: Loss=0.489, Accuracy=82.95%\n",
"Epoch 16: Loss=0.405, Accuracy=85.72%\n", "Epoch 16: Loss=0.462, Accuracy=83.55%\n",
"Epoch 17: Loss=0.380, Accuracy=86.55%\n", "Epoch 17: Loss=0.435, Accuracy=84.84%\n",
"Epoch 18: Loss=0.348, Accuracy=87.83%\n", "Epoch 18: Loss=0.412, Accuracy=85.40%\n",
"Epoch 19: Loss=0.322, Accuracy=88.65%\n", "Epoch 19: Loss=0.390, Accuracy=86.27%\n",
"Epoch 20: Loss=0.294, Accuracy=89.97%\n", "Epoch 20: Loss=0.364, Accuracy=87.19%\n",
"Epoch 21: Loss=0.265, Accuracy=90.71%\n", "Epoch 21: Loss=0.348, Accuracy=87.81%\n",
"Epoch 22: Loss=0.233, Accuracy=91.95%\n", "Epoch 22: Loss=0.305, Accuracy=89.40%\n",
"Epoch 23: Loss=0.210, Accuracy=92.85%\n", "Epoch 23: Loss=0.279, Accuracy=90.41%\n",
"Epoch 24: Loss=0.184, Accuracy=93.87%\n", "Epoch 24: Loss=0.268, Accuracy=90.56%\n",
"Epoch 25: Loss=0.163, Accuracy=94.46%\n", "Epoch 25: Loss=0.227, Accuracy=92.43%\n",
"Epoch 26: Loss=0.137, Accuracy=95.61%\n", "Epoch 26: Loss=0.209, Accuracy=92.78%\n",
"Epoch 27: Loss=0.118, Accuracy=96.28%\n", "Epoch 27: Loss=0.181, Accuracy=94.17%\n",
"Epoch 28: Loss=0.096, Accuracy=97.20%\n", "Epoch 28: Loss=0.173, Accuracy=94.14%\n",
"Epoch 29: Loss=0.080, Accuracy=97.70%\n", "Epoch 29: Loss=0.140, Accuracy=95.50%\n",
"Epoch 30: Loss=0.066, Accuracy=98.04%\n", "Epoch 30: Loss=0.126, Accuracy=95.96%\n",
"Finished Training\n" "Finished Training\n"
] ]
} }
@@ -450,7 +450,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"PATH = '../models/adam-optimized.pth'\n", "PATH = '../../models/adam-optimized.pth'\n",
"torch.save(model.state_dict(), PATH)" "torch.save(model.state_dict(), PATH)"
] ]
}, },
@@ -472,7 +472,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Test Accuracy: 75.68%\n" "Test Accuracy: 76.50%\n"
] ]
} }
], ],
@@ -502,14 +502,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Accuracy for class: Bicycle is 68.8%\n", "Accuracy for class: Bicycle is 66.5%\n",
"Accuracy for class: Bus is 76.1%\n", "Accuracy for class: Bus is 68.0%\n",
"Accuracy for class: Car is 66.5%\n", "Accuracy for class: Car is 73.8%\n",
"Accuracy for class: Motorcycle is 78.4%\n", "Accuracy for class: Motorcycle is 77.1%\n",
"Accuracy for class: NonVehicles is 98.5%\n", "Accuracy for class: NonVehicles is 99.0%\n",
"Accuracy for class: Taxi is 42.6%\n", "Accuracy for class: Taxi is 41.3%\n",
"Accuracy for class: Truck is 41.2%\n", "Accuracy for class: Truck is 43.8%\n",
"Accuracy for class: Van is 39.9%\n" "Accuracy for class: Van is 23.6%\n"
] ]
} }
], ],

View File

@@ -42,7 +42,7 @@
"source": [ "source": [
"import os\n", "import os\n",
"\n", "\n",
"data_dir = '../data/raw/vehicle_classification'\n", "data_dir = '../../data/raw/vehicle_classification'\n",
"\n", "\n",
"for class_name in os.listdir(data_dir):\n", "for class_name in os.listdir(data_dir):\n",
" class_path = os.path.join(data_dir, class_name)\n", " class_path = os.path.join(data_dir, class_name)\n",
@@ -418,36 +418,36 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Epoch 1: Loss=1.455, Accuracy=59.60%\n", "Epoch 1: Loss=1.427, Accuracy=61.06%\n",
"Epoch 2: Loss=0.872, Accuracy=69.47%\n", "Epoch 2: Loss=0.814, Accuracy=71.39%\n",
"Epoch 3: Loss=0.748, Accuracy=73.57%\n", "Epoch 3: Loss=0.709, Accuracy=74.82%\n",
"Epoch 4: Loss=0.669, Accuracy=76.44%\n", "Epoch 4: Loss=0.645, Accuracy=77.18%\n",
"Epoch 5: Loss=0.613, Accuracy=78.60%\n", "Epoch 5: Loss=0.597, Accuracy=79.08%\n",
"Epoch 6: Loss=0.575, Accuracy=79.73%\n", "Epoch 6: Loss=0.564, Accuracy=80.10%\n",
"Epoch 7: Loss=0.539, Accuracy=80.91%\n", "Epoch 7: Loss=0.529, Accuracy=81.31%\n",
"Epoch 8: Loss=0.507, Accuracy=82.19%\n", "Epoch 8: Loss=0.500, Accuracy=82.12%\n",
"Epoch 9: Loss=0.483, Accuracy=82.79%\n", "Epoch 9: Loss=0.468, Accuracy=83.23%\n",
"Epoch 10: Loss=0.461, Accuracy=83.69%\n", "Epoch 10: Loss=0.451, Accuracy=84.01%\n",
"Epoch 11: Loss=0.439, Accuracy=84.35%\n", "Epoch 11: Loss=0.430, Accuracy=84.79%\n",
"Epoch 12: Loss=0.409, Accuracy=85.46%\n", "Epoch 12: Loss=0.423, Accuracy=84.93%\n",
"Epoch 13: Loss=0.396, Accuracy=85.98%\n", "Epoch 13: Loss=0.385, Accuracy=86.47%\n",
"Epoch 14: Loss=0.369, Accuracy=86.39%\n", "Epoch 14: Loss=0.368, Accuracy=86.48%\n",
"Epoch 15: Loss=0.356, Accuracy=87.00%\n", "Epoch 15: Loss=0.346, Accuracy=87.31%\n",
"Epoch 16: Loss=0.351, Accuracy=87.15%\n", "Epoch 16: Loss=0.341, Accuracy=87.57%\n",
"Epoch 17: Loss=0.330, Accuracy=88.06%\n", "Epoch 17: Loss=0.310, Accuracy=89.02%\n",
"Epoch 18: Loss=0.307, Accuracy=88.95%\n", "Epoch 18: Loss=0.303, Accuracy=89.11%\n",
"Epoch 19: Loss=0.286, Accuracy=89.57%\n", "Epoch 19: Loss=0.274, Accuracy=89.85%\n",
"Epoch 20: Loss=0.253, Accuracy=90.44%\n", "Epoch 20: Loss=0.258, Accuracy=90.29%\n",
"Epoch 21: Loss=0.244, Accuracy=91.00%\n", "Epoch 21: Loss=0.246, Accuracy=90.69%\n",
"Epoch 22: Loss=0.233, Accuracy=91.22%\n", "Epoch 22: Loss=0.239, Accuracy=91.06%\n",
"Epoch 23: Loss=0.225, Accuracy=91.56%\n", "Epoch 23: Loss=0.227, Accuracy=91.57%\n",
"Epoch 24: Loss=0.201, Accuracy=92.63%\n", "Epoch 24: Loss=0.207, Accuracy=92.31%\n",
"Epoch 25: Loss=0.198, Accuracy=92.55%\n", "Epoch 25: Loss=0.191, Accuracy=92.94%\n",
"Epoch 26: Loss=0.178, Accuracy=93.46%\n", "Epoch 26: Loss=0.178, Accuracy=93.24%\n",
"Epoch 27: Loss=0.169, Accuracy=93.60%\n", "Epoch 27: Loss=0.163, Accuracy=93.96%\n",
"Epoch 28: Loss=0.149, Accuracy=94.44%\n", "Epoch 28: Loss=0.147, Accuracy=94.67%\n",
"Epoch 29: Loss=0.153, Accuracy=94.34%\n", "Epoch 29: Loss=0.150, Accuracy=94.36%\n",
"Epoch 30: Loss=0.135, Accuracy=95.05%\n", "Epoch 30: Loss=0.130, Accuracy=95.14%\n",
"Finished Training\n" "Finished Training\n"
] ]
} }
@@ -490,7 +490,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"PATH = '../models/batch-norm-dropout.pth'\n", "PATH = '../../models/batch-norm-dropout.pth'\n",
"torch.save(model.state_dict(), PATH)" "torch.save(model.state_dict(), PATH)"
] ]
}, },
@@ -512,7 +512,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Test Accuracy: 83.30%\n" "Test Accuracy: 82.26%\n"
] ]
} }
], ],
@@ -542,14 +542,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Accuracy for class: Bicycle is 72.2%\n", "Accuracy for class: Bicycle is 72.7%\n",
"Accuracy for class: Bus is 83.6%\n", "Accuracy for class: Bus is 81.5%\n",
"Accuracy for class: Car is 82.9%\n", "Accuracy for class: Car is 78.2%\n",
"Accuracy for class: Motorcycle is 84.2%\n", "Accuracy for class: Motorcycle is 82.6%\n",
"Accuracy for class: NonVehicles is 99.6%\n", "Accuracy for class: NonVehicles is 100.0%\n",
"Accuracy for class: Taxi is 52.5%\n", "Accuracy for class: Taxi is 53.2%\n",
"Accuracy for class: Truck is 48.5%\n", "Accuracy for class: Truck is 52.9%\n",
"Accuracy for class: Van is 45.0%\n" "Accuracy for class: Van is 41.8%\n"
] ]
} }
], ],

View File

@@ -2,7 +2,7 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 12,
"id": "7a37220a", "id": "7a37220a",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -20,7 +20,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 13,
"id": "d318d1f0", "id": "d318d1f0",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -42,7 +42,7 @@
"source": [ "source": [
"import os\n", "import os\n",
"\n", "\n",
"data_dir = '../data/raw/vehicle_classification'\n", "data_dir = '../../data/raw/vehicle_classification'\n",
"\n", "\n",
"for class_name in os.listdir(data_dir):\n", "for class_name in os.listdir(data_dir):\n",
" class_path = os.path.join(data_dir, class_name)\n", " class_path = os.path.join(data_dir, class_name)\n",
@@ -61,7 +61,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 14,
"id": "5604ace3", "id": "5604ace3",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -110,7 +110,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 15,
"id": "3cedd586", "id": "3cedd586",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -150,7 +150,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": 16,
"id": "8f556b22", "id": "8f556b22",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -184,7 +184,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 6, "execution_count": 17,
"id": "37793c77", "id": "37793c77",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -222,7 +222,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 18,
"id": "f68c1a25", "id": "f68c1a25",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -279,7 +279,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 8, "execution_count": 19,
"id": "e1539eaa", "id": "e1539eaa",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -311,7 +311,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": 20,
"id": "d1b7d9ca", "id": "d1b7d9ca",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -409,7 +409,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 10, "execution_count": 21,
"id": "54d11a04", "id": "54d11a04",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
@@ -432,7 +432,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 11, "execution_count": 22,
"id": "374d0590", "id": "374d0590",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -440,36 +440,36 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Epoch 1: Loss=1.405, Accuracy=59.91%\n", "Epoch 1: Loss=1.515, Accuracy=58.09%\n",
"Epoch 2: Loss=0.880, Accuracy=69.16%\n", "Epoch 2: Loss=0.901, Accuracy=68.38%\n",
"Epoch 3: Loss=0.770, Accuracy=72.99%\n", "Epoch 3: Loss=0.786, Accuracy=72.40%\n",
"Epoch 4: Loss=0.714, Accuracy=75.05%\n", "Epoch 4: Loss=0.723, Accuracy=74.59%\n",
"Epoch 5: Loss=0.660, Accuracy=76.92%\n", "Epoch 5: Loss=0.665, Accuracy=76.57%\n",
"Epoch 6: Loss=0.629, Accuracy=78.41%\n", "Epoch 6: Loss=0.634, Accuracy=77.73%\n",
"Epoch 7: Loss=0.596, Accuracy=79.03%\n", "Epoch 7: Loss=0.602, Accuracy=78.87%\n",
"Epoch 8: Loss=0.588, Accuracy=79.40%\n", "Epoch 8: Loss=0.593, Accuracy=79.30%\n",
"Epoch 9: Loss=0.556, Accuracy=80.52%\n", "Epoch 9: Loss=0.580, Accuracy=79.91%\n",
"Epoch 10: Loss=0.543, Accuracy=81.06%\n", "Epoch 10: Loss=0.548, Accuracy=80.70%\n",
"Epoch 11: Loss=0.520, Accuracy=81.85%\n", "Epoch 11: Loss=0.535, Accuracy=80.95%\n",
"Epoch 12: Loss=0.513, Accuracy=81.94%\n", "Epoch 12: Loss=0.517, Accuracy=81.76%\n",
"Epoch 13: Loss=0.501, Accuracy=82.56%\n", "Epoch 13: Loss=0.521, Accuracy=81.70%\n",
"Epoch 14: Loss=0.485, Accuracy=82.90%\n", "Epoch 14: Loss=0.499, Accuracy=82.46%\n",
"Epoch 15: Loss=0.481, Accuracy=82.92%\n", "Epoch 15: Loss=0.488, Accuracy=82.87%\n",
"Epoch 16: Loss=0.469, Accuracy=83.50%\n", "Epoch 16: Loss=0.483, Accuracy=83.06%\n",
"Epoch 17: Loss=0.459, Accuracy=84.02%\n", "Epoch 17: Loss=0.480, Accuracy=82.94%\n",
"Epoch 18: Loss=0.453, Accuracy=83.94%\n", "Epoch 18: Loss=0.465, Accuracy=83.34%\n",
"Epoch 19: Loss=0.445, Accuracy=84.24%\n", "Epoch 19: Loss=0.464, Accuracy=83.39%\n",
"Epoch 20: Loss=0.434, Accuracy=84.77%\n", "Epoch 20: Loss=0.443, Accuracy=84.22%\n",
"Epoch 21: Loss=0.427, Accuracy=84.97%\n", "Epoch 21: Loss=0.445, Accuracy=84.40%\n",
"Epoch 22: Loss=0.412, Accuracy=85.20%\n", "Epoch 22: Loss=0.436, Accuracy=84.60%\n",
"Epoch 23: Loss=0.411, Accuracy=85.15%\n", "Epoch 23: Loss=0.417, Accuracy=85.12%\n",
"Epoch 24: Loss=0.402, Accuracy=85.52%\n", "Epoch 24: Loss=0.412, Accuracy=85.36%\n",
"Epoch 25: Loss=0.403, Accuracy=85.32%\n", "Epoch 25: Loss=0.410, Accuracy=85.11%\n",
"Epoch 26: Loss=0.393, Accuracy=85.93%\n", "Epoch 26: Loss=0.405, Accuracy=85.42%\n",
"Epoch 27: Loss=0.386, Accuracy=86.07%\n", "Epoch 27: Loss=0.402, Accuracy=85.44%\n",
"Epoch 28: Loss=0.380, Accuracy=86.28%\n", "Epoch 28: Loss=0.388, Accuracy=85.96%\n",
"Epoch 29: Loss=0.372, Accuracy=86.65%\n", "Epoch 29: Loss=0.383, Accuracy=86.22%\n",
"Epoch 30: Loss=0.362, Accuracy=87.02%\n", "Epoch 30: Loss=0.377, Accuracy=86.23%\n",
"Finished Training\n" "Finished Training\n"
] ]
} }
@@ -507,12 +507,12 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 23,
"id": "2bf2b9a2", "id": "2bf2b9a2",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"PATH = '../models/data-augmented.pth'\n", "PATH = '../../models/data-augmented.pth'\n",
"torch.save(model.state_dict(), PATH)" "torch.save(model.state_dict(), PATH)"
] ]
}, },
@@ -526,7 +526,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 13, "execution_count": 24,
"id": "bc158602", "id": "bc158602",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -534,7 +534,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Test Accuracy: 82.71%\n" "Test Accuracy: 84.17%\n"
] ]
} }
], ],
@@ -556,7 +556,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 14, "execution_count": 25,
"id": "8cc7ed40", "id": "8cc7ed40",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
@@ -564,14 +564,14 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Accuracy for class: Bicycle is 68.8%\n", "Accuracy for class: Bicycle is 77.4%\n",
"Accuracy for class: Bus is 83.2%\n", "Accuracy for class: Bus is 85.3%\n",
"Accuracy for class: Car is 78.8%\n", "Accuracy for class: Car is 86.3%\n",
"Accuracy for class: Motorcycle is 90.5%\n", "Accuracy for class: Motorcycle is 81.8%\n",
"Accuracy for class: NonVehicles is 99.7%\n", "Accuracy for class: NonVehicles is 99.8%\n",
"Accuracy for class: Taxi is 49.4%\n", "Accuracy for class: Taxi is 60.8%\n",
"Accuracy for class: Truck is 59.2%\n", "Accuracy for class: Truck is 52.8%\n",
"Accuracy for class: Van is 40.1%\n" "Accuracy for class: Van is 41.3%\n"
] ]
} }
], ],

View File

@@ -1,67 +1,8 @@
asttokens==3.0.1 torch>=2.0.0
comm==0.2.3 torchvision>=0.15.0
contourpy==1.3.3 numpy>=1.24.0
cuda-bindings==12.9.4 matplotlib>=3.7.0
cuda-pathfinder==1.2.2 Pillow>=9.0.0
cuda-toolkit==12.8.1 scikit-learn>=1.0.0
cycler==0.12.1 jupyter>=1.0.0
debugpy==1.8.20 ipykernel>=6.0.0
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

BIN
results/training_curves.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File