日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【毕业设计】深度学习行人车辆流量计数系统 - 目标检测 python

發(fā)布時(shí)間:2024/3/24 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【毕业设计】深度学习行人车辆流量计数系统 - 目标检测 python 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 0 前言
  • 1. 目標(biāo)檢測(cè)概況
    • 1.1 什么是目標(biāo)檢測(cè)?
    • 1.2 發(fā)展階段
  • 2. 行人檢測(cè)
    • 2.1 行人檢測(cè)簡(jiǎn)介
    • 2.2 行人檢測(cè)技術(shù)難點(diǎn)
    • 2.3 行人檢測(cè)實(shí)現(xiàn)效果
    • 2.4 關(guān)鍵代碼-訓(xùn)練過(guò)程
  • 3 最后


0 前言

🔥 Hi,大家好,這里是丹成學(xué)長(zhǎng)的畢設(shè)系列文章!

🔥 對(duì)畢設(shè)有任何疑問(wèn)都可以問(wèn)學(xué)長(zhǎng)哦!

這兩年開(kāi)始,各個(gè)學(xué)校對(duì)畢設(shè)的要求越來(lái)越高,難度也越來(lái)越大… 畢業(yè)設(shè)計(jì)耗費(fèi)時(shí)間,耗費(fèi)精力,甚至有些題目即使是專(zhuān)業(yè)的老師或者碩士生也需要很長(zhǎng)時(shí)間,所以一旦發(fā)現(xiàn)問(wèn)題,一定要提前準(zhǔn)備,避免到后面措手不及,草草了事。

為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的新項(xiàng)目是

🚩 目標(biāo)檢測(cè)-行人車(chē)輛檢測(cè)流量計(jì)數(shù)

🥇學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿(mǎn)分5分)

  • 難度系數(shù):4分
  • 工作量:4分
  • 創(chuàng)新點(diǎn):3分

🧿 選題指導(dǎo), 項(xiàng)目分享:

https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md


1. 目標(biāo)檢測(cè)概況

1.1 什么是目標(biāo)檢測(cè)?

目標(biāo)檢測(cè),粗略來(lái)說(shuō)就是:輸入圖片/視頻,經(jīng)過(guò)處理,得到:目標(biāo)的位置信息(比如左上角和右下角的坐標(biāo))、目標(biāo)的預(yù)測(cè)類(lèi)別、目標(biāo)的預(yù)測(cè)置信度(confidence)。

