實戰 | YOLOv10 自定義數據集訓練實現車牌檢測 (數據集+訓練+預測 保姆級教程)

導讀

????本文主要介紹如何使用YOLOv10在自定義數據集訓練實現車牌檢測 (數據集+訓練+預測 保姆級教程)。??

YOLOv10簡介

? ? YOLOv10是清華大學研究人員在Ultralytics Python包的基礎上,引入了一種新的實時目標檢測方法,解決了YOLO以前版本在后處理和模型架構方面的不足。通過消除非最大抑制(NMS)和優化各種模型組件,YOLOv10在降低計算像素數的同時實現了相當的性能。大量實驗證明,YOLOv10在多個模型上實現了卓越的精度-延遲權衡。

圖片

概述

????實時目標檢測旨在優先延遲準確的預測圖像中的物體類別和位置。YOLO 系列在性能和效率之間取得了平衡,因此一直處于較低水平。然而,對 NMS 的依賴和架構的低效阻礙了性能的實現。YOLOv10 通過為無 NMS 訓練引入了一致的雙重分配并以提高準確性為導向的核心模型設計策略,解決了答案。

網絡架構

??? YOLOv10 的結構建立在以前YOLO模型的基礎上,同時引入了幾項關鍵創新。模型架構由以下部分組成:

    • 主干網:?YOLOv10中的主干網負責特征提取,它使用了增強版的CSPNet(跨階段部分網絡),以改善梯度流并減少計算能力。

    • 頸部:頸部設計用于匯聚不同的尺度成果,并將其傳遞到頭部。它包括PAN(路徑聚合網絡)層,可實現有效的多尺度特征融合。

    • 一對多頭:在訓練過程中為每個對象生成多個預測,以提供豐富的監督信號并提高學習準確性。

    • 一頭:在推理過程中選擇一個對象,無需NMS,從而減少并提高結果質量。

主要功能

    • 無NMS 模式:利用一致的配置來消除對NMS 的需求,從而減少錯誤判斷。

    • 整體模型設計:從業人員績效評估和績效評價模塊,包括輕量級數據分析、通道去耦和質量引導設計。

    • 增強的模型功能:應對大數據和部分自覺模塊,在不增加大量計算成本的情況下提高性能。

模型支持:

YOLOv10有多種模型,可滿足不同的應用需求:

    • YOLOv10-N:用于資源極其有限的環境的納米版本。

    • YOLOv10-S:兼顧速度和精度的小型版本。

    • YOLOv10-M:通用中型版本。

    • YOLOv10-B:平衡型,寬度增加,精度更高。

    • YOLOv10-L:大型版本,精度更高,但計算資源增加。

    • YOLOv10-X:超大型版本可實現高精度和性能。

特性

????在準確性和效率方面,YOLOv10 優于YOLO 以前的版本和其他模型。例如,在 COCO 數據集上,YOLOv10-S 的速度是 RT-DETR-R18 的 1.8 倍,而 YOLOv10-B 與 YOLOv9-C 相比,在性能相同的條件下,延遲瀏覽器打開 46%,參數瀏覽器打開 25%。下圖是使用 TensorRT FP16 在 T4 GPU 上的測試結果:

圖片

實驗和結果

??? YOLOv10 在 COCO 等標準基準上進行了廣泛測試,證明了卓越的性能和準確性。與先前的版本和其他當代版本相比,YOLOv10 在延遲和準確性方面都有顯著提高。

圖片

? ? ??

YOLOv10自定義數據集訓練

? ??【1】準備數據集。數據集標注使用LabelImg,具體使用和標注可參考下面文章:

實戰 | YOLOv8自定義數據集訓練實現手勢識別 (標注+訓練+預測 保姆級教程)

????這里直接給出數據集,大家可以自行下載:

https://github.com/AarohiSingla/YOLOv10-Custom-Object-Detection/tree/main/custom_dataset/dataset

????數據集包含300張圖片樣本,訓練集210張,驗證集60張,測試集30張。

