一、YOLO V10安裝、使用、訓練大全

YOLO V10安裝、使用、訓練大全

  • 一、下載官方源碼
  • 二、配置conda環境
  • 三、安裝YOLOV10依賴
  • 四、使用官方YOLO V10模型
    • 1.下載模型
    • 2.使用模型
      • 2.1 圖片案例
  • 五、制作數據集
    • 1.數據集目錄結構
    • 2.標注工具
      • 2.1 安裝標注工具
      • 2.2 運行標注工具
      • 2.3 設置自動保存
      • 2.4 切換yolo模式
      • 2.5 開始標注
      • 2.6 數據集準備
        • 2.6.1 數據集文件夾準備
        • 2.6.2 xml格式轉yolo的txt訓練格式
    • 3.訓練
      • 3.1 創建訓練配置文件
      • 3.2 命令訓練
      • 3.3 代碼訓練
    • 4.測試模型
      • 4.1 圖片
        • 4.1.1 命令行
        • 4.1.2 代碼
      • 4.2 視頻
        • 4.2.1 命令行
        • 4.2.2 代碼

一、下載官方源碼

  • 源碼點擊下載

二、配置conda環境

# 1.在conda創建python3.9環境
conda create -n yolov10 python=3.9
# 2.激活切換到創建的python3.9環境
conda activate yolov10

三、安裝YOLOV10依賴

# 1.切換到yolov10源碼根目錄下,安裝依賴
# 注意:會自動根據你是否有GPU自動選擇pytorch版本進行按照,這里不需要自己去選擇pytorch和cuda按照,非常良心
pip install -r requirements.txt -i https://pypi.doubanio.com/simple
# 2.運行下面的命令,才可以在命令行使用yolo等命令
pip install -e .

四、使用官方YOLO V10模型

1.下載模型

在這里插入圖片描述

  • 模型下載
    • YOLOv10-N:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
    • YOLOv10-S:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
    • YOLOv10-M:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
    • YOLOv10-B:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
    • YOLOv10-L:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
    • YOLOv10-X:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
  • 下載完放入源碼根目錄

2.使用模型

2.1 圖片案例

import cv2
from ultralytics import YOLOv10# 加載模型
model = YOLOv10("yolov10m.pt")# 批量運算
results = model(["./datasets/group1/images/train/9597185011003UY_20240610_092234_555.png"], stream=True)for result in results:boxes_cls_len = len(result.boxes.cls)if not boxes_cls_len:# 沒有檢測到內容continuefor boxes_cls_index in range(boxes_cls_len):# 獲取類別idclass_id = int(result.boxes.cls[boxes_cls_index].item())# 獲取類別名稱class_name = result.names[class_id]# 獲取相似度similarity = result.boxes.conf[boxes_cls_index].item()# 獲取坐標值,左上角 和 右下角:lt_rb的值:[1145.1351318359375, 432.6763000488281, 1275.398681640625, 749.5224609375]lt_rb = result.boxes.xyxy[boxes_cls_index].tolist()# 轉為:[[1145.1351318359375, 432.6763000488281], [1275.398681640625, 749.5224609375]]lt_rb = [[lt_rb[0], lt_rb[1]], [lt_rb[0], lt_rb[1]]]print("類別:", class_name, "相似度:", similarity, "坐標:", lt_rb)# 圖片展示annotated_image = result.plot()annotated_image = annotated_image[:, :, ::-1]if annotated_image is not None:cv2.imshow("Annotated Image", annotated_image)cv2.waitKey(0)cv2.destroyAllWindows()

五、制作數據集

  • 一般會將所有圖片放到一個文件夾,打完標注后,從總的文件夾中,分別分不同的圖片到訓練集和數據集

1.數據集目錄結構

在這里插入圖片描述

2.標注工具

  • Labelimg是一款開源的數據標注工具,可以標注三種格式。
    • VOC標簽格式,保存為xml文件。
    • yolo標簽格式,保存為txt文件。
    • createML標簽格式,保存為json格式。

