目標檢測、目標跟蹤、重識別

文章目錄?

  1. 環境
  2. 前言
  3. 項目復現
  4. 特征提取
  5. 工程下載
  6. 參考資料

環境

  • ubuntu 18.04 64位
  • yolov5
  • deepsort
  • fastreid

前言

基于YOLOv5和DeepSort的目標跟蹤 介紹過針對行人的檢測與跟蹤。本文介紹另一個項目,結合 FastReid 來實現行人的檢測、跟蹤和重識別。作者給出的2個主要實例,也是非常的實用,包括行人流量的統計、人群中特定目標的查找與跟蹤。

項目復現

首先,創建個全新的虛擬環境

conda create -n pytorch1.6 python=3.7
conda activate pytorch1.6

然后安裝下其它的依賴包

# 如果沒有gpu的話,就按照requirements.txt安裝即可
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
# 編輯requirements.txt,注釋掉torch和torchvision
pip install -r requirements.txt
# 使用cython加速
pip install cython
cd fast_reid/fastreid/evaluation/rank_cylib
make all
cd ../../../../

先來跑個行人計數的demo

python person_count.py

如果你在運行過程中出現下面的錯誤

2021-07-13 14:22:20 [INFO]: Loading weights from ./deep_sort/deep/checkpoint/ckpt.t7... Done!
Traceback (most recent call last):File "person_count.py", line 244, in <module>yolo_reid.deep_sort()File "person_count.py", line 121, in deep_sortbbox_xywh, cls_conf, cls_ids, xy = self.person_detect.detect(video_path, img, ori_img, vid_cap)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/person_detect_yolov5.py", line 95, in detectpred = self.model(img, augment=self.augment)[0]File "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_implresult = self.forward(*input, **kwargs)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 111, in forwardreturn self.forward_once(x, profile)  # single-scale inference, trainFile "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 131, in forward_oncex = m(x)  # run

這個就是模型的問題,建議使用源碼中自帶的?shell?腳本進行下載

sh weights/download_weights.sh

另外,依賴模塊?apex,不可以通過?pip install apex?來安裝,否則會報錯

?如果安裝的?pyyaml?版本較高的話,會出現下面的錯誤

只需要將?utils/parses.py?中的

self.update(yaml.load(fo.read()))

改為

self.update(yaml.safe_load(fo.read()))

我們來看看這個行人流量統計的基本原理:

首先,作者將?yolov5?的目標檢測封裝成了一個類?Person_detect,通過它的?detect?方法可以檢測到視頻中的每一個行人目標

然后,在畫面中設定一條基準線,給定線條兩端的坐標即可

line = [(0, int(0.48 * ori_img.shape[0])), (int(ori_img.shape[1]), int(0.48 * ori_img.shape[0]))]
cv2.line(ori_img, line[0], line[1], (0, 255, 255), 4)

接著,創建跟蹤器,開始對?yolov5?檢測出的每一個目標進行跟蹤。這里以目標預測框的中心點為基準,下圖是它的計算方法

如果前后幀的中心點所連成的直線和預先設定的基準線相交,則判定為越線,但是這里還有個方向的問題,向上還是向下?來看另一張圖

作者利用了三角形的正切與反正切原理,使用?math?模塊中的?degrees?方法來判斷,如果這個角度?>0,說明是向上走,反之則為向下走

def vector_angle(midpoint, previous_midpoint):x = midpoint[0] - previous_midpoint[0]y = midpoint[1] - previous_midpoint[1]return math.degrees(math.atan2(y, x))

看完行人計數的示例,我們再來看看特定目標的重識別示例

python person_search_reid.py

報錯了

Fusing layers...
Traceback (most recent call last):File "person_search_reid.py", line 120, in <module>yolo_reid = yolo_reid(cfg, args, path=args.video_path)File "person_search_reid.py", line 35, in __init__self.deepsort = build_tracker(cfg, args.sort, use_cuda=use_cuda)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/__init__.py", line 18, in build_trackermax_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, use_cuda=use_cuda)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/deep_reid.py", line 29, in __init__self.extractor = Reid_feature()File "./fast_reid/demo/demo.py", line 84, in __init__cfg = setup_cfg(args)File "./fast_reid/demo/demo.py", line 35, in setup_cfgcfg.merge_from_file(args.config_file)File "./fast_reid/fastreid/config/config.py", line 107, in merge_from_filecfg_filename, allow_unsafe=allow_unsafeFile "./fast_reid/fastreid/config/config.py", line 50, in load_yaml_with_basewith PathManager.open(filename, "r") as f:File "./fast_reid/fastreid/utils/file_io.py", line 357, in openpath, mode, buffering=buffering, **kwargsFile "./fast_reid/fastreid/utils/file_io.py", line 251, in _open

