Lnton羚通關于【PyTorch】教程:torchvision 目標檢測微調

torchvision 目標檢測微調
本教程將使用Penn-Fudan Database for Pedestrian Detection and Segmentation 微調 預訓練的Mask R-CNN 模型。 它包含 170 張圖片,345 個行人實例。

定義數據集
用于訓練目標檢測、實例分割和人物關鍵點檢測的參考腳本允許輕松支持添加新的自定義數據集。數據集應繼承自標準的 torch.utils.data.dataset 類,并實現 __len__ 和 __getitem__ 。

__getitem__ 需要返回:

image: PIL 圖像 (H, W)
target: 字典數據,需要包含字段
boxes (FloatTensor[N, 4]): N 個 Bounding box 的位置坐標 [x0, y0, x1, y1], 0~W, 0~H
labels (Int64Tensor[N]): 每個 Bounding box 的類別標簽,0 代表背景類。
image_id (Int64Tensor[1]): 圖像的標簽 id,在數據集中是唯一的。
area (Tensor[N]): Bounding box 的面積,在 COCO 度量里使用,可以分別對不同大小的目標進行度量。
iscrowd (UInt8Tensor[N]): 如果 iscrowd=True 在評估時忽略。
(optionally) masks (UInt8Tensor[N, H, W]): 可選的 分割掩碼
(optionally) keypoints (FloatTensor[N, K, 3]): 對于 N 個目標來說,包含 K 個關鍵點 [x, y, visibility], visibility=0 表示關鍵點不可見。
如果模型可以返回上述方法,可以在訓練、評估都能使用,可以用 pycocotools 里的腳本進行評估。

pip install pycocotools 安裝工具。

關于 labels 有個說明,模型默認 0 為背景。如果數據集沒有背景類別,不需要在標簽里添加 0 。 例如,假設有 cat 和 dog 兩類,定義了 1 表示 cat , 2 表示 dog , 如果一個圖像有兩個類別,類別的 tensor 為 [1, 2] 。

此外,如果希望在訓練時使用縱橫比分組,那么建議實現 get_height_and_width 方法,該方法將返回圖像的高度和寬度,如果未提供此方法,我們將通過 __getitem__ 查詢數據集的所有元素,這會將圖像加載到內存中,并且比提供自定義方法的速度慢。

為 PennFudan 寫自定義數據集
文件夾結構如下:

PennFudanPed/PedMasks/FudanPed00001_mask.pngFudanPed00002_mask.pngFudanPed00003_mask.pngFudanPed00004_mask.png...PNGImages/FudanPed00001.pngFudanPed00002.pngFudanPed00003.pngFudanPed00004.png

這是圖像的標注信息,包含了?mask?以及?bounding box?。每個圖像都有對應的分割掩碼,每個顏色代表不同的實例。

import os 
import numpy as np 
import torch 
from PIL import Imageclass PennFudanDataset(torch.utils.data.Dataset):def __init__(self, root, transforms):self.root = rootself.transforms = transforms## 加載所有圖像,sort 保證他們能夠對應起來self.images = list(sorted(os.listdir(os.path.join(self.root, 'PNGImages'))))self.masks = list(sorted(os.listdir(os.path.join(self.root, 'PedMasks'))))def __getitem__(self, idx):img_path = os.path.join(self.root, 'PNGImages', self.images[idx])mask_path = os.path.join(self.root, 'PedMasks', self.masks[idx])image = Image.open(img_path).convert('RGB')## mask 圖像并沒有轉換為 RGB,里面存儲的是標簽,0表示的是背景mask = Image.open(mask_path)# 轉換為 numpymask = np.array(mask) # 實例解碼成不同的顏色obj_ids = np.unique(mask)# 移除背景obj_ids = obj_ids[1:]masks = mask == obj_ids[:, None, None]# get bounding box coordinates for each masknum_objs = len(obj_ids)boxes = []for i in range(num_objs):pos = np.where(masks[i])xmin = np.min(pos[1])xmax = np.max(pos[1])ymin = np.min(pos[0])ymax = np.max(pos[0])boxes.append([xmin, ymin, xmax, ymax])# 轉換為 tensorboxes = torch.as_tensor(boxes, dtype=torch.float32)labels = torch.ones((num_objs,), dtype=torch.int64)masks = torch.as_tensor(masks, dtype=torch.uint8)image_id = torch.tensor([idx])area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])iscrowd = torch.zeros((num_objs,), dtype=torch.int64)target = {}target["boxes"] = boxestarget["labels"] = labelstarget["masks"] = maskstarget["image_id"] = image_idtarget["area"] = areatarget["iscrowd"] = iscrowdif self.transforms is not None:image, target = self.transforms(image, target)return image, targetdef __len__(self):return len(self.images)

