大創項目推薦 交通目標檢測-行人車輛檢測流量計數 - 大創項目推薦

文章目錄

  • 0 前言
  • 1\. 目標檢測概況
    • 1.1 什么是目標檢測?
    • 1.2 發展階段
  • 2\. 行人檢測
    • 2.1 行人檢測簡介
    • 2.2 行人檢測技術難點
    • 2.3 行人檢測實現效果
    • 2.4 關鍵代碼-訓練過程
  • 最后

0 前言

🔥 優質競賽項目系列,今天要分享的是

🚩 畢業設計 交通目標檢測-行人車輛檢測流量計數

該項目較為新穎,適合作為競賽課題方向,學長非常推薦!

🥇學長這里給一個題目綜合評分(每項滿分5分)

  • 難度系數:3分
  • 工作量:3分
  • 創新點:4分

🧿 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

1. 目標檢測概況

1.1 什么是目標檢測?

目標檢測,粗略來說就是:輸入圖片/視頻,經過處理,得到:目標的位置信息(比如左上角和右下角的坐標)、目標的預測類別、目標的預測置信度(confidence)。

1.2 發展階段

  1. 手工特征提取算法,如VJ、HOG、DPM

  2. R-CNN算法(2014),最早的基于深度學習的目標檢測器之一,其結構是兩級網絡:

  • 1)首先需要諸如選擇性搜索之類的算法來提出可能包含對象的候選邊界框;
  • 2)然后將這些區域傳遞到CNN算法進行分類;
  1. R-CNN算法存在的問題是其仿真很慢,并且不是完整的端到端的目標檢測器。

  2. Fast R-CNN算法(2014末),對原始R-CNN進行了相當大的改進:提高準確度,并減少執行正向傳遞所花費的時間。
    是,該模型仍然依賴于外部區域搜索算法。

  3. faster R-CNN算法(2015),真正的端到端深度學習目標檢測器。刪除了選擇性搜索的要求,而是依賴于

  • (1)完全卷積的區域提議網絡(RPN, Region Purpose Network),可以預測對象邊界框和“對象”分數(量化它是一個區域的可能性的分數)。
  • (2)然后將RPN的輸出傳遞到R-CNN組件以進行最終分類和標記。
  1. R-CNN系列算法,都采取了two-stage策略。特點是:雖然檢測結果一般都非常準確,但仿真速度非常慢,即使是在GPU上也僅獲得5 FPS。

  2. one-stage方法有:yolo(2015)、SSD(2015末),以及在這兩個算法基礎上改進的各論文提出的算法。這些算法的基本思路是:均勻地在圖片的不同位置進行密集抽樣,抽樣時可以采用不同尺度和長寬比,然后利用CNN提取特征后直接進行分類與回歸。
    整個過程只需要一步,所以其優勢是速度快,但是訓練比較困難。

  3. yolov3(2018)是yolo作者提出的第三個版本(之前還提過yolov2和它們的tinny版本,tinny版本經過壓縮更快但是也降低了準確率)。

2. 行人檢測

這里學長以行人檢測作為例子來講解目標檢測。

2.1 行人檢測簡介

行人檢測( Pedestrian
Detection)一直是計算機視覺研究中的熱點和難點。行人檢測要解決的問題是:找出圖像或視頻幀中所有的行人,包括位置和大小,一般用矩形框表示,和人臉檢測類似,這也是典型的目標檢測問題。

行人檢測技術有很強的使用價值,它可以與行人跟蹤,行人重識別等技術結合,應用于汽車無人駕駛系統(ADAS),智能機器人,智能視頻監控,人體行為分析,客流統計系統,智能交通等領域。

2.2 行人檢測技術難點