然后再次運行腳本?person_search_reid.py,可以得到

可以看到,由于事先已經提了2位行人(?a1111111111?和?b222222222222?)的特征,所以,畫面中能夠識別出這2個人并進行跟蹤。默認,特征文件保存在?fast_reid/query?下

如果你也想要制作一個特征文件,可以按照下面的步驟進行

特征提取

首先,需要截取目標人物的圖片,存放在某個以特定目標命名的文件夾下,如我這里的?xugaoxiang.com,這樣,后面進行識別的時候,就顯示?xugaoxiang.com?這個名字了。把這個文件夾拷貝到?fast_reid/query?目錄下,目錄結構如下

(pytorch1.6) xugaoxiang@1070Ti:~/Works/Yolov5-Deepsort-Fastreid/fast_reid/query$ tree
.
├── names.npy
├── query_features.npy
└── xugaoxiang.com├── 10.png├── 11.png├── 12.png├── 13.png├── 14.png├── 15.png├── 1.png├── 2.png├── 3.png├── 4.png├── 5.png├── 6.png├── 7.png├── 8.png└── 9.png

接下來執行

cd fast_reid/demo
python person_bank.py

執行完畢后,query?目錄下的?query_features.npy?和?names.npy?就被更新了

最后,找個包含目標的視頻測試下效果

QQ767172261

?

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

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

相關文章

jsp 設備預約管理系統Myeclipse開發mysql數據庫web結構java編程計算機網頁項目

一、源碼特點 JSP 設備預約管理系統是一套完善的java web信息管理系統&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為 TOMCAT7.0,Myeclipse8.5開發&#xff0c;數據庫為Mysql5.0…

SQL命令---添加新字段

介紹 使用sql語句為表添加新字段。 命令 alter table 表名 add 新字段名 數據類型;例子 向a表中添加name字段&#xff0c;類型為varchar(255)。 alter table a add name varchar(255);下面是執行添加有的表結構&#xff1a;

TimescaleDB-1 安裝

前置條件&#xff1a; 1、操作系統ubuntu2204 2、已經通過apt的方式安裝了pg14 當然其他的操作系統&#xff0c;官方文檔中也有說明。 一、安裝 https://docs.timescale.com/self-hosted/latest/install/installation-linux/ Installing self-hosted TimescaleDB on Debian-…

springboot+jdbcTemplate+sqlite編程示例——以滬深300成分股數據處理為例

引言 我們在自己做一些小的項目或者小的數據處理分析的時候&#xff0c;很多時候是不需要用到mysql這樣的大型數據庫&#xff0c;并且也不需要用到maven這樣很重的框架的&#xff0c;取而代之可以使用jdbcTemplatesqlite這樣的組合。 本文就介紹一下使用springbootjdbcTempla…

課堂練習3.4:進程的切換

3-9 課堂練習3.4:進程的切換 進程切換是支持多進程的一個關鍵環節,涉及到 CPU 現場的保存和恢復,本實訓分析 Linux 0.11 的進程切換過程。 第1關第一次進程切換過程分析 任務描述 本關任務回答問題: 在第一次進程切換時: 1.是從幾號進程切換到幾號進程?0 號進程和 1 號…

Linux指令——scp:傳輸文件

Linux指令——scp&#xff1a;傳輸文件 簡介&#xff1a; Linux文件互傳指令 使用方法&#xff1a; scp [可選參數] file_source file_target # 可選參數一般為-r&#xff0c;遞歸傳輸 # 舉例如下&#xff1a; scp /home/test/test.txt root192.168.1.200:/home/test/tes…

Java線程概念詳解

線程 概念 1.程序:未解決某種問題,使用計算機語言編寫的一些列指令(代碼)的集合 2.進程:正在運行的程序(被加載到內存中),是操作系統進行資源分配的最小單位 3.線程:進程可以進一步細化為線程(比進程更小)且線程是隸屬于進程的,是操作系統執行的最小的執行單元 也是cpu進行任…

CleanMyMac X2024免費許可證(激活教程)

CleanMyMac X是一款流行的系統優化工具&#xff0c;專為Mac用戶設計。它可以幫助用戶清理Mac系統中的垃圾文件、卸載不需要的程序、加速Mac性能以及保護Mac系統的安全。 一、簡介 CleanMyMac X是一款功能強大的系統優化工具&#xff0c;它可以幫助用戶清理Mac系統中的垃圾文件…

