小土堆目標檢測筆記

文章目錄

    • 1 什么是目標檢測
    • 2 目標檢測常見的數據集
      • 2.1 目標檢測數據集
      • 2.2 目標檢測數據集的標注
      • 2.3 目標檢測工具介紹
    • 3 數據集的標注
      • 3.1 VOC數據集標注
      • 3.2 加載數據集

1 什么是目標檢測

希望計算機在視頻或圖像中定位并識別我們感興趣的目標
定位:找到目標在圖像中的位置。
在這里插入圖片描述
識別:識別矩陣框中的內容
在這里插入圖片描述
感興趣的目標:不僅是一些常規的目標,也可以是一些非常規的目標或者是抽象的目標。

2 目標檢測常見的數據集

2.1 目標檢測數據集

數據集涉及到輸入和輸出
輸入:圖片
輸出:帶有目標的標注
在這里插入圖片描述
博主提到的數據集網站paperswitchcode停止維護
找到了保存往期的paperwithcode網頁快照,還能使用以前的功能
https://web.archive.org/web/20250616051252/https://paperswithcode.com/
在這里插入圖片描述
VOC數據集,找了個能用的鏈接,需要登錄Google
https://www.kaggle.com/search?q=voc+in%3Adatasets
在這里插入圖片描述
在標注的xml文件中,truncated表示能否標注完整(0標注完整),difficult表示是否能夠容易識別(0容易識別)
在這里插入圖片描述

imagej工具下載鏈接
https://imagej.net/ij/download.html
在這里插入圖片描述
目標框選
在這里插入圖片描述
在這里插入圖片描述
土堆的VOC數據集查看器
https://xiaotudui.com/tuduilab/voc-dataset-viewer
在這里插入圖片描述

2.2 目標檢測數據集的標注

YOLO格式的標注,會將x_yolo,y_yolo,width_yolo,hight_yolo進行一個歸一化的處理,將范圍控制在[0,1],(Xcenter/ImageWidth,Ycenter/ImageHight,Width/ImageWidth,Hight/ImageHight)
在這里插入圖片描述
YOLO標注例子
在這里插入圖片描述
YOLO格式<class_id,x_yolo,y_yolo,width_yolo,hight_yolo>
0 0.5 0.54 0.406 0.5135
在這里插入圖片描述

2.3 目標檢測工具介紹

labellmg標注工具的使用
采集自己的數據集
明確任務–檢測沒有不帶頭盔的駕駛員,并檢測出摩托車車牌
抽象出感興趣的目標,摩托車

  1. 不帶頭盔的人 class id 0 no helmet
  2. 摩托車 class id 1 motor
  3. 摩托車車牌 class id 2 number
  4. 帶頭盔的人 class id 3 with helmet

標注工具,從up網盤下載
Labellmg
修改一下自己所需要的標簽
在這里插入圖片描述
Open Dir打開目錄,Change Save Dir切換保存后的標注路徑,通過create框出感興趣目標,切換YOLO(txt)/VOC(xml)標注格式
在這里插入圖片描述
labelstudio工具的使用
在python的虛擬環境中安裝labelstudio

pip install -U label-studio

在這里插入圖片描述

啟動labelstudio

label-studio

在這里插入圖片描述
在這里插入圖片描述
通過導入的形式將未標定的數據集導入到labelstudio中,設置標簽的類別進行標注
在這里插入圖片描述
標注完成后的導出格式
在這里插入圖片描述
本地的掛載和網盤的掛載適合大批量的數據集
設置-Cloud Storage-Add Source Storage
Absolute local path路徑要和虛擬環境放在一個盤里
在這里插入圖片描述
設置環境變量
LOCAL_FILES_SERVING_ENABLED=True
在這里插入圖片描述
重新啟動繼續導入,點擊Sync Storage同步數據
在這里插入圖片描述
添加標簽
在這里插入圖片描述

3 數據集的標注

3.1 VOC數據集標注