圖片

圖片

圖片

圖片

圖片

????類別只有1類,所以序號都為0。

? ??【2】配置訓練環境。

????①?下載yoloV10項目:

git clone https://github.com/THU-MIG/yolov10.git

????②?解壓后切換到yoloV10目錄下,安裝依賴項:

cd yolov10
pip install .

????③?下載預訓練模型:

圖片

import osimport urllib.request
# Create a directory for the weights in the current working directoryweights_dir = os.path.join(os.getcwd(), "weights")os.makedirs(weights_dir, exist_ok=True)
# URLs of the weight filesurls = [    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10n.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10s.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10m.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10b.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10x.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10l.pt"]
# Download each filefor url in urls:    file_name = os.path.join(weights_dir, os.path.basename(url))    urllib.request.urlretrieve(url, file_name)    print(f"Downloaded {file_name}")

圖片

????【3】模型訓練

yolo task=detect mode=train epochs=100 batch=16 plots=True model=weights/yolov10n.pt data=custom_data.yaml

??? custom_data.yaml配置如下:

圖片

????【4】?模型推理:

????圖片推理:

yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=test_images_1/veh2.jpg

???????

from ultralytics import YOLOv10import supervision as svimport cv2
classes = {0: 'licence'}
model = YOLOv10('runs/detect/train/weights/best.pt')image  = cv2.imread('test_images_1/veh2.jpg')
results = model(source=image, conf=0.25, verbose=False)[0]detections = sv.Detections.from_ultralytics(results)box_annotator = sv.BoxAnnotator()
labels = [    f"{classes[class_id]} {confidence:.2f}"    for class_id, confidence in zip(detections.class_id, detections.confidence)]annotated_image = box_annotator.annotate(    image.copy(), detections=detections, labels=labels)
cv2.imshow('result', annotated_image)cv2.waitKey()cv2.destroyAllWindows()

圖片

? ? 視頻推理:

yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=b.mp4
from ultralytics import YOLOv10import supervision as svimport cv2
classes = {0: 'licence'}
model = YOLOv10('runs/detect/train/weights/best.pt')
def predict_and_detect(image):    results = model(source=image, conf=0.25, verbose=False)[0]    detections = sv.Detections.from_ultralytics(results)    box_annotator = sv.BoxAnnotator()
    labels = [        f"{classes[class_id]} {confidence:.2f}"        for class_id, confidence in zip(detections.class_id, detections.confidence)    ]    annotated_image = box_annotator.annotate(        image.copy(), detections=detections, labels=labels    )    return annotated_image
def create_video_writer(video_cap, output_filename):    # grab the width, height, and fps of the frames in the video stream.    frame_width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH))    frame_height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))    fps = int(video_cap.get(cv2.CAP_PROP_FPS))    # initialize the FourCC and a video writer object    fourcc = cv2.VideoWriter_fourcc(*'MP4V')    writer = cv2.VideoWriter(output_filename, fourcc, fps,                             (frame_width, frame_height))    return writer
video_path = 'b.mp4'cap = cv2.VideoCapture(video_path)
output_filename = "out.mp4"writer = create_video_writer(cap, output_filename)
while True:    success, img = cap.read()    if not success:        break    frame = predict_and_detect(img)    writer.write(frame)    cv2.imshow("frame", frame)        if cv2.waitKey(1)&0xFF ==27: #按下Esc鍵退出        break
cap.release()writer.release()

圖片

—THE END—

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24577.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

規范系統運維:系統性能監控與優化的重要性與實踐

在當今這個高度信息化的時代,企業的IT系統運維工作顯得尤為關鍵。其中,系統性能監控和優化是運維工作中不可或缺的一環。本文旨在探討規范系統運維中系統性能監控與優化的重要性,并分享一些實踐經驗和策略。 一、系統性能監控與優化的重要性…

RAGFlow 學習筆記