2.1 安裝標注工具

pip install labelimg -i https://pypi.doubanio.com/simple

2.2 運行標注工具

在這里插入圖片描述

  • labelimg:運行工具
  • images:圖片文件夾路徑
  • classes.txt:類別的文件
labelimg images label/classes.txt

在這里插入圖片描述

2.3 設置自動保存

在這里插入圖片描述

2.4 切換yolo模式

在這里插入圖片描述

2.5 開始標注

在這里插入圖片描述
在這里插入圖片描述

標注完退出軟件即可

2.6 數據集準備

2.6.1 數據集文件夾準備

在這里插入圖片描述

yolo的label文件內容:<class_index> <x_center> <y_center> <width> <height>

2.6.2 xml格式轉yolo的txt訓練格式
  • 運行下面腳本,就會轉換
import os
import xml.etree.ElementTree as ETclasses = ['hero', 'monster', 'goods']def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(xml_file_paths, is_delete=False):"""將某個文件夾下面所有的xml轉換為yolo格式"""for xml_file_path in xml_file_paths:xml_file_dir, xml_file_name = os.path.split(xml_file_path)in_file = open(xml_file_path, 'r')out_file = open(os.path.join(xml_file_dir, xml_file_name[:-4]) + '.txt', 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:print(cls)continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')def traverse_folder(folder_path):"""獲取某個文件夾下面所有的xml文件"""for root, dirs, files in os.walk(folder_path):for file in files:if file.lower().endswith(('.xml')):yield os.path.join(root, file)if __name__ == '__main__':convert_annotation(traverse_folder(os.path.join(".", "datasets", "group1", "labels")))

在這里插入圖片描述

  • txt格式就是yolo訓練的格式

3.訓練

3.1 創建訓練配置文件

  • group1.yaml:文件和datasets文件夾同一個目錄
path: group1 # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: # test images (optional)# Classes
names:0: hero1: monster2: goods

3.2 命令訓練

yolo task=detect mode=train data=group1.yaml model=yolov10m.pt epochs=100 batch=16 device=cpu plots=True
  • 上述各個參數解釋如下,請根據自己的情況修改。
    • yolo:運行yolo程序
    • task=detect:指定任務為檢測(detect)。YOLO模型可以用于不同的任務,如檢測、分類等,這里明確指定為檢測任務。
    • mode=train:指定模式為訓練(train)。這意味著你將使用提供的數據集來訓練模型。
    • data=group1.yaml:指定你自己的數據集yaml文件
    • model=yolov10m.pt: 指定下載的yolov10預訓練權重文件
    • epochs=100:設置訓練輪次,可以先設置一個5輪或者10輪,測試看看,順利進行再設置大一點進行下一步訓練。
    • batch=4:設置訓練集加載批次,主要是提高訓練速度,具體得看你的顯卡或者內存容量。如果顯存大,則可以設置大一些。或許訓練再詳細講解如何設置
    • device=0:指定訓練設備,如果沒有gpu,則令device=cpu,如果有一個gpu,則令device=0,有兩個則device=0,1以此類推進行設置。
    • plots:指定在訓練過程中生成圖表(plots)。這可以幫助你可視化訓練進度,如損失函數的變化等。

3.3 代碼訓練

  • 待補充

4.測試模型

4.1 圖片

4.1.1 命令行
yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=test_images_1/veh2.jpg
  • 上述各個參數解釋如下,請根據自己的情況修改。
    • yolo:運行yolo程序
    • task=detect:指定任務為檢測(detect)。YOLO模型可以用于不同的任務,如檢測、分類等,這里明確指定為檢測任務。
    • mode=predict:設置模式為預測(predict)。這意味著模型將使用提供的權重和圖像進行預測,而不是進行訓練。
    • conf=0.25:設置置信度閾值為0.25。這意味著只有模型預測置信度大于或等于0.25的檢測結果才會被考慮。
    • save=True:指示模型保存預測結果。這通常會將結果保存為圖像文件,其中檢測到的對象會被標記出來。
    • model=runs/detect/train/weights/best.pt:指定模型權重文件的位置。這里,best.pt是訓練過程中保存的最佳權重文件,用于進行預測。
    • source=test_images_1/veh2.jpg:指定要檢測的源圖像。這里,veh2.jpg是要進行對象檢測的圖像文件。
4.1.2 代碼
from ultralytics import YOLOv10
import supervision as sv
import cv2classes = {0: 'licence'}model = YOLOv10('runs/detect/train6/weights/best.pt')
image = cv2.imread('veh2.jpg')results = model(source=image, conf=0.25, verbose=False)[0]
detections = sv.Detections.from_ultralytics(results)
# 使用新的標注器
bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()labels = [f"{classes[class_id]} {confidence:.2f}"for class_id, confidence in zip(detections.class_id, detections.confidence)
]# 首先使用邊界框標注器
annotated_image = bounding_box_annotator.annotate(image.copy(), detections=detections
)# 然后使用標簽標注器
annotated_image = label_annotator.annotate(annotated_image, detections=detections, labels=labels
)cv2.imshow('result', annotated_image)
cv2.waitKey()
cv2.destroyAllWindows()

4.2 視頻

4.2.1 命令行
yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=b.mp4
  • 上述各個參數解釋如下,請根據自己的情況修改。
    • yolo:運行yolo程序
    • task=detect:指定任務為檢測(detect)。YOLO模型可以用于不同的任務,如檢測、分類等,這里明確指定為檢測任務。
    • mode=predict:設置模式為預測(predict)。這意味著模型將使用提供的權重和圖像進行預測,而不是進行訓練。
    • conf=0.25:設置置信度閾值為0.25。這意味著只有模型預測置信度大于或等于0.25的檢測結果才會被考慮。
    • save=True:指示模型保存預測結果。這通常會將結果保存為圖像文件,其中檢測到的對象會被標記出來。
    • model=runs/detect/train/weights/best.pt:指定模型權重文件的位置。這里,best.pt是訓練過程中保存的最佳權重文件,用于進行預測。
    • source=b.mp4:指定要檢測的源視頻。
4.2.2 代碼
from ultralytics import YOLOv10
import supervision as sv
import cv2classes = {0: 'licence'}model = YOLOv10('runs/detect/train6/weights/best.pt')def predict_and_detect(image):results = model(source=image, conf=0.25, verbose=False)[0]detections = sv.Detections.from_ultralytics(results)# 使用新的標注器bounding_box_annotator = sv.BoundingBoxAnnotator()label_annotator = sv.LabelAnnotator()labels = [f"{classes[class_id]} {confidence:.2f}"for class_id, confidence in zip(detections.class_id, detections.confidence)]# 首先使用邊界框標注器annotated_image = bounding_box_annotator.annotate(image.copy(), detections=detections)# 然后使用標簽標注器annotated_image = label_annotator.annotate(annotated_image, detections=detections, labels=labels)return annotated_imagedef 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 objectfourcc = cv2.VideoWriter_fourcc(*'MP4V')writer = cv2.VideoWriter(output_filename, fourcc, fps,(frame_width, frame_height))return writervideo_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:breakframe = predict_and_detect(img)writer.write(frame)cv2.imshow("frame", frame)if cv2.waitKey(1) & 0xFF == 27:  # 按下Esc鍵退出breakcap.release()
writer.release()

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

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

相關文章

Socket.D 開源網絡應用協議,v2.5.9 發布(已有 java, py, js SDK)

Socket.D 協議&#xff1f; Socket.D 是一個基于事件和語義消息流的網絡應用協議。在微服務、移動應用、物聯網等場景&#xff0c;可替代 http、websocket 等。協議詳情參考《官網介紹》。 支持&#xff1a; tcp, udp, ws, kcp 傳輸。 目前&#xff1a;java&#xff0c;kotli…

Python不使用元類的ORM實現

不使用元類的簡單ORM實現 在 Python 中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff09;是一種將對象和數據庫之間的映射關系進行轉換的技術&#xff0c;使得通過面向對象的方式來操作數據庫更加方便。通常&#xff0c;我們使用元類&#xff08;metaclass&a…

關于go和rust語言的對比

文章目錄 前言Rust 的優勢&#xff1a;Go 的優勢&#xff1a;總結 前言 Go 和 Rust 是兩種現代的系統級編程語言&#xff0c;它們各自擁有獨特的特性和應用場景。以下是它們的一些主要區別&#xff1a; Rust 的優勢&#xff1a; 內存安全&#xff1a;Rust 引入了所有權和借用…

香橙派5plus上跑云手機方案二 waydroid

前言 上篇文章香橙派5plus上跑云手機方案一 redroid(帶硬件加速)說了怎么跑帶GPU加速的redroid方案&#xff0c;這篇說下怎么在香橙派下使用Waydroid。 溫馨提示 雖然能運行&#xff0c;但是體驗下來只能用軟件加速&#xff0c;無法使用GPU加速&#xff0c;所有會很卡。而且…

Pat乙級題解

文章目錄 1~2021 ~ 4041~6061~8081~100101~125 1~20 1001 害死人不償命的(3n1)猜想 B1002 寫出這個數 (20 分) B1003 我要通過&#xff01; B1004 成績排名 1005 繼續(3n1)猜想 B1006 換個格式輸出整數 B1007 素數對猜想 1008 數組元素循環右移問題 B1009 說反話 1010 一元多項…

linux磁盤分區管理

首先關機狀態下&#xff0c;先配置硬盤 硬盤分區管理 識別硬盤 》分區規劃 》 格式化 》 掛載使用 [rootlocalhost ~]# lsblk 查看硬盤 分區劃分&#xff08;m幫助, p 查看分區, n 創建分區, d 刪除分區, q 退出, w 保存&#xff0c; g gpt分區&#xff09; [roo…

絕區陸--大語言模型的幻覺問題是如何推動科學創新

介紹 大型語言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出為各種應用生成類似人類文本的出色能力。然而&#xff0c;LLM 的一個鮮為人知的方面是它們傾向于“產生幻覺”或生成不正確或沒有根據的事實陳述。我不認為這僅僅是一個限制…

快速排序算法Python實現

快速排序原理和步驟 快速排序是一種高效的排序算法&#xff0c;基于分治法&#xff08;Divide and Conquer&#xff09;來實現。其基本思想是通過一次排序將數組分成兩部分&#xff0c;其中一部分的所有元素都小于另一部分&#xff0c;然后遞歸地對這兩部分進行排序。以下是快…

前端構建工具(webpackvite)

這里寫目錄標題 構建工具webpack介紹配置文件簡介entryoutputloaderbabel插件開發服務器&#xff08;webpack-dev-server&#xff09;soureMap vite 構建工具 當我們習慣了在node中編寫代碼的方式后&#xff0c;在回到前端編寫html、css、js這些東西會感覺到各種的不便。比如:…

夏季戶外綜合征怎么預防

以下是一些預防夏季戶外綜合征的有效方法&#xff1a; 做好防曬措施&#xff1a; 涂抹高倍數的防曬霜&#xff0c;每隔 2 - 3 小時重新涂抹一次。比如選擇 SPF50、PA 的防曬霜。佩戴寬邊帽子、太陽鏡和遮陽傘&#xff0c;減少陽光直射面部和眼睛。像漁夫帽、大檐帽能有效遮擋陽…

12-阿里云單細胞處理-PBMC(by-jmzeng)

scRNA_10X/seurat-v2/sup-patient1-PBMC.Rmd at master jmzeng1314/scRNA_10X (github.com) s04-運行seurat流程處理一萬個單細胞轉錄組數據并自動化出報告_嗶哩嗶哩_bilibili #section 3已更新#「生信技能樹」單細胞公開課2021_嗶哩嗶哩_bilibili 上傳讀取數據 可以配置租…

模擬型題目

題目類型&#xff1a; 給定操作&#xff0c;允許操作任意次 思路收集&#xff1a; 1.暴力遍歷&#xff1a;如Problem - B - Codeforces 直接讓每一個不同的進行操作 2.歸納&#xff1a;根據模擬來發現規律

RTK_ROS_導航(4):ROS中空地圖的生成與加載

1. 地圖加載 構建空白 Map 如下,以下為python代碼,生成了output_image.pgm 文件 一般你在什么地方運行該代碼,這個文件就生成在什么地方 import numpy as np size = 100 # 單位:m resulition = 0.05 # 單位:mw = round(size / resulition) IMAGE_DATA = np.zeros((w

ChatGPT:Swagger 的疑問

ChatGPT&#xff1a;Swagger 的疑問 這段代碼是做什么的&#xff0c;為什么每個微服務的寫法都一樣 springdoc:api-docs:enabled: true # 1. 是否開啟 Swagger 接文檔的元數據path: /v3/api-docsswagger-ui:enabled: true # 2.1 是否開啟 Swagger 文檔的官方 UI 界面path: /sw…

音視頻解封裝demo:使用libmp4v2解封裝(demux)出mp4文件中的h264視頻數據和aac語音數據

1、README 前言 本demo是使用的mp4v2來將mp4文件解封裝得到h264、aac的&#xff0c;目前demo提供的.a靜態庫文件是在x86_64架構的Ubuntu16.04編譯得到的&#xff0c;如果想在其他環境下測試demo&#xff0c;可以自行編譯mp4v2并替換相應的庫文件&#xff08;libmp4v2.a&#…

HTTP 范圍Range請求

HTTP 的 Range 請求使客戶端能夠要求服務器僅向其回傳 HTTP 消息的一部分 HTTP 的 Range 請求頭是 HTTP/1.1 協議的一個特性。它允許客戶端請求僅傳輸資源的某個特定部分&#xff0c;而不是整個資源。 適用場景 支持隨機訪問的媒體播放器明確只需大型文件某部分的數據處理工具…

2022 RoboCom 世界機器人開發者大賽-高職組(國賽):智能管家

人上了年紀&#xff0c;記性就會變差&#xff0c;時常不得不翻箱倒柜找東西。智能照護中心現在請你做一個簡單的智能管家程序&#xff0c;把老人家里的東西逐一編號&#xff0c;放進若干個收納箱里。當然收納箱也是有編號的&#xff0c;你的程序要記錄下哪個東西放在哪個收納箱…

R包: phyloseq擴增子統計分析利器

介紹 phyloseq包對多類型數據的綜合軟件&#xff0c;并其對這些數據提供統計分析和可視化方法。 微生物數據分析的主要挑戰之一是如何整合不同類型的數據&#xff0c;從而對其進行生態學、遺傳學、系統發育學、多元統計、可視化和檢驗等分析。同時&#xff0c;由于同行之間需要…

QT學習日記一

創建QT文件步驟 這是創建之后widget.cpp和widget.h文件的具體代碼解釋&#xff0c;也是主要操作的文件&#xff0c;其中main.cpp不用操作&#xff0c;ui則是圖形化操作界面&#xff0c;綜合使用時&#xff0c;添加一個元件要注意重編名和編譯一下&#xff0c;才能在widget這類…

生產者消費者模型和線程同步問題

文章目錄 線程同步概念生產者消費者模型條件變量使用條件變量喚醒條件變量 阻塞隊列 線程同步概念 互斥能保證安全,但是僅有安全不夠,同步可以更高效的使用資源 生產者消費者模型 下面就基于生產者消費者來深入線程同步等概念: 如何理解生產消費者模型: 以函數調用為例: 兩…