YOLOv8s - Handwritten Signature Detection
This repository presents a YOLOv8s-based model, fine-tuned to detect handwritten signatures in document images.
Dataset
The training utilized a dataset built from two public datasets: Tobacco800 and signatures-xc8up, unified and processed in Roboflow.
Dataset Summary:
- Training: 1,980 images (70%)
- Validation: 420 images (15%)
- Testing: 419 images (15%)
- Format: COCO JSON
- Resolution: 640x640 pixels
Training Process
The training process involved the following steps:
1. Model Selection:
Various object detection models were evaluated to identify the best balance between precision, recall, and inference time.
Metric | rtdetr-l | yolos-base | yolos-tiny | conditional-detr-resnet-50 | detr-resnet-50 | yolov8x | yolov8l | yolov8m | yolov8s | yolov8n | yolo11x | yolo11l | yolo11m | yolo11s | yolo11n | yolov10x | yolov10l | yolov10b | yolov10m | yolov10s | yolov10n |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Inference Time - CPU (ms) | 583.608 | 1706.49 | 265.346 | 476.831 | 425.649 | 1259.47 | 871.329 | 401.183 | 216.6 | 110.442 | 1016.68 | 518.147 | 381.652 | 179.792 | 106.656 | 821.183 | 580.767 | 473.109 | 320.12 | 150.076 | 73.8596 |
mAP50 | 0.92709 | 0.901154 | 0.869814 | 0.936524 | 0.88885 | 0.794237 | 0.800312 | 0.875322 | 0.874721 | 0.816089 | 0.667074 | 0.707409 | 0.809557 | 0.835605 | 0.813799 | 0.681023 | 0.726802 | 0.789835 | 0.787688 | 0.663877 | 0.734332 |
mAP50-95 | 0.622364 | 0.583569 | 0.469064 | 0.653321 | 0.579428 | 0.552919 | 0.593976 | 0.665495 | 0.65457 | 0.623963 | 0.482289 | 0.499126 | 0.600797 | 0.638849 | 0.617496 | 0.474535 | 0.522654 | 0.578874 | 0.581259 | 0.473857 | 0.552704 |
Highlights:
- Best mAP50:
conditional-detr-resnet-50
(0.936524) - Best mAP50-95:
yolov8m
(0.665495) - Fastest Inference Time:
yolov10n
(73.8596 ms)
Detailed experiments are available on Weights & Biases.
2. Hyperparameter Tuning:
The YOLOv8s model, which demonstrated a good balance of inference time, precision, and recall, was selected for hyperparameter tuning.
Optuna was used for 20 optimization trials. Results can be visualized here: Hypertuning Experiment.
The hyperparameter tuning used the following parameter configuration:
dropout = trial.suggest_float("dropout", 0.0, 0.5, step=0.1)
lr0 = trial.suggest_float("lr0", 1e-5, 1e-1, log=True)
box = trial.suggest_float("box", 3.0, 7.0, step=1.0)
cls = trial.suggest_float("cls", 0.5, 1.5, step=0.2)
opt = trial.suggest_categorical("optimizer", ["AdamW", "RMSProp"])
3. Evaluation:
The models were evaluated on the test set at the end of training in ONNX (CPU) and TensorRT (GPU - T4) formats. Performance metrics included precision, recall, mAP50, and mAP50-95.
Results Comparison:
Metric | Base Model | Best Trial (#10) | Difference |
---|---|---|---|
mAP50 | 87.47% | 95.75% | +8.28% |
mAP50-95 | 65.46% | 66.26% | +0.81% |
Precision | 97.23% | 95.61% | -1.63% |
Recall | 76.16% | 91.21% | +15.05% |
F1-score | 85.42% | 93.36% | +7.94% |
Results
After hyperparameter tuning of the YOLOv8s model, the best model achieved the following results on the test set:
- Precision: 94.74%
- Recall: 89.72%
- mAP@50: 94.50%
- mAP@50-95: 67.35%
- Inference Time:
- ONNX Runtime (CPU): 171.56 ms
- TensorRT (GPU - T4): 7.657 ms
How to Use
The YOLOv8s
model can be used via CLI or Python code using the Ultralytics library. Alternatively, it can be used directly with ONNX Runtime or TensorRT.
The final weights are available in the main directory of the repository:
yolov8s.pt
(PyTorch format)yolov8s.onnx
(ONNX format)yolov8s.engine
(TensorRT format)
Python Code
- Dependencies
pip install ultralytics supervision huggingface_hub
- Inference
import cv2
import supervision as sv
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
model_path = hf_hub_download(
repo_id="tech4humans/yolov8s-signature-detector",
filename="yolov8s.pt"
)
model = YOLO(model_path)
image_path = "/path/to/your/image.jpg"
image = cv2.imread(image_path)
results = model(image_path)
detections = sv.Detections.from_ultralytics(results[0])
box_annotator = sv.BoxAnnotator()
annotated_image = box_annotator.annotate(scene=image, detections=detections)
cv2.imshow("Detections", annotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ensure the paths to the image and model files are correct.
CLI
- Dependencies
pip install -U ultralytics "huggingface_hub[cli]"
- Inference
huggingface-cli download tech4humans/yolov8s-signature-detector yolov8s.pt
yolo predict model=yolov8s.pt source=caminho/para/imagem.jpg
Parameters:
model
: Path to the model weights file.source
: Path to the image or directory of images for detection.
ONNX Runtime
For optimized inference, you can find the inference code using onnxruntime and OpenVINO Execution Provider in the handler.py file and on the Hugging Face Space here.
Demo
You can explore the model and test real-time inference in the Hugging Face Spaces demo, built with Gradio and ONNXRuntime.
π Inference with Triton Server
If you want to deploy this signature detection model in a production environment, check out our inference server repository based on the NVIDIA Triton Inference Server.
Infrastructure
Software
The model was trained and tuned using a Jupyter Notebook environment.
- Operating System: Ubuntu 22.04
- Python: 3.10.12
- PyTorch: 2.5.1+cu121
- Ultralytics: 8.3.58
- Roboflow: 1.1.50
- Optuna: 4.1.0
- ONNX Runtime: 1.20.1
- TensorRT: 10.7.0
Hardware
Training was performed on a Google Cloud Platform n1-standard-8 instance with the following specifications:
- CPU: 8 vCPUs
- GPU: NVIDIA Tesla T4
License
This project is licensed under the Apache License 2.0.
License Summary:
- Freedom to Use: You can use, modify, and distribute this project for any purpose (commercial or non-commercial), with minimal restrictions.
- Modification Requirements: If you redistribute this project or derivative works, you must:
- Retain all copyright/patent notices and this license text.
- Include a copy of the LICENSE file.
- Patent Grant: The license explicitly grants patent rights to users, with termination clauses for patent litigation.
For more details, refer to the full license text in the LICENSE file or visit the official license page here.
Contact and Information
For further information, questions, or contributions, contact us at [email protected].
π§ Email: [email protected]
π Website: www.tech4.ai
πΌ LinkedIn: Tech4Humans
Author
Samuel LimaAI Research Engineer |
Responsibilities in this Project
|
Developed with β€οΈ by Tech4Humans
- Downloads last month
- 16
Model tree for tech4humans/yolov8s-signature-detector
Base model
Ultralytics/YOLOv8Dataset used to train tech4humans/yolov8s-signature-detector
Space using tech4humans/yolov8s-signature-detector 1
Collection including tech4humans/yolov8s-signature-detector
Evaluation results
- [email protected] on tech4humans/signature-detectiontest set self-reported0.945
- [email protected]:0.95 on tech4humans/signature-detectiontest set self-reported0.673
- precision on tech4humans/signature-detectiontest set self-reported0.947
- recall on tech4humans/signature-detectiontest set self-reported0.897
- f1 on tech4humans/signature-detectiontest set self-reported0.922