RAGFlow 學習筆記 0. 引言1. RAGFlow 支持的文檔格式2. 嵌入模型選擇后不再允許改變3. 干預文件解析?4. RAGFlow 與其他 RAG 產品有何不同? ?5. RAGFlow 支持哪些語言? ?6. 哪些嵌入模型可以本地部署? ?7. 為什么RAGFlow解析文檔的時間比…

自動化裝箱封箱解決方案:深度探討其優勢及故障處理技巧

在當今這個快節奏、高效率的時代,自動化裝箱封箱解決方案以其獨特的優勢,正逐漸成為物流、倉儲等行業的新寵。它不僅能大幅提升作業效率,還能顯著降低人工成本,減少人為錯誤。星派將深度探討自動化裝箱封箱技術的顯著優勢&#xf…

【Vue】練習-mutations的減法功能

文章目錄 一、需求二、完整代碼 一、需求 步驟 二、完整代碼 Son1.vue <template><div class"box"><h2>Son1 子組件</h2>從vuex中獲取的值: <label>{{ $store.state.count }}</label><br><button click"handleA…

C# 界面控件中英切換

編程軟件:VS 2015 需求:界面有兩個按鈕&#xff0c;點擊可以將界面上所有控件進行不同語言的切換。 一共兩種方案&#xff0c;個人認為第二種方案使用范圍更廣&#xff08;這里以中英文切換為例&#xff09;。 方案一:如圖所示&#xff0c;建立兩個資源文件 將所需控件的中英…

海思SS928(SD3403)部署YOLOv5-YOLOv7步驟詳解

1. YOLO模型資料 本文檔內容以yolov5-7.0工程、yolov5s模型為例。 a. 模型結構 詳細的模型結構可以利用netron工具打開.pt或.onnx模型查看。 b. 模型參數即驗證結果 其中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x為五種類型的預訓練模型,其包含的檢測類別相…

利用Pandas進行數據清洗與過濾:Python實戰指南

利用Pandas進行數據清洗與過濾&#xff1a;Python實戰指南 作為一個Python愛好者和數據分析從業者&#xff0c;我一直在探索如何利用Python來更高效地處理和分析數據。Python語言以其簡單易學、功能強大的特點&#xff0c;成為了數據分析領域的寵兒。本文將分享一些實用的Pyth…

2024 cicsn ezbuf

文章目錄 參考protobuf逆向學習復原結構思路exp 參考 https://www.y4ng.cn/posts/pwn/protobuf/#ciscn-2024-ezbuf protobuf 當時壓根不知道用了protobuf這個玩意&#xff0c;提取工具也沒提取出來&#xff0c;還是做題做太少了&#xff0c;很多關鍵性的結構都沒看出來是pro…

android 異屏同顯---學習筆記

實現 Android 異屏同顯(多個屏幕顯示同樣的畫面)可以通過多種方法來完成,具體實現方式會根據你的需求和設備的支持情況有所不同。以下是幾種常見的方法: 方法 1:使用 Cast SDK 如果你想要將內容投屏到智能電視或其他支持 Cast 的設備上,可以使用 Google Cast SDK。 主…

Unity 集成 FMOD 音頻管理插件 2.02

Unity 集成 FMOD 音頻管理插件 2.02 3. 集成教程&#xff1a;3.1 設置Unity項目3.2 設置FMOD項目3.3 設置 FMOD for Unity3.4 添加聲音&#xff1a;卡丁車引擎3.5 添加聲音&#xff1a;氛圍3.6 添加聲音&#xff1a;音樂3.7 刪除現有音頻3.8 下一步 10. 腳本 API 參考10.1 基礎…

Java鎖的四種狀態(無鎖、偏向級鎖、輕量級鎖、重量級鎖)

介紹 首先&#xff0c;我們需要明確一點&#xff1a;偏向級鎖、輕量級鎖、重量級鎖只針對synchronized 鎖的狀態總共有四種&#xff0c;級別由低到高依次為&#xff1a;無鎖、偏向鎖、輕量級鎖、重量級鎖。 這四種鎖狀態分別代表什么&#xff0c;為什么會有鎖升級&#xff…