由于人體具有相當的柔性,因此會有各種姿態和形狀,其外觀受穿著,姿態,視角等影響非常大,另外還面臨著遮擋
、光照等因素的影響,這使得行人檢測成為計算機視覺領域中一個極具挑戰性的課題。行人檢測要解決的主要難題是:

  • 外觀差異大:包括視角,姿態,服飾和附著物,光照,成像距離等。從不同的角度看過去,行人的外觀是很不一樣的。處于不同姿態的行人,外觀差異也很大。由于人穿的衣服不同,以及打傘、戴帽子、戴圍巾、提行李等附著物的影響,外觀差異也非常大。光照的差異也導致了一些困難。遠距離的人體和近距離的人體,在外觀上差別也非常大。

  • 遮擋問題: 在很多應用場景中,行人非常密集,存在嚴重的遮擋,我們只能看到人體的一部分,這對檢測算法帶來了嚴重的挑戰。

  • 背景復雜:無論是室內還是室外,行人檢測一般面臨的背景都非常復雜,有些物體的外觀和形狀、顏色、紋理很像人體,導致算法無法準確的區分。

  • 檢測速度:行人檢測一般采用了復雜的模型,運算量相當大,要達到實時非常困難,一般需要大量的優化。

2.3 行人檢測實現效果

在這里插入圖片描述

檢測到行人后還可以做流量分析:

在這里插入圖片描述

2.4 關鍵代碼-訓練過程

?

import cv2import numpy as npimport randomdef load_images(dirname, amout = 9999):img_list = []file = open(dirname)img_name = file.readline()while img_name != '':  # 文件尾img_name = dirname.rsplit(r'/', 1)[0] + r'/' + img_name.split('/', 1)[1].strip('\n')img_list.append(cv2.imread(img_name))img_name = file.readline()amout -= 1if amout <= 0: # 控制讀取圖片的數量breakreturn img_list# 從每一張沒有人的原始圖片中隨機裁出10張64*128的圖片作為負樣本def sample_neg(full_neg_lst, neg_list, size):random.seed(1)width, height = size[1], size[0]for i in range(len(full_neg_lst)):for j in range(10):y = int(random.random() * (len(full_neg_lst[i]) - height))x = int(random.random() * (len(full_neg_lst[i][0]) - width))neg_list.append(full_neg_lst[i][y:y + height, x:x + width])return neg_list# wsize: 處理圖片大小,通常64*128; 輸入圖片尺寸>= wsizedef computeHOGs(img_lst, gradient_lst, wsize=(128, 64)):hog = cv2.HOGDescriptor()# hog.winSize = wsizefor i in range(len(img_lst)):if img_lst[i].shape[1] >= wsize[1] and img_lst[i].shape[0] >= wsize[0]:roi = img_lst[i][(img_lst[i].shape[0] - wsize[0]) // 2: (img_lst[i].shape[0] - wsize[0]) // 2 + wsize[0], \(img_lst[i].shape[1] - wsize[1]) // 2: (img_lst[i].shape[1] - wsize[1]) // 2 + wsize[1]]gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)gradient_lst.append(hog.compute(gray))# return gradient_lstdef get_svm_detector(svm):sv = svm.getSupportVectors()rho, _, _ = svm.getDecisionFunction(0)sv = np.transpose(sv)return np.append(sv, [[-rho]], 0)# 主程序# 第一步:計算HOG特征neg_list = []pos_list = []gradient_lst = []labels = []hard_neg_list = []svm = cv2.ml.SVM_create()pos_list = load_images(r'G:/python_project/INRIAPerson/96X160H96/Train/pos.lst')full_neg_lst = load_images(r'G:/python_project/INRIAPerson/train_64x128_H96/neg.lst')sample_neg(full_neg_lst, neg_list, [128, 64])print(len(neg_list))computeHOGs(pos_list, gradient_lst)[labels.append(+1) for _ in range(len(pos_list))]computeHOGs(neg_list, gradient_lst)[labels.append(-1) for _ in range(len(neg_list))]# 第二步:訓練SVMsvm.setCoef0(0)svm.setCoef0(0.0)svm.setDegree(3)criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 1e-3)svm.setTermCriteria(criteria)svm.setGamma(0)svm.setKernel(cv2.ml.SVM_LINEAR)svm.setNu(0.5)svm.setP(0.1)  # for EPSILON_SVR, epsilon in loss function?svm.setC(0.01)  # From paper, soft classifiersvm.setType(cv2.ml.SVM_EPS_SVR)  # C_SVC # EPSILON_SVR # may be also NU_SVR # do regression tasksvm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))# 第三步:加入識別錯誤的樣本,進行第二輪訓練# 參考 http://masikkk.com/article/SVM-HOG-HardExample/hog = cv2.HOGDescriptor()hard_neg_list.clear()hog.setSVMDetector(get_svm_detector(svm))for i in range(len(full_neg_lst)):rects, wei = hog.detectMultiScale(full_neg_lst[i], winStride=(4, 4),padding=(8, 8), scale=1.05)for (x,y,w,h) in rects:hardExample = full_neg_lst[i][y:y+h, x:x+w]hard_neg_list.append(cv2.resize(hardExample,(64,128)))computeHOGs(hard_neg_list, gradient_lst)[labels.append(-1) for _ in range(len(hard_neg_list))]svm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))# 第四步:保存訓練結果hog.setSVMDetector(get_svm_detector(svm))hog.save('myHogDector.bin')