使用labelimg工具標注,首先修改預定義的類別文件為所需要標注的類別
在這里插入圖片描述
目錄結構train為訓練集,val為驗證集,images為圖片,labels為標注信息
在這里插入圖片描述
標注的labels信息
在這里插入圖片描述
訓練集和驗證集,全部標注完成

3.2 加載數據集

編寫自己數據集
https://docs.pytorch.org/tutorials/beginner/data_loading_tutorial.html

import osimport torch
import xmltodict  # 用于將XML數據轉換為Python字典
from PIL import Image  # Python圖像處理庫
from torch.utils.data import Dataset  # PyTorch數據集基類
from torchvision import transforms  # 圖像預處理工具class VOCDataset(Dataset):# VOC數據集初始化def __init__(self, image_dir, label_dir, transform, label_transform):"""初始化VOC格式數據集Args:image_dir: 圖像文件目錄路徑label_dir: 標簽文件目錄路徑transform: 圖像預處理變換label_transform: 標簽預處理變換(代碼中未實際使用)"""self.image_dir = image_dirself.label_dir = label_dirself.transform = transformself.label_transform = label_transformself.imgs = os.listdir(self.image_dir)  # 獲取圖像目錄下所有文件名# 定義類別列表self.classes_list = ["no helmet", "motor", "number", "with helmet"]# 返回數據集大小def __len__(self):"""返回數據集中的圖像數量"""return len(self.imgs)# 獲取單個數據項def __getitem__(self, index):"""獲取索引對應的數據項"""# 獲取圖像文件名并構建完整路徑img_name = self.imgs[index]img_path = os.path.join(self.image_dir, img_name)image = Image.open(img_path).convert('RGB')  # 打開圖像并轉換為RGB格式# 構建對應的XML標簽文件路徑(將圖像擴展名替換為.xml)label_name = img_name.split('.')[0] + '.xml'label_path = os.path.join(self.label_dir, label_name)# 解析XML標簽文件with open(label_path, "r", encoding="utf-8") as f:label_content = f.read()label_dict = xmltodict.parse(label_content)  # 將XML轉換為字典# 提取標注信息objects = label_dict["annotation"]["object"]target = []  # 存儲所有目標的標注信息# 遍歷每個標注對象for obj in objects:obj_name = obj["name"]  # 獲取對象類別名稱obj_class_id = self.classes_list.index(obj_name)  # 將類別名稱轉換為索引ID# 提取邊界框坐標(注意轉換為浮點數)xmin = float(obj["bndbox"]["xmin"])ymin = float(obj["bndbox"]["ymin"])xmax = float(obj["bndbox"]["xmax"])ymax = float(obj["bndbox"]["ymax"])# 將當前目標的標注信息添加到列表target.extend([obj_class_id, xmin, ymin, xmax, ymax])# 將標注列表轉換為張量target = torch.tensor(target)# 應用圖像預處理變換if self.transform is not None:image = self.transform(image)return image, target  # 返回處理后的圖像和標注張量if __name__ == '__main__':image_dir = r'E:\deeplearning\torch\data\HelmetDataset-VOC\train\images'label_dir = r'E:\deeplearning\torch\data\HelmetDataset-VOC\train\labels'# 創建數據集實例train_dataset = VOCDataset(image_dir, label_dir, transforms.Compose([transforms.ToTensor()]), None)print(len(train_dataset))  # 打印數據集大小print(train_dataset[1])  

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

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

相關文章

Linux內核內存管理系列博客教程學習規劃

&#x1f4da; 系列總體目標 幫助讀者系統理解Linux內核內存管理機制&#xff0c;從基礎概念到核心實現&#xff0c;最終能參與內核內存相關開發。&#x1f4c5; 系列大綱&#xff08;共20篇博文&#xff09; 第一部分&#xff1a;基礎概念篇&#xff08;4篇&#xff09;Linux內…

2025應屆生求職指南:掌握這些新興技能提升競爭力

