嵌入式學習-土堆目標檢測(4)-day28

Pytorch中加載自定義數據集 - VOC

其中需要pip install xmltodict

#voc_dataset.pyimport os
import torch
import xmltodict
from PIL import Image
from torch.utils.data import Dataset
import torchvision.transforms as transformsclass VOCDataset(Dataset):  def __init__(self,img_dir,label_dir,transform,label_transform): #定義一些后面會用的參數      self.img_dir = img_dir                          #img地址       self.label_dir = label_dir                      #label文件地址       self.transform = transform                      #是否要做一些變換       self.label_transform = label_transform          #是否要對label做一些變換self.img_names = os.listdir(self.img_dir)       #os.listdir 獲取文件夾下的所有文件名稱,列表形式self.label_names = os.listdir(self.label_dir)   #獲取label文件夾下的所有文件名稱       self.classes_list = ["no helmet","motor","number","with helmet"]#為了轉化標記為 : 0,1,2,3def __len__(self):return len(self.img_names)                      #返回照片文件的個數def __getitem__(self, index):img_name = self.img_names[index]                #圖片列表[序號] 獲取文件名img_path = os.path.join(self.img_dir, img_name) #對地址進行拼接 獲取文件的路徑image = Image.open(img_path).convert('RGB')     #通過文件地址打開文件,轉化為RGB三通道格式#new1.png -> new1.xml#new1.png -> [new1,png] -> new1 + ".xml"label_name = img_name.split('.')[0] + ".xml"    #獲取標注的文件名label_path = os.path.join(self.label_dir, label_name)   #拼接獲取標注的路徑with open(label_path, 'r',encoding="utf-8") as f:       #打開標注文件label_content = f.read()                            #讀出標注文件所有的內容label_dict = xmltodict.parse(label_content)             #因為內容是XML格式,xmltodict.parse 將內容轉化為 dict 格式target = []                                             #將要返回的數組,定義總體返回容器objects = label_dict["annotation"]["object"]            #獲取dict里的標注對象for obj in objects:                                     #獲取每個標注里面的信息obj_name = obj["name"]obj_class_id = self.classes_list.index(obj_name)    #將標注的名字(no helmet)轉化為數字(0)obj_xmax = float(obj["bndbox"]["xmax"])obj_ymax = float(obj["bndbox"]["ymax"])obj_xmin = float(obj["bndbox"]["xmin"])obj_ymin = float(obj["bndbox"]["ymin"])target.extend([obj_class_id,obj_xmin,obj_ymin,obj_xmax,obj_ymax])   #將信息保存到總體返回容器target = torch.Tensor(target)                                           #轉為tensor數據類型if self.transform is not None:image = self.transform(image)                                       #對定義對象時寫的對image的操作return image,targetif __name__ == '__main__':train_dataset = VOCDataset(r"E:\HelmetDataset-VOC\train\images",r"E:\HelmetDataset-VOC\train\labels",transforms.Compose([transforms.ToTensor()]),None)print(len(train_dataset))print(train_dataset[11])

Pytorch中加載自定義數據集 - YOLO

如過VOC弄懂了的話,那這個代碼會非常簡單

#YOLO_dataset.pyimport os
import torchfrom PIL import Image
from torch.utils.data import Dataset
import torchvision.transforms as transformsclass YOLODataset(Dataset):def __init__(self,img_dir,label_dir,transform,label_transform): #定義一些后面會用的參數self.img_dir = img_dir                          #img地址self.label_dir = label_dir                      #label文件地址self.transform = transform                      #是否要做一些變換self.label_transform = label_transform          #是否要對label做一些變換self.img_names = os.listdir(self.img_dir)       #os.listdir 獲取文件夾下的所有文件名稱,列表形式self.label_names = os.listdir(self.label_dir)   #獲取label文件夾下的所有文件名稱
#        self.classes_list = ["no helmet","motor","number","with helmet"]#為了轉化標記為 : 0,1,2,3def __len__(self):return len(self.img_names)                      #返回照片文件的個數def __getitem__(self, index):img_name = self.img_names[index]                #圖片列表[序號] 獲取文件名img_path = os.path.join(self.img_dir, img_name) #對地址進行拼接 獲取文件的路徑image = Image.open(img_path).convert('RGB')     #通過文件地址打開文件,轉化為RGB三通道格式#new1.png -> new1.xml#new1.png -> [new1,png] -> new1 + ".txt"label_name = img_name.split('.')[0] + ".txt"    #獲取標注的文件名label_path = os.path.join(self.label_dir, label_name)   #拼接獲取標注的路徑with open(label_path, 'r',encoding="utf-8") as f:       #打開標注文件label_content = f.read()                            #讀出標注文件所有的內容target = []object_infos = label_content.strip().split("\n")for object_info in object_infos:info_list = object_info.strip().split(" ")class_id = float(info_list[0])center_x = float(info_list[1])center_y = float(info_list[2])width = float(info_list[3])height = float(info_list[4])target.extend([class_id,center_x,center_y,width,height])# label_dict = xmltodict.parse(label_content)             #因為內容是XML格式,xmltodict.parse 將內容轉化為 dict 格式# target = []                                             #將要返回的數組,定義總體返回容器# objects = label_dict["annotation"]["object"]            #獲取dict里的標注對象# for obj in objects:                                     #獲取每個標注里面的信息#     obj_name = obj["name"]#     obj_class_id = self.classes_list.index(obj_name)    #將標注的名字(no helmet)轉化為數字(0)#     obj_xmax = float(obj["bndbox"]["xmax"])#     obj_ymax = float(obj["bndbox"]["ymax"])#     obj_xmin = float(obj["bndbox"]["xmin"])#     obj_ymin = float(obj["bndbox"]["ymin"])#     target.extend([obj_class_id,obj_xmin,obj_ymin,obj_xmax,obj_ymax])   #將信息保存到總體返回容器target = torch.Tensor(target)                                           #轉為tensor數據類型if self.transform is not None:image = self.transform(image)                                       #對定義對象時寫的對image的操作return image,targetif __name__ == '__main__':train_dataset = YOLODataset(r"E:\HelmetDataset-YOLO\HelmetDataset-YOLO-Train\images", r"E:\HelmetDataset-YOLO\HelmetDataset-YOLO-Train\labels", transforms.Compose([transforms.ToTensor()]), None)print(len(train_dataset))print(train_dataset[11])

