模型概述
模型特點
模型能力
使用案例
🚀 YOLOv8s - 手寫簽名檢測
本倉庫展示了一個基於 YOLOv8s 的模型,該模型經過微調,可用於檢測文檔圖像中的手寫簽名。
🚀 快速開始
本模型可以通過 CLI 或使用 Ultralytics 庫的 Python 代碼來使用。也可以直接使用 ONNX Runtime 或 TensorRT。
最終的權重文件可在倉庫的主目錄中找到:
yolov8s.pt
(PyTorch 格式)yolov8s.onnx
(ONNX 格式)yolov8s.engine
(TensorRT 格式)
Python 代碼
依賴安裝
pip install ultralytics supervision huggingface_hub
推理代碼
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()
請確保圖像和模型文件的路徑正確。
CLI
依賴安裝
pip install -U ultralytics "huggingface_hub[cli]"
推理命令
huggingface-cli download tech4humans/yolov8s-signature-detector yolov8s.pt
yolo predict model=yolov8s.pt source=caminho/para/imagem.jpg
參數說明:
model
:模型權重文件的路徑。source
:用於檢測的圖像或圖像目錄的路徑。
ONNX Runtime
若要進行優化推理,你可以在 handler.py 文件和 Hugging Face Space 此處 中找到使用 onnxruntime 和 OpenVINO Execution Provider 的推理代碼。
✨ 主要特性
- 精準檢測:經過微調的 YOLOv8s 模型,能有效檢測文檔圖像中的手寫簽名。
- 多格式支持:提供 PyTorch、ONNX 和 TensorRT 等多種格式的模型文件。
- 詳細實驗記錄:記錄了模型選擇、超參數調優等詳細實驗過程。
📦 安裝指南
Python 代碼依賴安裝
pip install ultralytics supervision huggingface_hub
CLI 依賴安裝
pip install -U ultralytics "huggingface_hub[cli]"
💻 使用示例
基礎用法
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()
高級用法
在實際應用中,你可以根據需求對檢測結果進行進一步處理,例如將檢測到的簽名區域進行裁剪保存等。以下是一個簡單示例:
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])
for xyxy in detections.xyxy:
x1, y1, x2, y2 = map(int, xyxy)
signature_area = image[y1:y2, x1:x2]
cv2.imwrite(f"signature_{x1}_{y1}.jpg", signature_area)
📚 詳細文檔
數據集
訓練使用了一個由兩個公共數據集構建的數據集:Tobacco800 和 signatures-xc8up,這些數據集在 Roboflow 中進行了統一和處理。
數據集摘要:
- 訓練集:1,980 張圖像(70%)
- 驗證集:420 張圖像(15%)
- 測試集:419 張圖像(15%)
- 格式:COCO JSON
- 分辨率:640x640 像素
訓練過程
1. 模型選擇
評估了各種目標檢測模型,以確定在精確率、召回率和推理時間之間達到最佳平衡的模型。
指標 | 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 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
推理時間 - 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 |
亮點
- 最佳 mAP50:
conditional-detr-resnet-50
(0.936524) - 最佳 mAP50 - 95:
yolov8m
(0.665495) - 最快推理時間:
yolov10n
(73.8596 ms)
詳細實驗可在 Weights & Biases 上查看。
2. 超參數調優
選擇了在推理時間、精確率和召回率方面表現出良好平衡的 YOLOv8s 模型進行超參數調優。
使用 Optuna 進行了 20 次優化試驗。超參數調優使用了以下參數配置:
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. 評估
在訓練結束時,以 ONNX(CPU)和 TensorRT(GPU - T4)格式在測試集上對模型進行了評估。性能指標包括精確率、召回率、mAP50 和 mAP50 - 95。
結果對比
指標 | 基礎模型 | 最佳試驗(#10) | 差異 |
---|---|---|---|
mAP50 | 87.47% | 95.75% | +8.28% |
mAP50 - 95 | 65.46% | 66.26% | +0.81% |
精確率 | 97.23% | 95.61% | -1.63% |
召回率 | 76.16% | 91.21% | +15.05% |
F1 分數 | 85.42% | 93.36% | +7.94% |
結果
在對 YOLOv8s 模型進行超參數調優後,最佳模型在測試集上取得了以下結果:
- 精確率:94.74%
- 召回率:89.72%
- mAP@50:94.50%
- mAP@50 - 95:67.35%
- 推理時間:
- ONNX Runtime(CPU):171.56 ms
- TensorRT(GPU - T4):7.657 ms
演示
你可以在基於 Gradio 和 ONNXRuntime 構建的 Hugging Face Spaces 演示中探索模型並測試即時推理。
推理服務器
如果你想在生產環境中部署此簽名檢測模型,請查看我們基於 NVIDIA Triton 推理服務器的推理服務器倉庫。
基礎設施
軟件
模型的訓練和調優使用了 Jupyter Notebook 環境。
- 操作系統: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
硬件
訓練在具有以下規格的 Google Cloud Platform n1 - standard - 8 實例上進行:
- CPU:8 vCPUs
- GPU:NVIDIA Tesla T4
🔧 技術細節
本項目圍繞手寫簽名檢測任務,採用了 YOLOv8s 作為基礎模型。在數據集方面,整合了多個公共數據集,並進行了統一和預處理。在訓練過程中,對多種目標檢測模型進行了評估,以找到精確率、召回率和推理時間的最佳平衡。同時,使用 Optuna 進行超參數調優,進一步提升了模型性能。在推理階段,支持多種格式和環境,包括 PyTorch、ONNX 和 TensorRT,以滿足不同場景的需求。
📄 許可證
模型權重(微調模型) – AGPL - 3.0
- 許可證:GNU Affero General Public License v3.0(AGPL - 3.0)
- 使用規定:從 Ultralytics 的 YOLOv8 模型派生的微調模型權重遵循 AGPL - 3.0 許可。這要求對這些模型權重的任何修改或派生作品也必須在 AGPL - 3.0 下分發,如果模型作為網絡服務的一部分使用,則必須提供相應的源代碼。
代碼、訓練、部署和數據 – Apache 2.0
- 許可證:Apache License 2.0
- 使用規定:所有額外材料,包括訓練腳本、部署代碼、使用說明和相關數據,均遵循 Apache 2.0 許可證。
有關更多詳細信息,請參閱完整的許可證文本:
- [GNU AGPL - 3.0 許可證](https://www.gnu.org/licenses/agpl - 3.0.html)
- [Apache License 2.0](https://www.apache.org/licenses/LICENSE - 2.0)
聯繫與信息
如需進一步信息、提問或貢獻,請通過 iag@tech4h.com.br 與我們聯繫。
📧 郵箱:iag@tech4h.com.br
🌐 網站:www.tech4.ai
💼 領英:Tech4Humans
作者
Samuel LimaAI 研究工程師 |
本項目職責
|
由 Tech4Humans 用心開發 💜











