samuellimabraz's picture
fix: correct link for W&B reports
cf39801 verified
---
license: apache-2.0
base_model:
- Ultralytics/YOLOv8
pipeline_tag: object-detection
datasets:
- tech4humans/signature-detection
metrics:
- f1
- precision
- recall
library_name: ultralytics
library_version: 8.0.239
inference: false
tags:
- object-detection
- signature-detection
- yolo
- yolov8
- pytorch
model-index:
- name: tech4humans/yolov8s-signature-detector
results:
- task:
type: object-detection
dataset:
type: tech4humans/signature-detection
name: tech4humans/signature-detection
split: test
metrics:
- type: precision
value: 0.94499
name: [email protected]
- type: precision
value: 0.6735
name: [email protected]:0.95
- type: precision
value: 0.947396
name: precision
- type: recall
value: 0.897216
name: recall
- type: f1
value: 0.921623
language:
- pt
---
# **YOLOv8s - Handwritten Signature Detection**
This repository presents a YOLOv8s-based model, fine-tuned to detect handwritten signatures in document images.
---
## **Dataset**
<table>
<tr>
<td style="text-align: center; padding: 10px;">
<a href="https://universe.roboflow.com/tech-ysdkk/signature-detection-hlx8j">
<img src="https://app.roboflow.com/images/download-dataset-badge.svg">
</a>
</td>
<td style="text-align: center; padding: 10px;">
<a href="https://huggingface.co/datasets/tech4humans/signature-detection">
<img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/dataset-on-hf-md.svg" alt="Dataset on HF">
</a>
</td>
</tr>
</table>
The training utilized a dataset built from two public datasets: [Tobacco800](https://paperswithcode.com/dataset/tobacco-800) and [signatures-xc8up](https://universe.roboflow.com/roboflow-100/signatures-xc8up), unified and processed in [Roboflow](https://roboflow.com/).
**Dataset Summary:**
- Training: 1,980 images (70%)
- Validation: 420 images (15%)
- Testing: 419 images (15%)
- Format: COCO JSON
- Resolution: 640x640 pixels
![Roboflow Dataset](./assets/roboflow_ds.png)
---
## **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](https://github.com/ultralytics/assets/releases/download/v8.2.0/rtdetr-l.pt) | [yolos-base](https://huggingface.co/hustvl/yolos-base) | [yolos-tiny](https://huggingface.co/hustvl/yolos-tiny) | [conditional-detr-resnet-50](https://huggingface.co/microsoft/conditional-detr-resnet-50) | [detr-resnet-50](https://huggingface.co/facebook/detr-resnet-50) | [yolov8x](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x.pt) | [yolov8l](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l.pt) | [yolov8m](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m.pt) | [yolov8s](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt) | [yolov8n](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt) | [yolo11x](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x.pt) | [yolo11l](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l.pt) | [yolo11m](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m.pt) | [yolo11s](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt) | [yolo11n](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt) | [yolov10x](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov10x.pt) | [yolov10l](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov10l.pt) | [yolov10b](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov10b.pt) | [yolov10m](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov10m.pt) | [yolov10s](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov10s.pt) | [yolov10n](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov10n.pt) |
|:---------------------|---------:|-----------:|-----------:|---------------------------:|---------------:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|--------:|---------:|---------:|---------:|---------:|---------:|---------:|
| **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 |
![Model Selection](./assets/model_selection.png)
#### 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**](https://api.wandb.ai/links/samuel-lima-tech4humans/30cmrkp8).
### 2. **Hyperparameter Tuning:**
The YOLOv8s model, which demonstrated a good balance of inference time, precision, and recall, was selected for hyperparameter tuning.
[Optuna](https://optuna.org/) was used for 20 optimization trials.
The hyperparameter tuning used the following parameter configuration:
```python
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"])
```
Results can be visualized here: [**Hypertuning Experiment**](https://api.wandb.ai/links/samuel-lima-tech4humans/31a6zhb1).
![Hypertuning Sweep](./assets/sweep.png)
### 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.
![Trials](./assets/trials.png)
#### 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](https://github.com/ultralytics/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`](yolov8s.pt) (PyTorch format)
- [`yolov8s.onnx`](yolov8s.onnx) (ONNX format)
- [`yolov8s.engine`](yolov8s.engine) (TensorRT format)
### Python Code
- Dependencies
```bash
pip install ultralytics supervision huggingface_hub
```
- Inference
```python
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
```bash
pip install -U ultralytics "huggingface_hub[cli]"
```
- Inference
```bash
huggingface-cli download tech4humans/yolov8s-signature-detector yolov8s.pt
```
```bash
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](https://onnxruntime.ai/docs/) and [OpenVINO Execution Provider](https://onnxruntime.ai/docs/execution-providers/OpenVINO-ExecutionProvider.html) in the [handler.py](handler.py) file and on the Hugging Face Space [here](https://huggingface.co/spaces/tech4humans/signature-detection).
---
## **Demo**
You can explore the model and test real-time inference in the Hugging Face Spaces demo, built with Gradio and ONNXRuntime.
[![Open in Spaces](https://huggingface.co/datasets/huggingface/badges/resolve/main/open-in-hf-spaces-md.svg)](https://huggingface.co/spaces/tech4humans/signature-detection)
---
## πŸ”— **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.
<table>
<tr>
<td>
<a href="https://github.com/triton-inference-server/server"><img src="https://img.shields.io/badge/Triton-Inference%20Server-76B900?style=for-the-badge&labelColor=black&logo=nvidia" alt="Triton Badge" /></a>
</td>
<td>
<a href="https://github.com/tech4ai/t4ai-signature-detect-server"><img src="https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white" alt="GitHub Badge" /></a>
</td>
</tr>
</table>
---
## **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](https://huggingface.co/datasets/choosealicense/licenses/blob/main/markdown/apache-2.0.md) 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](https://huggingface.co/datasets/choosealicense/licenses/blob/main/markdown/apache-2.0.md) file or visit the official license page [here](https://www.apache.org/licenses/LICENSE-2.0).
---
## **Contact and Information**
For further information, questions, or contributions, contact us at **[email protected]**.
<div align="center">
<p>
πŸ“§ <b>Email:</b> <a href="mailto:[email protected]">[email protected]</a><br>
🌐 <b>Website:</b> <a href="https://www.tech4.ai/">www.tech4.ai</a><br>
πŸ’Ό <b>LinkedIn:</b> <a href="https://www.linkedin.com/company/tech4humans-hyperautomation/">Tech4Humans</a>
</p>
</div>
## **Author**
<div align="center">
<table>
<tr>
<td align="center" width="140">
<a href="https://huggingface.co/samuellimabraz">
<img src="https://avatars.githubusercontent.com/u/115582014?s=400&u=c149baf46c51fdee45ad5344cf1b360236d90d09&v=4" width="120" alt="Samuel Lima"/>
<h3>Samuel Lima</h3>
</a>
<p><i>AI Research Engineer</i></p>
<p>
<a href="https://huggingface.co/samuellimabraz">
<img src="https://img.shields.io/badge/πŸ€—_HuggingFace-samuellimabraz-orange" alt="HuggingFace"/>
</a>
</p>
</td>
<td width="500">
<h4>Responsibilities in this Project</h4>
<ul>
<li>πŸ”¬ Model development and training</li>
<li>πŸ“Š Dataset analysis and processing</li>
<li>βš™οΈ Hyperparameter optimization and performance evaluation</li>
<li>πŸ“ Technical documentation and model card</li>
</ul>
</td>
</tr>
</table>
</div>
---
<div align="center">
<p>Developed with ❀️ by <a href="https://www.tech4.ai/">Tech4Humans</a></p>
</div>