Files
saw_mill_knot_detection/README.md

216 lines
5.9 KiB
Markdown
Raw Normal View History

2025-12-22 14:20:32 -07:00
# Saw Mill Knot Detection (YOLOX/YOLO)
2025-12-22 14:20:32 -07:00
This repository contains a complete wood defect detection system using YOLOX/YOLO models, trained to detect 10 different types of wood surface defects. The system includes a web-based annotation GUI, automated training pipeline, and is optimized for deployment on OAK-D cameras.
2025-12-22 14:20:32 -07:00
## 🎯 Project Overview
2025-12-22 14:20:32 -07:00
- **Model**: YOLOX-nano (Ultralytics YOLO framework)
- **Dataset**: 20,276 wood surface defect images with 10 defect categories
- **Training**: 5 epochs, mAP50: 0.612, mAP50-95: 0.357
- **Deployment Target**: OAK-D 4 Pro camera
- **Framework**: Ultralytics 8.3.240
2025-12-22 14:20:32 -07:00
## 📊 Dataset Information
2025-12-22 14:20:32 -07:00
**Source**: [Kaggle Wood Surface Defects Dataset](https://www.kaggle.com/datasets/kirs0816/wood-surface-defects)
**Classes** (10 total):
- Live knot
- Dead knot
- Knot with crack
- Crack
- Resin
- Marrow
- Quartzity
- Knot missing
- Blue stain
- Overgrown
**Dataset Split**:
- Train: 16,220 images
- Valid: 2,027 images
- Test: 2,029 images
2025-12-22 14:20:32 -07:00
**Format**: YOLO format (images/ and labels/ subdirectories with data.yaml configuration)
2025-12-22 14:20:32 -07:00
## 🚀 Quick Start
2025-12-22 14:20:32 -07:00
### 1. Environment Setup
```bash
2025-12-22 14:20:32 -07:00
# Clone the repository
git clone git@143.244.157.110:dillon_stuff/saw_mill_knot_detection.git
cd saw_mill_knot_detection
# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -U pip
pip install ultralytics gradio
```
2025-12-22 14:20:32 -07:00
### 2. Download Dataset
The dataset is not included in the repository due to size. Download from Kaggle and organize as follows:
```bash
2025-12-22 14:20:32 -07:00
# Download from Kaggle (requires Kaggle API)
kaggle datasets download -d kirs0816/wood-surface-defects
unzip wood-surface-defects.zip
# Run the dataset preparation script
python split_coco_dataset.py
python reorganize_dataset.py
```
2025-12-22 14:20:32 -07:00
### 3. Launch Annotation GUI
```bash
2025-12-22 14:20:32 -07:00
python annotation_gui.py
```
2025-12-22 14:20:32 -07:00
Open http://localhost:7860 in your browser to access the web-based annotation interface with:
- Image navigation with index display
- Auto-labeling with trained YOLOX model
- Manual annotation tools
- Real-time result visualization
2025-12-22 14:20:32 -07:00
### 4. Train Model
```bash
2025-12-22 14:20:32 -07:00
python train_yolox.py --dataset-dir dataset_split --model yolox-nano --epochs 5 --batch-size 4
```
2025-12-22 14:20:32 -07:00
## 📁 Project Structure
2025-12-22 14:20:32 -07:00
```
saw_mill_knot_detection/
├── annotation_gui.py # Gradio web interface for annotation
├── train_yolox.py # YOLOX training script
├── split_coco_dataset.py # Dataset splitting utility
├── reorganize_dataset.py # Dataset reorganization to YOLO format
├── config.py # Configuration settings
├── dataset_split/ # Training data (excluded from git)
│ ├── train/
│ │ ├── images/ # Training images
│ │ └── labels/ # YOLO format labels
│ ├── valid/
│ │ ├── images/ # Validation images
│ │ └── labels/ # YOLO format labels
│ ├── test/
│ │ ├── images/ # Test images
│ │ └── labels/ # YOLO format labels
│ └── data.yaml # YOLO dataset configuration
├── runs/ # Training outputs (excluded from git)
│ └── yolox_training/
│ └── training/
│ └── weights/
│ ├── best.pt # Best model weights
│ └── last.pt # Latest model weights
├── bbox_coco_dataset.json # Original COCO annotations
├── requirements.txt # Python dependencies
├── .gitignore # Excludes large data files
└── README.md # This file
```
2025-12-22 14:20:32 -07:00
## 🛠️ Usage Guide
2025-12-22 14:20:32 -07:00
### Annotation GUI Features
2025-12-22 14:20:32 -07:00
The Gradio-based annotation interface provides:
2025-12-22 14:20:32 -07:00
- **Image Navigation**: Browse through dataset with current index display
- **Auto-Labeling**: One-click defect detection using trained YOLOX model
- **Manual Annotation**: Draw bounding boxes for corrections
- **Real-time Visualization**: Immediate display of detection results
- **Export Options**: Save annotations in multiple formats
2025-12-22 14:20:32 -07:00
### Training
```bash
2025-12-22 14:20:32 -07:00
# Basic training
python train_yolox.py --dataset-dir dataset_split --model yolox-nano --epochs 10
# Advanced training with custom parameters
python train_yolox.py \
--dataset-dir dataset_split \
--model yolox-nano \
--epochs 20 \
--batch-size 8 \
--img-size 640
```
2025-12-22 14:20:32 -07:00
### Inference
2025-12-22 14:20:32 -07:00
```python
from ultralytics import YOLO
2025-12-22 14:20:32 -07:00
# Load trained model
model = YOLO('runs/yolox_training/training/weights/best.pt')
2025-12-22 14:20:32 -07:00
# Predict on image
results = model.predict('path/to/image.jpg', conf=0.4)
# Process results
for result in results:
boxes = result.boxes # Bounding boxes
for box in boxes:
cls = int(box.cls) # Class index
conf = float(box.conf) # Confidence score
xyxy = box.xyxy.tolist()[0] # Box coordinates
```
2025-12-22 14:20:32 -07:00
## 🔧 Configuration
Key settings in `config.py`:
2025-12-22 14:20:32 -07:00
```python
DEFAULT_MODEL_WEIGHTS = "runs/yolox_training/training/weights/best.pt"
DEFAULT_IMAGES_DIR = "IMAGE/"
WOOD_DEFECT_CLASSES = [
'Live knot', 'Dead knot', 'Knot with crack', 'Crack',
'Resin', 'Marrow', 'Quartzity', 'Knot missing',
'Blue stain', 'Overgrown'
]
```
2025-12-22 14:20:32 -07:00
## 📈 Model Performance
2025-12-22 14:20:32 -07:00
**YOLOX-nano Results** (5 epochs):
- mAP50: 0.612
- mAP50-95: 0.357
- Precision: 0.68
- Recall: 0.55
2025-12-22 14:20:32 -07:00
## 🎯 Deployment on OAK-D
The trained model can be exported for OAK-D deployment:
```python
from ultralytics import YOLO
# Load and export model
model = YOLO('runs/yolox_training/training/weights/best.pt')
model.export(format='onnx') # Export to ONNX for OAK-D
```
2025-12-22 14:20:32 -07:00
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Test thoroughly
5. Submit a pull request
## 📄 License
This project uses the Kaggle Wood Surface Defects dataset. Please refer to the original dataset license for usage terms.
## 🙏 Acknowledgments
- Kaggle for providing the wood surface defects dataset
- Ultralytics for the YOLO framework
- Gradio for the web interface framework