最后

🧿 更多資料, 項目分享:

https://gitee.com/dancheng-senior/postgraduate

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

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

相關文章

什么是Nginx反向代理?Nginx反向代理配置指南

Nginx反向代理是一種常見的服務器架構模式&#xff0c;它可以將客戶端請求轉發到多個后端服務器上&#xff0c;從而實現負載均衡、高可用性和安全性。本文將介紹Nginx反向代理的基本概念和配置方法。 什么是Nginx反向代理&#xff1f; 在傳統的Web服務器架構中&#xff0c;客戶…

解決selenium使用.get()報錯:unknown error: unsupported protocol

解決方法 將原來的&#xff1a; url "https://www.baidu.com" browser.get(url)替換為&#xff1a; url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()問題解析 之前運行都是正…

【后端學前端學習記錄】學習計劃

1、個人背景 寫了足夠久的后端了&#xff0c;常用的語言基本上都接觸過&#xff0c;沒有在工作中寫過前端 一直想做一些前端的工作&#xff0c;但是前端技能不足加上自己審美不行&#xff0c;寫出的界面總是很丑 所以一直對前端做不好&#xff0c;也沒有真正下手。 2、動機 種…

Navicat 技術指引 | 連接 GaussDB 分布式

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

SLAM ORB-SLAM2(11)單目初始化

SLAM ORB-SLAM2(11)單目初始化 1. 初始化工作1.1. 單應矩陣(Homography Matrix)1.2. 基礎矩陣(Fundamental Matrix)1.3. 本質矩陣(Essential Matrix)1.4. 初始化過程2. 業務流程2.1. 創建單目初始化器2.2. 判斷連續幀的特征點數目2.3. 在兩幀中找匹配的特征點對2.4. 估…

軟件兼容性測試:保障多樣化用戶體驗的重要功能

隨著移動設備和操作系統的快速發展&#xff0c;軟件兼容性測試變得越發重要。這項測試確保軟件在不同平臺、設備和環境下都能夠正常運行&#xff0c;提供一致而穩定的用戶體驗。下面是軟件兼容性測試中的一些關鍵功能&#xff1a; 1. 跨平臺兼容性測試 在不同操作系統上運行的軟…

【flink番外篇】1、flink的23種常用算子介紹及詳細示例(3)-window、distinct、join等

Flink 系列文章 一、Flink 專欄 Flink 專欄系統介紹某一知識點&#xff0c;并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關基礎內容。 2、Flink基礎系列 本部分介紹Flink 的基礎部分&#xff0c;比如術語、架構、編程模型、編程指南、基本的…

macOS Big Sur/Mac電腦安裝vscode顯示您沒有權限來打開應用程序‘Visual Studio Code‘ 請聯系您的電腦或網絡管理員問題修復

錯誤方法 首先我以為我的權限不足。&#xff0c;需要去用戶群組里設置。結果根本不是這個的問題。 1.在系統偏好設置->用戶與群組檢查了一下我的用戶是不是管理員 結果發現是管理員 2.根據蘋果提示&#xff0c;右鍵我的文件夾->顯示簡介->最下面的共享與權限 解鎖&…

SAP UI5 walkthrough step5 Controllers

在這個章節&#xff0c;我們要做的是&#xff0c;將之前的text文本展示為一個按鈕&#xff0c;并將聲明綁定在點擊按鈕事件。 因為改的是外觀&#xff0c;所以我們修改的是view.XML webapp/view/App.view.xml <mvc:ViewcontrollerName"ui5.walkthrough.controller.A…