1.2 發(fā)展階段

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

  • R-CNN算法(2014),最早的基于深度學(xué)習(xí)的目標(biāo)檢測(cè)器之一,其結(jié)構(gòu)是兩級(jí)網(wǎng)絡(luò):

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

  • Fast R-CNN算法(2014末),對(duì)原始R-CNN進(jìn)行了相當(dāng)大的改進(jìn):提高準(zhǔn)確度,并減少執(zhí)行正向傳遞所花費(fèi)的時(shí)間。
    是,該模型仍然依賴(lài)于外部區(qū)域搜索算法。

  • faster R-CNN算法(2015),真正的端到端深度學(xué)習(xí)目標(biāo)檢測(cè)器。刪除了選擇性搜索的要求,而是依賴(lài)于

    • (1)完全卷積的區(qū)域提議網(wǎng)絡(luò)(RPN, Region Purpose Network),可以預(yù)測(cè)對(duì)象邊界框和“對(duì)象”分?jǐn)?shù)(量化它是一個(gè)區(qū)域的可能性的分?jǐn)?shù))。
    • (2)然后將RPN的輸出傳遞到R-CNN組件以進(jìn)行最終分類(lèi)和標(biāo)記。
  • R-CNN系列算法,都采取了two-stage策略。特點(diǎn)是:雖然檢測(cè)結(jié)果一般都非常準(zhǔn)確,但仿真速度非常慢,即使是在GPU上也僅獲得5 FPS。

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

  • yolov3(2018)是yolo作者提出的第三個(gè)版本(之前還提過(guò)yolov2和它們的tinny版本,tinny版本經(jīng)過(guò)壓縮更快但是也降低了準(zhǔn)確率)。

  • 2. 行人檢測(cè)

    這里學(xué)長(zhǎng)以行人檢測(cè)作為例子來(lái)講解目標(biāo)檢測(cè)。

    2.1 行人檢測(cè)簡(jiǎn)介

    行人檢測(cè)( Pedestrian Detection)一直是計(jì)算機(jī)視覺(jué)研究中的熱點(diǎn)和難點(diǎn)。行人檢測(cè)要解決的問(wèn)題是:找出圖像或視頻幀中所有的行人,包括位置和大小,一般用矩形框表示,和人臉檢測(cè)類(lèi)似,這也是典型的目標(biāo)檢測(cè)問(wèn)題。

    行人檢測(cè)技術(shù)有很強(qiáng)的使用價(jià)值,它可以與行人跟蹤,行人重識(shí)別等技術(shù)結(jié)合,應(yīng)用于汽車(chē)無(wú)人駕駛系統(tǒng)(ADAS),智能機(jī)器人,智能視頻監(jiān)控,人體行為分析,客流統(tǒng)計(jì)系統(tǒng),智能交通等領(lǐng)域。

    2.2 行人檢測(cè)技術(shù)難點(diǎn)

    由于人體具有相當(dāng)?shù)娜嵝?#xff0c;因此會(huì)有各種姿態(tài)和形狀,其外觀受穿著,姿態(tài),視角等影響非常大,另外還面臨著遮擋 、光照等因素的影響,這使得行人檢測(cè)成為計(jì)算機(jī)視覺(jué)領(lǐng)域中一個(gè)極具挑戰(zhàn)性的課題。行人檢測(cè)要解決的主要難題是:

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

    • 遮擋問(wèn)題: 在很多應(yīng)用場(chǎng)景中,行人非常密集,存在嚴(yán)重的遮擋,我們只能看到人體的一部分,這對(duì)檢測(cè)算法帶來(lái)了嚴(yán)重的挑戰(zhàn)。

    • 背景復(fù)雜:無(wú)論是室內(nèi)還是室外,行人檢測(cè)一般面臨的背景都非常復(fù)雜,有些物體的外觀和形狀、顏色、紋理很像人體,導(dǎo)致算法無(wú)法準(zhǔn)確的區(qū)分。

    • 檢測(cè)速度:行人檢測(cè)一般采用了復(fù)雜的模型,運(yùn)算量相當(dāng)大,要達(dá)到實(shí)時(shí)非常困難,一般需要大量的優(yōu)化。

    2.3 行人檢測(cè)實(shí)現(xiàn)效果

    檢測(cè)到行人后還可以做流量分析:

    2.4 關(guān)鍵代碼-訓(xùn)練過(guò)程

    import cv2 import numpy as np import 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: # 控制讀取圖片的數(shù)量breakreturn img_list# 從每一張沒(méi)有人的原始圖片中隨機(jī)裁出10張64*128的圖片作為負(fù)樣本 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; 輸入圖片尺寸>= wsize def 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)# 主程序 # 第一步:計(jì)算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))]# 第二步:訓(xùn)練SVM svm.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 classifier svm.setType(cv2.ml.SVM_EPS_SVR) # C_SVC # EPSILON_SVR # may be also NU_SVR # do regression task svm.train(np.array(gradient_lst), cv2.ml.ROW_SAMPLE, np.array(labels))# 第三步:加入識(shí)別錯(cuò)誤的樣本,進(jìn)行第二輪訓(xùn)練 # 參考 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))# 第四步:保存訓(xùn)練結(jié)果 hog.setSVMDetector(get_svm_detector(svm)) hog.save('myHogDector.bin')

    3 最后

    總結(jié)

    以上是生活随笔為你收集整理的【毕业设计】深度学习行人车辆流量计数系统 - 目标检测 python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。