優麒麟ubuntukylin安裝UE4.27.2

優麒麟ubuntukylin安裝UE4.27.2 在&#xff08;國產&#xff09;優麒麟 ubuntukylin Linux平臺上編譯測試安裝虛幻引擎。 優麒麟系統 這里選擇的是官方增強版 https://www.ubuntukylin.com/downloads/ 同樣的可以選擇對應的Ubuntu22.04 LTS&#xff0c;唯一的區別就是優麒麟…

【精選】SpringMVC簡介及其執行流程,參數獲取方式

SpringMVC簡介 MVC模型 MVC全稱Model View Controller&#xff0c;是一種設計創建Web應用程序的模式。這三個單詞分別代表Web應用程序的三個部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指數據模型。用于存儲數據以及處理用戶請求的業務邏輯。在Web應用中&…

采用NSD評估ADC性能

概要 評估采樣器的傳統性能指標SNR、SFDR和ENOB最早被用于二戰時期,這些性能指標使用于具有通道選擇性和低通采樣使用的ADC,并不適用于近些年的射頻直采ADC,因此需要引入更合適的噪聲譜密度NSD(Noise Spectrum Density)指標來評估噪聲性能。 傳統技術指標的含義 無雜散…

async函數和await表達式

async函數 函數的返回值為promise對象 &#xff08;Promise介紹&#xff09;promise對象的結果由async函數執行的返回值決定&#xff0c;如果對象內返回非promise對象&#xff0c;比如字符串&#xff0c;那么返回結果是成功的promise對象&#xff0c;如果返回的是promise對象&…

Photoshop Circular Text

Ctrl N 新增 現學現賣

uniapp移動端懸浮按鈕(吸附邊緣)

Uniapp移動端懸浮按鈕可以通過CSS實現吸附邊緣的效果。具體實現步驟如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…

HarmonyOS4.0從零開始的開發教程06常用基礎組件

HarmonyOS&#xff08;四&#xff09;常用基礎組件 1 組件介紹 組件&#xff08;Component&#xff09;是界面搭建與顯示的最小單位&#xff0c;HarmonyOS ArkUI聲明式開發范式為開發者提供了豐富多樣的UI組件&#xff0c;我們可以使用這些組件輕松的編寫出更加豐富、漂亮的界…

代碼隨想錄-刷題第二十二天

235.二叉搜索樹的最近公共祖先 題目鏈接&#xff1a;235. 二叉搜索樹的最近公共祖先 思路&#xff1a;根據二叉搜索樹的特性&#xff0c;只需要判斷當前節點是否在[p,q]范圍內就可以&#xff0c;如果在這個范圍里&#xff0c;說明當前節點就是其最近公共祖先。 class Soluti…

C語言進階之路之結構體、枚舉關卡篇

目錄 一、學習目標 二、組合數據類型-結構體 結構體基本概念 結構體的聲明&#xff1a; 小怪實戰 結構體初始化 指定成員初始化的好處&#xff1a; 結構體成員引用 結構體指針與數組 關卡BOOS 三、結構體的尺寸 CPU字長 地址對齊 結構體的M值 可移植性 四、聯合體…

Java 使用冒號的七種方式

在 Java 中&#xff0c;冒號字符&#xff08;:&#xff09;用于不同的上下文&#xff0c;并根據上下文的不同而具有不同的含義。 以下是 Java 中冒號的一些常用用法&#xff1a; 1、三元運算符 冒號在三元運算符 (? :) 中用作條件、條件為真時要執行的表達式和條件為假時要執…

計算機視覺 基于Open3D了解用于網格和點云鄰域分析的KD樹和八叉樹

一、簡述 距離計算和鄰域分析是理解網格和點云的形狀、結構和特征的重要工具。我們這里要基于一些3D庫來提取基于距離的信息并將其可視化。 與深度圖或體素相比,點云和網格表示 3D 空間中的非結構化數據。點由它們的 (X, Y, Z) 坐標表示,在 3D 空間中可能彼此靠近的兩…

Python數據科學視頻講解:數據清洗、特征工程和數據可視化的注意事項

1.6 數據清洗、特征工程和數據可視化的注意事項 視頻為《Python數據科學應用從入門到精通》張甜 楊維忠 清華大學出版社一書的隨書贈送視頻講解1.6節內容。本書已正式出版上市&#xff0c;當當、京東、淘寶等平臺熱銷中&#xff0c;搜索書名即可。內容涵蓋數據科學應用的全流程…