element中el-select多選v-model是對象數組

文章目錄 一、問題二、解決三、最后 一、問題 element中的el-select的v-model一般都是字符串或者字符串數組&#xff0c;但是有些時候后端接口要求該字段要傳對象或者對象數組&#xff0c;如果再轉換一次數據&#xff0c;對于保存配置和回顯都是吃力不討好的事情。如下所示&am…

SpringBoot 項目將jar 部署在服務器引用外部 配置文件

SpringBoot 官方給出了四種方式引用外部配置文件的方式 在jar包的同一目錄下建一個config文件夾&#xff0c;然后把配置文件放到這個文件夾下(最常用)直接把配置文件放到jar包的同級目錄在classpath下建一個config文件夾&#xff0c;然后把配置文件放進去在classpath下直接放配…

圖片整理

Lily上課時使用字母數字圖片教小朋友們學習英語單詞&#xff0c;每次都需要把這些圖片按照大小&#xff08;ASCII碼值從小到大&#xff09;排列收好。請大家給Lily幫忙&#xff0c;通過代碼解決。 Lily使用的圖片使用字符"A"到"Z"、“a"到"z”、…

centos7做gitlab數據災備項目地址指向問題

如果你在 CentOS 7 上使用 GitLab 時&#xff0c;它回復的數據指向了另一個服務器的地址&#xff0c;可能是因為配置文件中的一些設置不正確。 要解決這個問題&#xff0c;可以嘗試以下幾個步驟&#xff1a; 檢查 GitLab 配置文件&#xff1a;打開 GitLab 的配置文件&#xf…

python寫數據進es中

1、自定義inde為&#xff1a;xxxx&#xff0c;data_to_insert也可以自定義函數 from elasticsearch import Elasticsearch from datetime import datetime, timedelta es Elasticsearch([http://es地址1:9200, es地址2:9200, es地址3:9200]) current_date datetime.now() for…

NTP時鐘同步服務器(校時服務器)技術參數分享

NTP時鐘同步服務器&#xff08;校時服務器&#xff09;技術參數分享 網絡校時服務器是一款先進的智能化高精度時鐘同步設備。 網絡校時服務器從 GPS、北斗、GLONASS、Galileo等導航定位衛星系統上獲取標準時間信息&#xff0c;并通過 NTP/SNTP 或其他網絡協議&#xff0c;在網絡…

二叉樹的層序遍歷[中等]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你二叉樹的根節點root&#xff0c;返回其節點值的 層序遍歷 。&#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;[[3],…

設計模式的定義

1 組合模式: 整體-部分模式,它是一種將對象組合成樹狀層次結構的模式,用來表示整體和部分的關系,使用戶對單個對象和組合對象具有一致的訪問性,屬于結構型設計模式 1.1 特點: 組合模式使得客戶端代碼可以一致的處理單個對象和組合對象更容易在組合體內加入新的對象,客戶端不…

【數據挖掘】工具整理 - 期刊 - 會議 - 論壇/博客 - 數據集

文章目錄 1 期刊2 會議3 論壇/博客4 數據集 1 期刊 Data Mining and Knowledge Discovery (DMKD)IEEE Transactions on Knowledge and Data Engineering (TKDE)Knowledge and Information Systems(KAIS)IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAM…

二叉樹的遍歷之迭代遍歷

前言&#xff1a;在學習二叉樹的時候我們基本上已經了解過二叉樹的三種遍歷&#xff0c;對于這三種遍歷&#xff0c;我們采用遞歸的思路&#xff0c;很簡單的就能實現&#xff0c;那么如何用迭代的方法去解決問題&#xff1f; 我們首先來看第一個&#xff1a; 前序遍歷 144.…

【計算機網絡學習之路】HTTP請求

目錄 前言 HTTP請求報文格式 一. 請求行 HTTP請求方法 GET和POST的區別 URL 二. 請求頭 常見的Header 常見的額請求體數據類型 三. 請求體 結束語 前言 HTTP是應用層的一個協議。實際我們訪問一個網頁&#xff0c;都會像該網頁的服務器發送HTTP請求&#xff0c;服務…