在UI界面中實現3d人物展示

簡要原理(設置雙攝像機): 為需要展示的3D人物單獨設置一個攝像機(只設置為渲染人物層級),主要攝像機的方向與人物方向一致,但攝像機需要需要旋轉180,設置的角度自行進行微調創建一個Render Texture類型的組件用于存儲攝像機渲染的內容UI上設置需要展示的圖片區域,圖片…

遍歷目錄

自學python如何成為大佬(目錄):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 遍歷在漢語中的意思是全部走遍&#xff0c;到處周游。在Python中&#xff0c;遍歷是將指定的目錄下的全部目錄&#xff08;包括子目錄&#xff09;及…

聰明人社交的基本順序:千萬別搞反了,越早明白越好

聰明人社交的基本順序&#xff1a;千萬別搞反了&#xff0c;越早明白越好 國學文化 德魯克博雅管理 2024-03-27 17:00 作者&#xff1a;方小格 來源&#xff1a;國學文化&#xff08;gxwh001&#xff09; 導語 比一個好的圈子更重要的&#xff0c;是自己優質的能力。 唐詩宋…

【重學C語言】十九、SDL2 圖形化編程的使用

【重學C語言】十九、SDL2 圖形化編程的使用 SDL2 的第一個程序渲染器紋理渲染1. 紋理的概念2. 加載紋理3. 渲染紋理4. 紋理設置和查詢5. 紋理渲染流程6. 注意事項SDL2_imageSDL2 的第一個程序 #define SDL_MAIN_HANDLED #include <SDL.h>int main(int argc, char* argv[…

AH股高開低走,創業板跌超2%,寧德時代下挫6%,微盤股指數反彈超5%

創業板跌2%&#xff0c;權重股寧德時代跌近6%&#xff1b;地產、光刻機概念股逆勢大漲&#xff1b;券商股午后集體下跌&#xff0c;天風證券一度跌停。微盤股指數經歷連跌后早盤反彈超5%。 內容提要 周五&#xff0c;A股高開后回落&#xff0c;午盤震蕩回升。截至收盤&#x…

python-Bert(谷歌非官方產品)模型基礎筆記0.1.096

python-bert模型基礎筆記0.1.015 TODOLIST官網中的微調樣例代碼Bert模型的微調限制Bert的適合的場景Bert多語言和中文模型Bert模型兩大類官方建議模型Bert模型中名字的含義Bert模型包含的文件Bert系列模型參數介紹微調與遷移學習區別Bert微調的方式Pre-training和Fine-tuning區…

Python可視化 | 使用matplotlib繪制面積圖示例

面積圖是數據可視化中的一個有效工具&#xff0c;用于說明時間上的關系和趨勢。它們提供了一種全面的、視覺上迷人的方法&#xff0c;通過熟練地將折線圖的可讀性與填充區域的吸引力相結合來呈現數值數據。 在本文中&#xff0c;我們將學習更多關于在Python中創建面積折線圖的…

【python】python指南(二):命令行參數解析器ArgumentParser

一、引言 對于算法工程師來說&#xff0c;語言從來都不是關鍵&#xff0c;關鍵是快速學習以及解決問題的能力。大學的時候參加ACM/ICPC一直使用的是C語言&#xff0c;實習的時候做一個算法策略后臺用的是php&#xff0c;畢業后做策略算法開發&#xff0c;因為要用spark&#x…

24考研408大變化,25考研高分上岸規劃+應對策略

巧了&#xff0c;我有現成的經驗&#xff1a; 數學和專業課的成績都不高不低&#xff0c;剛好夠用&#xff0c;其實408想上岸&#xff0c;不僅僅要學好408&#xff0c;還要學好考研數學&#xff0c;這是我的肺腑之言&#xff0c;我復試的時候&#xff0c;我知道的那些沒有進復試…