Lnton羚通專注于音視頻算法、算力、云平臺的高科技人工智能企業。 公司基于視頻分析技術、視頻智能傳輸技術、遠程監測技術以及智能語音融合技術等, 擁有多款可支持ONVIF、RTSP、GB/T28181等多協議、多路數的音視頻智能分析服務器/云平臺。

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

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

相關文章

前端-輪詢

一、輪詢定義 輪詢是指在一定的時間間隔內,定時向服務器發送請求,獲取最新數據的過程。輪詢通常用于從服務器獲取實時更新的數據。 二、輪詢和長輪詢區別 輪詢是在固定的時間間隔內向服務器發送請求,即使服務器沒有數據更新也會繼續發送請求…

暴力模擬入門+簡單:零件組裝、塔子的簽到題、塔子哥考試、平均像素值、換座位

暴力模擬入門 P1038 小紅書-2022.9.23-零件組裝 #include <bits/stdc.h> #include <cstdint> using namespace std;typedef long long LL; const int N 100001; int num[4]; LL d; vector<vector<LL>> v(4, vector<LL>(N));int main() {for(in…

解決Pycharm的Settings中Project不見了也無法選擇Python Interpreter的方法

目錄 一、問題如下二、解決方法 一、問題如下 突然打開項目沒有python解釋器&#xff0c;也無法重新配置python Interpreter&#xff0c;而且整個文件夾是黃色高亮的形式&#xff0c;如下顯示&#xff0c;而且重新安裝了pycharm也沒用甚至說打開File–>Setting–>Projec…

日常BUG——普通頁面跳轉tabbar頁面報錯

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 微信小程序頁面跳轉的時候出現下面的問題&#xff1a; wx.redirectTo({url: /pages/index/i…

Linux學習之基本指令二

-----緊接上文 在了解cat指令之前&#xff0c;我們首先要了解到Linux下一切皆文件&#xff0c;在學習c語言時我們就已經了解到了 對文件輸入以及讀入的操作&#xff08;向顯示器打印&#xff0c;從鍵盤讀取數據&#xff09;&#xff0c;對于Linux下文件的操作&#xff0c;也是…

算法與數據結構(二十三)動態規劃設計:最長遞增子序列

注&#xff1a;此文只在個人總結 labuladong 動態規劃框架&#xff0c;僅限于學習交流&#xff0c;版權歸原作者所有&#xff1b; 也許有讀者看了前文 動態規劃詳解&#xff0c;學會了動態規劃的套路&#xff1a;找到了問題的「狀態」&#xff0c;明確了 dp 數組/函數的含義&a…

js簡介以及在html中的2種使用方式(hello world)

簡介 javascript &#xff1a;是一個跨平臺的腳本語言&#xff1b;是一種輕量級的編程語言。 JavaScript 是 Web 的編程語言。所有現代的 HTML 頁面都使用 JavaScript。 HTML&#xff1a; 結構 css&#xff1a; 表現 JS&#xff1a; 行為 HTMLCSS 只能稱之為靜態網頁&#xff0…

Rust交叉編譯簡述 —— Arm

使用系統&#xff1a;WSL2 —— Kali(Microsoft Store) 命令列表 rustup target list # 當前官方支持的構建目標架構列表 rustup target add aarch64-unknown-linux-gnu # 添加目標架構sudo apt-get install gcc-13-aarch64-linux-gnu gcc-13-aarch64-linux-gnu # 下載目標工具…

github以及上傳代碼處理

最近在github上傳代碼的時候出現了&#xff1a; /video_parser# git push -u origin main Username for https://github.com: gtnyxxx Password for https://gtny2010github.com: remote: Support for password authentication was removed on August 13, 2021. remote: Plea…

ROS局部路徑規劃器插件teb_local_planner流程梳理(上)

