Computer vision research and model development for detecting and classifying military aircraft from imagery, completed as a multi-week defense AI internship project.
This repository documents a five-week computer vision project focused on military aircraft recognition. The work progresses from surveying defense-relevant datasets and preparing training data to fine-tuning YOLO-based object-detection models and experimenting with a separate aircraft-classification pipeline.
The project began with broad research into overhead imagery, ISR, RF/waveform, SAR, and radar datasets. It then narrowed to the Military Aircraft Detection Dataset, where aircraft imagery and annotations were prepared for YOLO training.
By the end of the project, the team had:
- Researched and documented multiple aerospace, ISR, RF, SAR, and radar datasets.
- Prepared YOLO-compatible aircraft datasets and train/validation splits.
- Built an initial detector around nine U.S. military aircraft classes.
- Fine-tuned YOLO models and experimented with hyperparameter tuning.
- Identified and corrected an early bounding-box labeling problem.
- Expanded detection training from a small aircraft subset to 80+ aircraft types using the dataset's original annotations.
- Explored a separate large-scale aircraft classification workflow.
- Produced trained weights, notebooks, preprocessing utilities, reports, and training-result visualizations.
Dataset Research
↓
Dataset Selection
↓
Download + Cleaning
↓
Annotation Conversion
↓
Train / Validation Split
↓
YOLO Fine-Tuning
↓
Hyperparameter Experiments
↓
Detection Evaluation
↓
Expanded 80+ Class Training
↓
Aircraft Classification Experiments
The first phase explored data sources relevant to defense-oriented computer vision and sensing.
Areas investigated included:
- Drone / overhead / ISR imagery
- Military aircraft imagery
- Optical satellite imagery
- SAR imagery
- RF signal and waveform datasets
- Automotive and scene radar datasets
Examples documented in the repository include UAVDT, VisDrone, DOTA, Noisy Drone RF, TorchSig, RadioML, BigEarthNet, MAR20, HRSID, RADIATE, RadarScenes, and the Military Aircraft Detection Dataset.
See week 1/.
Aircraft imagery and annotation samples were collected and inspected for classes including the F-15, F-16, and F/A-18. The repository contains example image sets and both standard and oriented bounding-box label formats used during the exploration stage.
See week 2/.
The team prepared a YOLO-ready dataset by organizing aircraft images, generating labels, and creating the train/validation split required for training.
The initial target set contained nine U.S. military aircraft:
| Class | Aircraft |
|---|---|
| 0 | F-15 |
| 1 | F-16 |
| 2 | F/A-18 |
| 3 | F-22 |
| 4 | F-35 |
| 5 | B-1 |
| 6 | B-2 |
| 7 | C-17 |
| 8 | C-130 |
Roughly 9,000 images were prepared during this stage.
See week 3/Preparing_the_Data_Week3.ipynb.
Each team member ran individual fine-tuning experiments using the Week 3 dataset. The work included:
- Pretrained YOLO model initialization
- Dataset configuration
- Hyperparameter tuning
- Training and validation
- Model comparison and documentation
The team reported approximately 95% average accuracy during the initial experiments. However, the early dataset-generation method labeled the entire cropped image as the aircraft bounding box. This inflated the usefulness of the early result for true localization, and the issue was explicitly identified for correction.
My individual notebook includes an experiment focused on F-15, F-16, and F/A-18 imagery.
The final detection phase switched to the dataset's existing annotations instead of treating the full image as the bounding box. CSV annotations were converted into YOLO-compatible text labels, and the model was trained on the full dataset with 80+ aircraft types.
Training was performed in multiple stages, beginning with 20 epochs and continuing for another 20 epochs after the model was still improving.
The final week also contains a separate aircraft-classification experiment and preprocessing utilities written in both Python and Go.
See:
The Week 5 detection directory contains the final training notebooks, model weights, and Ultralytics training plots.
Model artifacts currently included in the repository:
week 5/detection/best.pt· detection weightsweek 4/Faisal Durbaa/best.pt· earlier fine-tuned weights- Classification weights are linked from
week5/classfication/readme.md
vanguard-defense-internship-project/
├── week 1/
│ ├── README.md
│ ├── datasets.csv
│ └── datasets/
│ ├── dataset configuration files
│ └── conversion / generation scripts
│
├── week 2/
│ ├── F15/
│ ├── F16/
│ └── F18/
│ ├── images
│ └── labels
│
├── week 3/
│ ├── README.md
│ └── Preparing_the_Data_Week3.ipynb
│
├── week 4/
│ ├── README.md
│ ├── Tanuj Ranjith/
│ ├── Faisal Durbaa/
│ └── philip/
│
├── week 5/
│ └── detection/
│ ├── YOLOv8_Fine_Tuning_*.ipynb
│ ├── best.pt
│ └── results.png
│
└── week5/
├── classfication/
│ ├── cls-large-model-training.ipynb
│ └── example outputs
└── scripts/
├── Go preprocessing utilities
└── Python helpers
| Technology | Use |
|---|---|
| Python | Dataset preparation, training, preprocessing, experimentation |
| Ultralytics YOLO | Object detection and model fine-tuning |
| PyTorch | Deep-learning backend |
| Jupyter / Colab | Interactive experimentation and training notebooks |
| Kaggle / KaggleHub | Dataset acquisition |
| split-folders | Train/validation dataset splitting |
| YAML | YOLO dataset configuration |
| Go | High-speed preprocessing and dataset utility scripts |
git clone https://github.com/tanujranjith/vanguard-defense-internship-project.git
cd vanguard-defense-internship-projectpython -m venv .venvActivate it, then install the main project dependencies:
pip install ultralytics torch torchvision kagglehub split-folders pandas pyyaml jupyterjupyter notebookThe project was developed experimentally across multiple weeks, so paths inside older notebooks may need to be updated for your local machine or Colab environment.
from ultralytics import YOLO
model = YOLO("week 5/detection/best.pt")
results = model("path/to/aircraft-image.jpg")
results[0].show()The Week 4 experiment exposed an important failure mode: because cropped images were automatically labeled with boxes covering the entire frame, a model could obtain a strong metric without learning precise aircraft localization. The later workflow corrected this by using the dataset's original bounding-box annotations.
The project evolved into two related tasks:
- Detection: locate aircraft in an image and identify their type.
- Classification: classify an already isolated aircraft image into a type.
Keeping these pipelines separate makes evaluation more meaningful and allows each model to be optimized for its own task.
Moving from a small set of visually distinct U.S. aircraft to more than 80 aircraft types substantially increases class similarity, imbalance, and fine-grained recognition difficulty. The Week 5 work reflects that shift from a proof of concept toward a broader recognition system.
- The repository is an internship/research project rather than a production inference service.
- Dataset downloads are large and are not fully stored in the repository.
- Some notebooks contain environment-specific paths from Windows or Google Colab.
- Early Week 3/4 labels used full-image bounding boxes and should not be treated as high-quality localization ground truth.
- The repository currently does not include a single pinned dependency file or reproducible end-to-end training command.
Project work includes contributions from:
- Tanuj Ranjith
- Faisal Durbaa
- Philip
Developed as part of the Vanguard Defense internship project.
From dataset research to fine-grained military aircraft recognition.