模型的 nn.model &模型的可視化

?#model.py
import torch
import torch.nn as nn
from torchvision import transformsfrom yolo_dataset import VOCDatasetclass TuduiModel(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(in_channels=3 , out_channels=20, kernel_size=5)self.conv2 = nn.Conv2d(in_channels=20, out_channels=20, kernel_size=5)def forward(self, x):x = torch.nn.functional.relu(self.conv1(x))return torch.nn.functional.relu(self.conv2(x))if __name__ == '__main__':model = TuduiModel()dataset = VOCDataset(r"E:\HelmetDataset-VOC\train\images",r"E:\HelmetDataset-VOC\train\labels",transforms.Compose([transforms.ToTensor(),transforms.Resize((512, 512)),]),None)img,target = dataset[0]output = model(img)#   print(output)#   print(model)torch.onnx.export(model,img,"tudui.onnx") #模型可視化

ONNX模型格式?

在環境中

pip install onnx

然后

torch.onnx.export(model,img,"tudui.onnx")  #(模型,圖片,名字)

再用瀏覽器打開 netron.app

把生成好的onnx文件拖進網頁

?

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

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

相關文章

Spring MVC上下文容器在Web容器中是如何啟動的(源碼深入剖析)?

文章目錄一、雙容器架構:MVC容器與根容器的關系二、啟動全流程解析1. 啟動流程全景圖2. 初始化根容器(Root WebApplicationContext)2.1 Tomcat 中啟動入口源碼解析2.2 Spring 根上下文啟動源碼解析3. 初始化 MVC 容器(DispatcherS…

【iOS】編譯和鏈接、動靜態庫及dyld的簡單學習

文章目錄編譯和鏈接1??核心結論:一句話區分2??編譯過程:從源代碼到目標文件(.o)2.1 預處理(Preprocessing):“替換變量復制粘貼”2.2 編譯(Compilation):…

金山辦公WPS項目產品總監陳智新受邀為第十四屆中國PMO大會演講嘉賓

全國PMO專業人士年度盛會珠海金山辦公軟件有限公司WPS項目產品總監 陳智新先生 受邀為“PMO評論”主辦的2025第十四屆中國PMO大會演講嘉賓,演講議題為:中小團隊PMO的成長之路,敬請關注!議題簡要:在競爭激烈、需求多變的…

web安全 | docker復雜環境下的內網打點

本文作者:Track-syst1m一.前言本文涉及的相關漏洞均已修復、本文中技術和方法僅用于教育目的;文中討論的所有案例和技術均旨在幫助讀者更好地理解相關安全問題,并采取適當的防護措施來保護自身系統免受攻擊。二.大概流程1. 外網打點? 漏洞利…

iTwin 幾何屬性獲取

面積體積半徑獲取幾何屬性,如面積,體積,半徑,可以使用getMassProperties這個接口async onGetMassProperty(){const vp IModelApp.viewManager.selectedView;const iModel vp?.iModel;if (!iModel) return;console.log("iM…

OpenLayers 快速入門(九)Extent 介紹

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二 作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路! OpenLayers…

LeetCode 121. 買賣股票的最佳時機 LeetCode 122. 買賣股票的最佳時機II LeetCode 123.買賣股票的最佳時機III

LeetCode 121. 買賣股票的最佳時機嘗試一:暴力解決方法常用兩個指針去遍歷prices數組,dp[i]用于記錄在第i天所獲得的最大利潤。時間復雜度是O(N^2),超出時間限制。Codeclass Solution(object):def maxProfit(self, prices):"""…

【LeNet網絡架構】——深度學習.卷積神經網絡

目錄 1 MLP 2 LeNet簡介 3 Minst數據集 3.1 MINST數據集簡介 3.2 MNIST數據集的預處理 4 LeNet手寫數字識別 LeNet由Yann Lecun 提出,是一種經典的卷積神經網絡,是現代卷積神經網絡的起源之一。Yann將該網絡用于郵局的郵政的郵政編碼識別&#xff…

Python筆記完整版

常用pip源 (1)阿里云 http://mirrors.aliyun.com/pypi/simple/(2)豆瓣 http://pypi.douban.com/simple/(3)清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/(4)中國科學技術大學…

2025 鴻蒙創新賽又來了,萬少教你如何強勢切入 HarmonyOS AI特性

2025 鴻蒙創新賽又來了,萬少教你如何強勢切入 前言 ? 2025 華為HarmonyOS 創新賽又來了,創新賽是鴻蒙生態最大規模開發者官方賽事,最高獲百萬激勵。 參賽資格 面向所有開發者開放以隊伍的形式來參加,可以一個人報名一個隊伍&a…

【智能模型系列】Unity通過訪問Ollama調用DeepSeek模型進行本地部署

【智能模型系列】Unity通過訪問Ollama調用DeepSeek模型進行本地部署 目錄 一、前言 二、環境準備 三、核心代碼解析 1、參數配置 2. CallDeepSeek.cs - API交互控制器 3、 MainPanel.cs - 用戶界面控制器 四、源碼 一、前言 在本教程中,我將分享如何在Unity中集成本地…

什么是5G-A三防平板?有什么特點?哪些領域能用到?

在工業自動化與數字化轉型浪潮中,三防平板電腦已成為“危、急、特”場景的核心工具。這類設備不僅具備堅固耐用的物理防護特性,更融合了先進的通信技術與智能處理能力。而隨著5G技術向5G-A階段演進,新一代三防平板正為行業應用注入全新動能。…

Flink實時流量統計:基于窗口函數與Redis Sink的每小時PV監控系統(學習記錄)

題目:利用flink統計網站瀏覽量,并寫入redis。利用窗口函數以及算子實現每小時PV(網站的頁面瀏覽量)統計,對統計后結果數據格式進行設計,存儲至Redis中(利用sink將處理后結果數據輸出到redis數據…

使用Imgui和SDL2做的一個彈球小游戲-Bounze

使用Imgui和SDL2做的一個彈球小游戲-Bounze 油管上面TheCherno博主分享的一個視頻FIRST GAME in C! Did He Do a Good Job? // Code Review (C/SDL2)里面分享了一個Github項目: https://github.com/staticaron/Bounze 使用了Imgui和SDL2,并且可以設置音…

SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法 CASE WHEN 是 SQL 中非常實用的條件表達式,它允許你在查詢中實現條件邏輯。以下是詳細的用法說明: 1. 基本語法結構 CASE WHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_resul…

CentOS 7 Linux 基礎知識點匯總

🐧 CentOS 7 Linux 基礎知識點匯總為方便初學者快速掌握 CentOS 7 系統的核心操作,本文檔整理了常用系統命令、快捷鍵、目錄結構及文件后綴名等基礎內容,適合入門參考。 一、常見系統命令 🔍 命令行提示符說明 終端中的提示符包含…

突發限制下的破局之路:國產之光 Lynx 重構 AI 開發安全壁壘

繼 Pro 套餐 “明升暗降” 爭議后,Cursor 本周再掀波瀾 —— 包括 Claude 系列、GPT-4 在內的主流模型一夜之間對中國用戶全面封禁。開發者社群瞬間沸騰,“付費卻用不了”“項目數據導不出” 的焦慮刷屏,境外工具的政策波動再次給行業敲響警鐘…

滲透測試實戰 | docker復雜環境下的內網打點

本文作者:Track-syst1m一.前言本文涉及的相關漏洞均已修復、本文中技術和方法僅用于教育目的;文中討論的所有案例和技術均旨在幫助讀者更好地理解相關安全問題,并采取適當的防護措施來保護自身系統免受攻擊。二.大概流程1. 外網打點漏洞利用?…

阿里云服務器 CentOS 7 安裝 MySQL 8.4 超詳細指南

阿里云服務器 CentOS 7 安裝 MySQL 8.4 超詳細指南 一、準備工作 系統要求: CentOS 7.9 64位2 核(vCPU)2 GiBroot 用戶權限 服務器連接工具: FinalShell 下載安裝包: 訪問 MySQL 官網選擇版本:MySQL 8.4.0…

解決 Electron 中 window.open 打開新窗口的各種“坑”

嘿,各位開發者們!今天我們要聊聊在使用 Electron 時遇到的一個經典問題:如何正確地使用 window.open 來打開新窗口? 這聽起來似乎很簡單,但實際上卻充滿了各種“驚喜”(或者說“驚嚇”)。別擔心…