【深度學習】安全帽檢測,目標檢測,yolov10算法,yolov10訓練

文章目錄

  • 一、數據集
  • 二、yolov10介紹
  • 三、數據voc轉換為yolo
  • 四、訓練
  • 五、驗證
  • 六、數據、模型、訓練后的所有文件

尋求幫助請看這里:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

一、數據集

安全帽佩戴檢測
數據集:https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset
基準模型:
在這里插入圖片描述

二、yolov10介紹

聽說過yolov10嗎:https://www.jiqizhixin.com/articles/2024-05-28-7

論文:

https://arxiv.org/abs/2405.14458

代碼:

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

三、數據voc轉換為yolo

調整一下,整成這樣:

VOC2028 # tree -L 1
.
├── images
├── labels
├── test.txt
├── train.txt
├── trainval.txt
└── val.txt2 directories, 4 files

寫為絕對路徑:

# 定義需要處理的文件名列表
file_names = ['test.txt', 'train.txt', 'trainval.txt', 'val.txt']for file_name in file_names:# 打開文件用于讀取with open(file_name, 'r') as file:# 讀取所有行lines = file.readlines()# 打開(或創建)另一個文件用于寫入修改后的內容,這里使用新的文件名表示已修改new_file_name = 'modified_' + file_namewith open(new_file_name, 'w') as new_file:# 遍歷每一行并進行修改for line in lines:# 刪除行尾的換行符,添加'.jpg''images/',然后再添加回換行符modified_line = '/ssd/xiedong/yolov10/VOC2028/images/' + line.strip() + '.jpg\n'# 將修改后的內容寫入新文件new_file.write(modified_line)print("所有文件處理完成。")

轉yolo txt:

import traceback
import xml.etree.ElementTree as ET
import os
import shutil
import random
import cv2
import numpy as np
from tqdm import tqdmdef convert_annotation_to_list(xml_filepath, size_width, size_height, classes):in_file = open(xml_filepath, encoding='UTF-8')tree = ET.parse(in_file)root = tree.getroot()# size = root.find('size')# size_width = int(size.find('width').text)# size_height = int(size.find('height').text)yolo_annotations = []# if size_width == 0 or size_height == 0:for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes:classes.append(cls)cls_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)]# 標注越界修正if b[1] > size_width:b[1] = size_widthif b[3] > size_height:b[3] = size_heighttxt_data = [((b[0] + b[1]) / 2.0) / size_width, ((b[2] + b[3]) / 2.0) / size_height,(b[1] - b[0]) / size_width, (b[3] - b[2]) / size_height]# 標注越界修正if txt_data[0] > 1:txt_data[0] = 1if txt_data[1] > 1:txt_data[1] = 1if txt_data[2] > 1:txt_data[2] = 1if txt_data[3] > 1:txt_data[3] = 1yolo_annotations.append(f"{cls_id} {' '.join([str(round(a, 6)) for a in txt_data])}")in_file.close()return yolo_annotationsdef main():classes = []root = r"/ssd/xiedong/yolov10/VOC2028"img_path_1 = os.path.join(root, "images")xml_path_1 = os.path.join(root, "labels")dst_yolo_root_txt = xml_path_1index = 0img_path_1_files = os.listdir(img_path_1)xml_path_1_files = os.listdir(xml_path_1)for img_id in tqdm(img_path_1_files):# 右邊的.之前的部分xml_id = img_id.split(".")[0] + ".xml"if xml_id in xml_path_1_files:try:img = cv2.imdecode(np.fromfile(os.path.join(img_path_1, img_id), dtype=np.uint8), 1)  # img是矩陣new_txt_name = img_id.split(".")[0] + ".txt"yolo_annotations = convert_annotation_to_list(os.path.join(xml_path_1, img_id.split(".")[0] + ".xml"),img.shape[1],img.shape[0],classes)with open(os.path.join(dst_yolo_root_txt, new_txt_name), 'w') as f:f.write('\n'.join(yolo_annotations))except:traceback.print_exc()# classesprint(f"我已經完成轉換 {classes}")if __name__ == '__main__':main()

vim voc2028x.yaml

train: /ssd/xiedong/yolov10/VOC2028/modified_train.txt
val: /ssd/xiedong/yolov10/VOC2028/modified_val.txt
test: /ssd/xiedong/yolov10/VOC2028/modified_test.txt# Classes
names:0: hat1: person

四、訓練

環境:

git clone https://github.com/THU-MIG/yolov10.git
cd yolov10
conda create -n yolov10 python=3.9 -y
conda activate yolov10
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

訓練

