文章目錄
-
0 前言+ 1. 目標(biāo)檢測概況+
-
1.1 什么是目標(biāo)檢測?+ 1.2 發(fā)展階段
-
2. 行人檢測+
-
2.1 行人檢測簡介+ 2.2 行人檢測技術(shù)難點+ 2.3 行人檢測實現(xiàn)效果+ 2.4 關(guān)鍵代碼-訓(xùn)練過程
-
最后
設(shè)計項目案例演示地址: 鏈接
畢業(yè)設(shè)計代做一對一指導(dǎo)項目方向涵蓋:
基于Python,MATLAB設(shè)計,OpenCV,,CNN,機器學(xué)習(xí),R-CNN,GCN,LSTM,SVM,BP目標(biāo)檢測、語義分割、Re-ID、醫(yī)學(xué)圖像分割、目標(biāo)跟蹤、人臉識別、數(shù)據(jù)增廣、
人臉檢測、顯著性目標(biāo)檢測、自動駕駛、人群密度估計、3D目標(biāo)檢測、CNN、AutoML、圖像分割、SLAM、實例分割、人體姿態(tài)估計、視頻目標(biāo)分割,PyTorch、人臉檢測、車道線檢測、去霧 、全景分割、
行人檢測、文本檢測、OCR、姿態(tài)估計、邊緣檢測、場景文本檢測、視頻實例分割、3D點云、模型壓縮、人臉對齊、超分辨、去噪、強化學(xué)習(xí)、行為識別、OpenCV、場景文本識別、去雨、機器學(xué)習(xí)、風(fēng)格遷移、
視頻目標(biāo)檢測、去模糊、活體檢測、人臉關(guān)鍵點檢測、3D目標(biāo)跟蹤、視頻修復(fù)、人臉表情識別、時序動作檢測、圖像檢索、異常檢測等畢設(shè)指導(dǎo),畢設(shè)選題,畢業(yè)設(shè)計開題報告,
1. 目標(biāo)檢測概況
1.1 什么是目標(biāo)檢測?
目標(biāo)檢測,粗略來說就是:輸入圖片/視頻,經(jīng)過處理,得到:目標(biāo)的位置信息(比如左上角和右下角的坐標(biāo))、目標(biāo)的預(yù)測類別、目標(biāo)的預(yù)測置信度(confidence)。
1.2 發(fā)展階段
-
手工特征提取算法,如VJ、HOG、DPM + R-CNN算法(2014),最早的基于深度學(xué)習(xí)的目標(biāo)檢測器之一,其結(jié)構(gòu)是兩級網(wǎng)絡(luò):
-
1)首先需要諸如選擇性搜索之類的算法來提出可能包含對象的候選邊界框;+ 2)然后將這些區(qū)域傳遞到CNN算法進行分類;
-
R-CNN算法存在的問題是其仿真很慢,并且不是完整的端到端的目標(biāo)檢測器。 + Fast R-CNN算法(2014末),對原始R-CNN進行了相當(dāng)大的改進:提高準(zhǔn)確度,并減少執(zhí)行正向傳遞所花費的時間。 是,該模型仍然依賴于外部區(qū)域搜索算法。 + faster R-CNN算法(2015),真正的端到端深度學(xué)習(xí)目標(biāo)檢測器。刪除了選擇性搜索的要求,而是依賴于
-
(1)完全卷積的區(qū)域提議網(wǎng)絡(luò)(RPN, Region Purpose Network),可以預(yù)測對象邊界框和“對象”分?jǐn)?shù)(量化它是一個區(qū)域的可能性的分?jǐn)?shù))。+ (2)然后將RPN的輸出傳遞到R-CNN組件以進行最終分類和標(biāo)記。
-
R-CNN系列算法,都采取了two-stage策略。特點是:雖然檢測結(jié)果一般都非常準(zhǔn)確,但仿真速度非常慢,即使是在GPU上也僅獲得5 FPS。 + one-stage方法有:yolo(2015)、SSD(2015末),以及在這兩個算法基礎(chǔ)上改進的各論文提出的算法。這些算法的基本思路是:均勻地在圖片的不同位置進行密集抽樣,抽樣時可以采用不同尺度和長寬比,然后利用CNN提取特征后直接進行分類與回歸。 整個過程只需要一步,所以其優(yōu)勢是速度快,但是訓(xùn)練比較困難。 + yolov3(2018)是yolo作者提出的第三個版本(之前還提過yolov2和它們的tinny版本,tinny版本經(jīng)過壓縮更快但是也降低了準(zhǔn)確率)。
2. 行人檢測
這里學(xué)長以行人檢測作為例子來講解目標(biāo)檢測。
2.1 行人檢測簡介
行人檢測( Pedestrian Detection)一直是計算機視覺研究中的熱點和難點。行人檢測要解決的問題是:找出圖像或視頻幀中所有的行人,包括位置和大小,一般用矩形框表示,和人臉檢測類似,這也是典型的目標(biāo)檢測問題。
行人檢測技術(shù)有很強的使用價值,它可以與行人跟蹤,行人重識別等技術(shù)結(jié)合,應(yīng)用于汽車無人駕駛系統(tǒng)(ADAS),智能機器人,智能視頻監(jiān)控,人體行為分析,客流統(tǒng)計系統(tǒng),智能交通等領(lǐng)域。
2.2 行人檢測技術(shù)難點
由于人體具有相當(dāng)?shù)娜嵝?,因此會有各種姿態(tài)和形狀,其外觀受穿著,姿態(tài),視角等影響非常大,另外還面臨著遮擋 、光照等因素的影響,這使得行人檢測成為計算機視覺領(lǐng)域中一個極具挑戰(zhàn)性的課題。行人檢測要解決的主要難題是:
- 外觀差異大:包括視角,姿態(tài),服飾和附著物,光照,成像距離等。從不同的角度看過去,行人的外觀是很不一樣的。處于不同姿態(tài)的行人,外觀差異也很大。由于人穿的衣服不同,以及打傘、戴帽子、戴圍巾、提行李等附著物的影響,外觀差異也非常大。光照的差異也導(dǎo)致了一些困難。遠距離的人體和近距離的人體,在外觀上差別也非常大。 + 遮擋問題: 在很多應(yīng)用場景中,行人非常密集,存在嚴(yán)重的遮擋,我們只能看到人體的一部分,這對檢測算法帶來了嚴(yán)重的挑戰(zhàn)。 + 背景復(fù)雜:無論是室內(nèi)還是室外,行人檢測一般面臨的背景都非常復(fù)雜,有些物體的外觀和形狀、顏色、紋理很像人體,導(dǎo)致算法無法準(zhǔn)確的區(qū)分。 + 檢測速度:行人檢測一般采用了復(fù)雜的模型,運算量相當(dāng)大,要達到實時非常困難,一般需要大量的優(yōu)化。
2.3 行人檢測實現(xiàn)效果
檢測到行人后還可以做流量分析:文章來源:http://www.zghlxwxcb.cn/news/detail-767679.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-767679.html
2.4 關(guān)鍵代碼-訓(xùn)練過程
import cv2
import numpy as np
import random
def 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 -= 1
if amout <= 0: # 控制讀取圖片的數(shù)量
break
return img_list
# 從每一張沒有人的原始圖片中隨機裁出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 = wsize
for 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_lst
def 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))]
# 第二步:訓(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))
# 第三步:加入識別錯誤的樣本,進行第二輪訓(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')
## 最后
ge(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')
最后
設(shè)計項目案例演示地址: 鏈接
畢業(yè)設(shè)計代做一對一指導(dǎo)項目方向涵蓋:
基于Python,MATLAB設(shè)計,OpenCV,,CNN,機器學(xué)習(xí),R-CNN,GCN,LSTM,SVM,BP目標(biāo)檢測、語義分割、Re-ID、醫(yī)學(xué)圖像分割、目標(biāo)跟蹤、人臉識別、數(shù)據(jù)增廣、
人臉檢測、顯著性目標(biāo)檢測、自動駕駛、人群密度估計、3D目標(biāo)檢測、CNN、AutoML、圖像分割、SLAM、實例分割、人體姿態(tài)估計、視頻目標(biāo)分割,PyTorch、人臉檢測、車道線檢測、去霧 、全景分割、
行人檢測、文本檢測、OCR、姿態(tài)估計、邊緣檢測、場景文本檢測、視頻實例分割、3D點云、模型壓縮、人臉對齊、超分辨、去噪、強化學(xué)習(xí)、行為識別、OpenCV、場景文本識別、去雨、機器學(xué)習(xí)、風(fēng)格遷移、
視頻目標(biāo)檢測、去模糊、活體檢測、人臉關(guān)鍵點檢測、3D目標(biāo)跟蹤、視頻修復(fù)、人臉表情識別、時序動作檢測、圖像檢索、異常檢測等畢設(shè)指導(dǎo),畢設(shè)選題,畢業(yè)設(shè)計開題報告,
到了這里,關(guān)于基于opencv深度學(xué)習(xí),交通目標(biāo)檢測,行人車輛檢測,人流統(tǒng)計,交通流量檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!