2025應屆生求職指南&#xff1a;掌握這些新興技能提升競爭力2025-09-01 21:29:35在當前就業市場競爭日益激烈的背景下&#xff0c;2025屆應屆生既面臨挑戰&#xff0c;也迎來新的發展機遇。科技不斷進步與行業變革推動了人才需求結構的變化&#xff0c;掌握一些新興技能已成為提…

DevOps篇之Jenkins實現k8s集群版本發布以及版本管理

設計思路 通過Jenkins 實現 Kubernetes 集群的版本發布和版本管理。并且利用Jenkins實現多集群 K8s 發布。首先需要了解Helm 的應用場景&#xff0c;以及 GitLab 中配置多集群 KUBECONFIG 等問題。現在工具采用 Jenkins&#xff0c;所以需要重點放在 Jenkins 與 K8s 的集成上&a…

AI 智能體架構中的協議設計三部曲:MCP → A2A → AG-UI

AI 智能體應用在企業實際落地越來越多&#xff0c;一個完整的 AI 智能體應用系統通常包含三個主要角色&#xff1a;用戶、AI 智能體和外部工具。AI 智能體架構設計的核心任務之一&#xff0c;就是解決這三個角色之間的溝通問題。 這三個角色的溝通&#xff0c;涉及到&#xff1…

Unity6最新零基礎入門(知識點復習包含案例)NO.2——Unity6下載與安裝(超詳細)

前言 隨著 Unity 6 版本的推出&#xff0c;全新的功能與優化為開發者帶來了更高效的創作體驗。不過&#xff0c;在真正開始揮灑創意之前&#xff0c;掌握 Unity Hub 的安裝、版本的選擇以及 Unity 6 的正確安裝方法是至關重要的基礎。本文將圍繞這些核心步驟展開&#xff0c;為…

【開題答辯全過程】以 健身愛好者飲食管理小程序為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

基于JavaScript的智能合約平臺(Agoric)

Agoric通過對象能力模型提升安全性&#xff0c;被用于去中心化金融&#xff08;DeFi&#xff09;衍生品開發。通過簡化開發流程和增強安全性&#xff0c;推動去中心化應用&#xff08;DApps&#xff09;的大規模落地。Agoric成立于2018年&#xff0c;由斯坦福大學校友Mark Mill…

mysql實例是什么?

在 ??MySQL?? 的語境中&#xff0c;??“MySQL 實例”&#xff08;MySQL Instance&#xff09;?? 是指&#xff1a;??一個正在運行的 MySQL 服務進程及其所管理的獨立數據庫環境&#xff0c;包括內存結構、后臺線程、配置參數、數據文件等。一個 MySQL 實例可以管理一…

別再說AppInventor2只能開發安卓了!蘋果iOS現已支持!

AppInventor2中文網&#xff08;https://www.fun123.cn&#xff09;已完成v2.76版本升級。 AI伴侶升級至v2.76&#xff0c;Android SDK由34升級至35&#xff0c;安卓版本由14升級至15。已支持安卓15&#xff01; 重磅升級&#xff01;&#xff01;支持蘋果iOS編譯及上架…

2025 批量下載雪球和東方財富帖子和文章導出excel和pdf

之前分享過雪球下載 2025年如何批量下載雪球帖子和文章導出pdf&#xff1f;&#xff0c;今天再整理分享下最新雪球和東方財富文章導出excel和pdf 以雪球這個號為例 下載的所有帖子文章內容html&#xff1a; 然后用我開發的工具批量轉換為pdf 2025 更新版&#xff1a;蘇生不…

JavaEE 初階第十八期:叩開網絡世界的大門

專欄&#xff1a;JavaEE初階起飛計劃 個人主頁&#xff1a;手握風云 目錄 一、網絡發展史 1.1. 獨立模式 1.2. 網絡互連 二、網絡分類 2.1. 局域網 2.2. 廣域網 三、IP地址 3.1. 概念 3.2. 格式 四、端口號 4.1. 概念 4.2. 格式 五、協議 5.1. 概念 5.2. 作用 …