yolo detect train data="/ssd/xiedong/yolov10/voc2028x.yaml" model=yolov10s.yaml epochs=200 batch=64 imgsz=640 device=1,3

在這里插入圖片描述

訓練啟動后:

在這里插入圖片描述
訓練完成后:

在這里插入圖片描述

五、驗證

yolo val model="/ssd/xiedong/yolov10/runs/detect/train2/weights/best.pt" data="/ssd/xiedong/yolov10/voc2028x.yaml" batch=32 imgsz=640 device=1,3

在這里插入圖片描述
map50平均達到0.94,已超出基準很多了。

預測:

yolo predict model=yolov10n/s/m/b/l/x.pt

導出:

# End-to-End ONNX
yolo export model=yolov10n/s/m/b/l/x.pt format=onnx opset=13 simplify
# Predict with ONNX
yolo predict model=yolov10n/s/m/b/l/x.onnx# End-to-End TensorRT
yolo export model=yolov10n/s/m/b/l/x.pt format=engine half=True simplify opset=13 workspace=16
# Or
trtexec --onnx=yolov10n/s/m/b/l/x.onnx --saveEngine=yolov10n/s/m/b/l/x.engine --fp16
# Predict with TensorRT
yolo predict model=yolov10n/s/m/b/l/x.engine

demo:

wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
python app.py
# Please visit http://127.0.0.1:7860

在這里插入圖片描述

在這里插入圖片描述

六、數據、模型、訓練后的所有文件

yolov10訓練安全帽目標監測全部東西,下載看這里:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

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

相關文章

MySql part1 安裝和介紹

MySql part1 安裝和介紹 數據 介紹 什么是數據庫,數據很好理解,一般來說數據通常是我們所認識的 描述事物的符號記錄, 可以是數字、 文字、圖形、圖像、聲音、語言等,數據有多種形式,它們都以經過數字化后存入計算機…

Nuxt3項目實現 OG:Image

目錄 前言 1、安裝 2、設置網站 URL 3、啟用 Nuxt DevTools 4、創建您的第一個Og:Image a. 定義OG鏡像 b. 查看您的Og:Image 5、自定義NuxtSeo模板 a. 定義 NuxtSeo模板 b. 使用其他可用的社區模板 6、創建自己的模板 a. 定義組件 BlogPost.vue b. 使用新模板 c.…

vue3 watch學習

watch的偵聽數據源類型 watch的第一個參數為偵聽數據源,有4種"數據源": ref(包括計算屬性) reactive(響應式對象) getter函數 多個數據源組成的數組。 //ref const xref(0)//單個ref watch(x,(newX)>{console.…

Python庫之Scrapy-Redis的高級用法深度解析

Python庫之Scrapy-Redis的高級用法深度解析 引言 Scrapy-Redis作為Scrapy框架的擴展庫,不僅支持基本的分布式爬取功能,還提供了一系列的高級用法,使得爬蟲的開發和維護更加靈活和高效。本文將深入探討Scrapy-Redis的高級用法,幫…

python實訓——回歸類型數據挖掘任務

回歸類型數據挖掘任務 基于ARIMA和多層神經網絡模型的地鐵站點日客流量預測。有鄭州市2015年8月-11月各地鐵閘機刷卡數據集。對每日各地鐵站的客流量進行分析并進行可視化。基于上一步的分析結果,分別采用ARIMA模型和多層神經網絡模型對數據進行建模,訓…

Usage - hackthebox

簡介 靶場:hackmyvm 靶機:Usage(10.10.11.18) 難度:Easy 靶機鏈接:https://app.hackthebox.com/machines/Usage 攻擊機1:ubuntu22.04 (10.10.16.21) 攻擊機2:windows11(10.10.14.33) 掃描 nmap起手 nmap -sT …

Centos7.9環境下keepalived結合nginx實現負載均衡的高可用(親測版)

目錄 一、負載均衡高可用解釋 二、安裝 三、Nginx檢查腳本創建 四、修改keepalived配置文件 一、負載均衡高可用解釋 nginx 作為負載均衡器,所有請求都到了nginx,如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。這樣nginx作為負…

大一C語言課設 服裝銷售系統 代碼實現與項目總結

問題分析 服裝信息管理及銷售管理系統。方便對庫存服裝的信息管理和添加新服裝數據,同時兼具庫存數量管理功能。 功能實現 1、建立服裝信息庫,包括:服裝代碼、型號、規格、面料、顏色、單價、數量; 2、建立銷售信息庫&#xff…

lua拼接字符串

