113 lines
2.5 KiB
Markdown
113 lines
2.5 KiB
Markdown
# YOLOv8 Training & Testing Guide
|
|
|
|
This guide details how to prepare your dataset, train the YOLOv8 model for Potholes and Road Signs, and test the trained model.
|
|
|
|
## 1. Dataset Preparation
|
|
|
|
YOLOv8 requires data in a specific format.
|
|
|
|
### A. Data Structure
|
|
|
|
Organize your dataset folder like this:
|
|
|
|
```
|
|
datasets/
|
|
road_signs_potholes/
|
|
train/
|
|
images/
|
|
img1.jpg
|
|
...
|
|
labels/
|
|
img1.txt
|
|
...
|
|
val/
|
|
images/
|
|
...
|
|
labels/
|
|
...
|
|
data.yaml
|
|
```
|
|
|
|
### B. Label Format
|
|
|
|
Each `.txt` file in `labels/` corresponds to an image.
|
|
Format: `class_id center_x center_y width height` (normalized 0-1).
|
|
|
|
Example `img1.txt`:
|
|
|
|
```
|
|
0 0.5 0.5 0.2 0.3
|
|
1 0.1 0.1 0.05 0.1
|
|
```
|
|
|
|
**Class IDs Mapping (Example):**
|
|
|
|
- `0`: Traffic Sign
|
|
- `1`: Pothole
|
|
- `2`: Manhole
|
|
|
|
### C. Creating `data.yaml`
|
|
|
|
Create a `data.yaml` file inside your dataset folder (or anywhere accessible).
|
|
|
|
```yaml
|
|
path: ../datasets/road_signs_potholes # dataset root dir
|
|
train: train/images # train images (relative to 'path')
|
|
val: val/images # val images (relative to 'path')
|
|
|
|
# Classes
|
|
names:
|
|
0: Traffic Sign
|
|
1: Pothole
|
|
2: Manhole
|
|
```
|
|
|
|
## 2. Training the Model
|
|
|
|
We have provided a script `backend/models/train_yolo.py`.
|
|
|
|
**Command:**
|
|
Open your terminal in `d:\Time-Pass-Projects\pothole-roadsign detection`.
|
|
|
|
```bash
|
|
# Activate your environment if needed
|
|
python backend/models/train_yolo.py
|
|
```
|
|
|
|
_Note: You will need to edit `backend/models/train_yolo.py` slightly to point to your actual `data.yaml` path if you haven't already, or pass it as an argument if you modify the script to accept args._
|
|
|
|
**Training Process:**
|
|
|
|
1. The script downloads `yolov8n.pt` (nano) as a starting point.
|
|
2. It runs for 50 epochs (adjustable).
|
|
3. **Result:** Weights are saved in `runs/detect/train/weights/best.pt`.
|
|
|
|
## 3. Testing the Model
|
|
|
|
Once trained, you should test it visually.
|
|
|
|
### A. Locate your specific model
|
|
|
|
Find `runs/detect/trainX/weights/best.pt`.
|
|
Copy this file to `backend/models/best.pt` (or update paths in scripts).
|
|
|
|
### B. Run the Test Script
|
|
|
|
We have created `backend/test_model.py` for quick verification.
|
|
|
|
```bash
|
|
python backend/test_model.py
|
|
```
|
|
|
|
_Make sure to update the `video_path` or `image_path` in `test_model.py` to point to a real file._
|
|
|
|
## 4. Integration
|
|
|
|
After you are satisfied with `best.pt`:
|
|
|
|
1. Move `best.pt` to `backend/models/`.
|
|
2. Updates `backend/pipelines/video_processor.py` line 10:
|
|
```python
|
|
self.yolo = YOLOManager("backend/models/best.pt")
|
|
```
|