在我之前的文章《ROS導航包Navigation中的 Movebase節點路徑規劃相關流程梳理》中已經介紹過Move_base節點調用局部路徑規劃器插件的接口函數是computeVelocityCommands&#xff0c;接下來&#xff0c;我們就從這個函數入手梳理一下teb_local_planner功能包的工作流程。 ☆注&a…

推薦一個繪圖平臺(可替代Visio)

不廢話&#xff0c;簡易記網址&#xff1a; draw.io 網站會重定向到&#xff1a;https://app.diagrams.net/

編程語言中的++和--運算符介紹

編程語言中的和--運算符介紹 和--是編程語言&#xff08;C/C、JavaScript、Java&#xff09;中的自增&#xff08;加一&#xff09;和自減&#xff08;減一&#xff09;運算符。它們可以應用于變量&#xff0c;并且具有前綴和后綴兩種形式。 前綴形式&#xff1a; variable&…

Databend 開源周報第 106 期

Databend 是一款現代云數倉。專為彈性和高效設計&#xff0c;為您的大規模分析需求保駕護航。自由且開源。即刻體驗云服務&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新進展&#xff0c;遇到更貼近你心意的 Databend 。 數據脫敏 Data…

云原生 AI 工程化實踐之 FasterTransformer 加速 LLM 推理

作者&#xff1a;顏廷帥&#xff08;瀚廷&#xff09; 01 背景 OpenAI 在 3 月 15 日發布了備受矚目的 GPT4&#xff0c;它在司法考試和程序編程領域的驚人表現讓大家對大語言模型的熱情達到了頂點。人們紛紛議論我們是否已經跨入通用人工智能的時代。與此同時&#xff0c;基…

ISBN號碼(NOIP2008 普及組第一題)

ISBN號碼 說明 每一本正式出版的圖書都有一個ISBN號碼與之對應&#xff0c;ISBN碼包括9位數字、1位識別碼和3位分隔符&#xff0c;其規定格式如“x-xxx-xxxxx-x”&#xff0c;其中符號“-”就是分隔符&#xff08;鍵盤上的減號&#xff09;&#xff0c;最后一位是識別碼&#x…

CCF C3 走進百度:大模型與可持續生態發展

2023年8月10日&#xff0c;由CCF CTO Club發起的第22期C活動在百度北京總部進行&#xff0c;以“AI大語言模型技術與生態發展”主題&#xff0c;50余位企業界、學界專家、研究人員就此進行深入探討。 CCF C走進百度 本次活動&#xff0c;CCF秘書長唐衛清與百度集團副總裁、深…

如何保證數據傳輸的安全?

要確保數據傳輸的安全&#xff0c;您可以采取以下措施&#xff1a; 使用加密協議&#xff1a;使用安全的傳輸協議&#xff0c;如HTTPS(HTTP over SSL/TLS)或其他安全協議&#xff0c;以保護數據在傳輸過程中的安全性。加密協議可以有效防止數據被竊聽或篡改。 強化身份驗證&…

3種獲取OpenStreetMap數據的方法【OSM】

OpenStreetMap 是每個人都可以編輯的世界地圖。 這意味著你可以糾正錯誤、添加新地點&#xff0c;甚至自己為地圖做出貢獻&#xff01; 這是一個社區驅動的項目&#xff0c;擁有數百萬注冊用戶。 這是一個社區驅動的項目&#xff0c;旨在在開放許可下向每個人提供所有地理數據。…

【云計算原理及實戰】初識云計算

該學習筆記取自《云計算原理及實戰》一書&#xff0c;關于具體描述可以查閱原本書籍。 云計算被視為“革命性的計算模型”&#xff0c;因為它通過互聯網自由流通使超級計算能力成為可能。 2006年8月&#xff0c;在圣何塞舉辦的SES&#xff08;捜索引擎戰略&#xff09;大會上&a…

Sentinel 規則持久化

文章目錄 Sentinel 規則持久化一、修改order-service服務1.引入依賴2.配置nacos地址 第二步修改非常麻煩&#xff0c;可以略過&#xff0c;直接使用已經打好包的來使用二、修改sentinel-dashboard源碼1. 解壓2. 修改nacos依賴3. 添加nacos支持4. 修改nacos地址5. 配置nacos數據…