SOME/IP-SD中IPv4 SD端點選項詳解

<摘要> 本解析圍繞IPv4 SD端點選項在AUTOSAR AP R22-11規范中的定義與應用展開。該選項是SOME/IP服務發現&#xff08;SD&#xff09;協議中的關鍵字段&#xff0c;用于在網絡地址不可達或變化的場景下&#xff08;如經NAT網關或使用多宿主設備時&#xff09;&#xff0c…

.NET 8 集成 JWT Bearer Token

注意&#xff1a;這是一種非常簡單且不是最低限度安全的設置 JWT 的方法。步驟 1——安裝軟件包首先&#xff0c;您需要安裝一些 NuGet 包。dotnet add package Microsoft.AspCore.Authentication.JwtBearer dotnet add package System.IdentityModel.Tokens.Jwt步驟 2——創建…

模型匯總-數學建模

一、優化模型1.線性規劃線性規劃&#xff08;Linear Programming, LP&#xff09;是一種數學優化方法&#xff0c;用于在給定的線性約束條件下&#xff0c;找到線性目標函數的最大值或最小值。它是運籌學中最常用的方法之一。線性規劃的標準形式最大化問題標準形式&#xff1a;…

2025年09月計算機二級MySQL選擇題每日一練——第十二期

計算機二級中選擇題是非常重要的&#xff0c;本期是這個系列的最后一期了&#xff01; 答案及解析將在末尾公布&#xff01; 今日主題&#xff1a;綜合應用進階 1、設有如下創建表的語句&#xff1a; CREATE TABLE tb_test( ID INT NOT NULL PRIMARY KEY, sno CHAR(10) NOT …

計組(2)CPU與指令

一、總體認識CPU1、軟硬件角度CPU&#xff0c;全稱就是中央處理器。從硬件上來說&#xff0c;CPU是一個超大規模集成電路&#xff0c;通過電路實現加法、乘法乃至各種各樣的處理邏輯。從軟件來說&#xff0c;CPU就是一個執行各種計算機指令的邏輯機器。2、計算機指令所謂的計算…

用Java讓家政服務觸手可及

家政服務不僅僅包括日常保潔&#xff0c;隨著社會的發展&#xff0c;從日常保潔、衣物清潔到家電維修、月嫂保姆&#xff0c;家政服務的場景越發多元。用戶不僅追求服務的 “專業度”&#xff0c;更看重 “便捷性”—— 能否快速找到服務、預約服務、了解服務效果&#xff1f;上…

Python OpenCV圖像處理與深度學習:Python OpenCV特征檢測入門

特征檢測與描述&#xff1a;探索圖像中的關鍵點 學習目標 通過本課程&#xff0c;學員們將掌握特征檢測的基本概念&#xff0c;了解如何使用OpenCV庫中的SIFT和SURF算法進行特征點檢測和特征描述符的計算。實驗將通過理論講解與實踐操作相結合的方式&#xff0c;幫助學員深入理…

ECDH (橢圓曲線迪菲-赫爾曼密鑰交換)

文章目錄一、什么是ECDH&#xff1f;二、為什么需要 ECDH&#xff1f;要解決什么問題&#xff1f;三、原理與圖示四、核心比喻&#xff1a;混合顏料五、技術實現步驟1. 約定公共參數2. 生成密鑰對3. 交換公鑰4. 計算共享密鑰5. 密鑰派生六、注意事項七、安全性基礎八、優勢特點…

Spring Boot實戰:打造高效Web應用,從入門到精通

目錄一、Spring Boot 初相識二、搭建開發環境2.1 安裝 JDK2.2 安裝 IDE&#xff08;以 IntelliJ IDEA 為例&#xff09;2.3 初始化 Spring Boot 項目三、Spring Boot 基礎配置3.1 配置文件詳解&#xff08;application.properties 和 application.yml&#xff09;3.2 自定義配置…