在Lua中,拼接字符串可以使用多種方法,包括使用..操作符、string.format函數,或者使用循環和table.concat函數。下面是一些常見的字符串拼接示例: 使用..操作符 local part1 "Hello" local part2 "World" lo…

類和對象(中)【類的6個默認成員函數】 【零散知識點】 (萬字)

類和對象(中) 1.類的6個默認成員函數 如果一個類中什么成員都沒有,簡稱為空類。 空類中真的什么都沒有嗎?并不是,任何類在什么都不寫時,編譯器會自動生成以下6個默認成員函數。 默認成員函數&#xff1…

【Python】如何使用 Python 自動發送每日電子郵件報告

人不走空 🌈個人主頁:人不走空 💖系列專欄:算法專題 ?詩詞歌賦:斯是陋室,惟吾德馨 目錄 🌈個人主頁:人不走空 💖系列專欄:算法專題 ?詩詞歌…

整合Spring Boot 框架集成Knife4j

本次示例使用Spring Boot作為腳手架來快速集成Knife4j,Spring Boot版本2.3.5.RELEASE ,Knife4j版本2.0.7 POM.XML完整文件代碼如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0…

智能合約引領:探索Web3的商業革新之路

隨著區塊鏈技術的迅速發展&#xff0c;智能合約作為其重要應用之一&#xff0c;正在逐步改變著商業世界的格局。Web3作為下一代互聯網的代表&#xff0c;正引領著智能合約在商業領域的廣泛應用和創新。本文將深入探討智能合約在Web3中的作用&#xff0c;以及智能合約如何引領著…

【正在線上召開】2024機器智能與數字化應用國際會議(MIDA2024),免費參會

【ACM出版】2024機器智能與數字化應用國際會議&#xff08;MIDA2024&#xff09; 2024 International Conference on Machine Intelligence and Digital Applications 【支持單位】 寧波財經學院 法國上阿爾薩斯大學 【大會主席】 Ljiljana Trajkovic 加拿大西蒙菲莎大…

【JavaScript腳本宇宙】跨越邊界:挖掘JavaScript驗證庫的無限可能

引領技術潮流&#xff1a;六大頂級JavaScript驗證庫解析 前言 在現代編程中&#xff0c;數據驗證是一個非常重要的環節。本文將探索六種不同的JavaScript數據驗證庫&#xff0c;分別介紹它們的概述&#xff0c;主要特性&#xff0c;使用示例和使用場景。 歡迎訂閱專欄&#x…

PHP身份證真假API在線文檔、身份證ocr識別、身份證三要素人像核驗

翔云PHP身份證真假API文檔&#xff0c;為開發者提供了一個詳盡的操作指南和接口說明。通過簡潔明了的文檔&#xff0c;開發者可以輕松集成身份證驗證功能到各類網站或應用程序中&#xff0c;無需從零開始編寫復雜的驗證邏輯&#xff0c;大大縮短了開發周期&#xff0c;降低了技…

使用畫圖工具修改圖片文字

方法思路&#xff1a; 使用背景色將需要修改的文字覆蓋&#xff0c;然后在原來的地方加入修改后的字。 第一步&#xff1a; 選中圖片后右鍵&#xff0c;選擇“編輯”&#xff08;默認會使用畫圖工具打開&#xff09; 第二步&#xff1a; 選取顏色選取器&#xff0c;如下圖 使…

cpprestsdk https雙向認證小測

概述 因項目需要在系統中引入https雙向認證&#xff0c;由于程序使用C/C和cpprestsdk庫編寫&#xff0c;從網上經過一頓檢索折騰&#xff0c;總算測試通過&#xff0c;故而博文記錄用以備忘。 系統環境 Ubuntu 22.04.3 LTS libcpprest-dev&#xff08;jammy,now 2.10.18-1bu…

【Text2SQL 論文】DIN-SQL:分解任務 + 自我糾正 + in-context 讓 LLM 完成 Text2SQL

論文&#xff1a;DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction ???? NeurIPS 2023, arXiv:2304.11015 Code: Few-shot-NL2SQL-with-prompting | GitHub 文章目錄 一、論文速讀1.1 Schema Linking Module1.2 Classification & Decompo…

【每日刷題】Day52

【每日刷題】Day52 &#x1f955;個人主頁&#xff1a;開敲&#x1f349; &#x1f525;所屬專欄&#xff1a;每日刷題&#x1f34d; &#x1f33c;文章目錄&#x1f33c; 1. 2965. 找出缺失和重復的數字 - 力扣&#xff08;LeetCode&#xff09; 2. 350. 兩個數組的交集 II …