怎么注冊網(wǎng)址免費(fèi)國內(nèi)seo做最好的公司
文章目錄
- 0 前言
- 1.前言
- 2.實(shí)現(xiàn)效果
- 3.相關(guān)技術(shù)原理
- 3.1卷積神經(jīng)網(wǎng)絡(luò)
- 3.1YOLOV5簡介
- 3.2 YOLOv5s 模型算法流程和原理
- 4.數(shù)據(jù)集處理
- 3.1 數(shù)據(jù)標(biāo)注簡介
- 3.2 數(shù)據(jù)保存
- 5.模型訓(xùn)練
- 6 最后
0 前言
🔥 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
🚩 **基于深度學(xué)習(xí)的人體跌倒檢測算法研究與實(shí)現(xiàn) **
🥇學(xué)長這里給一個(gè)題目綜合評分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):5分
1.前言
人體跌倒是人們?nèi)粘I钪谐R娮藨B(tài)之一,且跌倒的發(fā)生具有隨機(jī)、難以預(yù)測的特點(diǎn);其次,跌倒會給人體造成不同程度的傷害,很多人跌倒后由于得不到及時(shí)的救助而加重受到的傷害,甚至出現(xiàn)殘疾或者死亡的情況;同時(shí)隨著人口老齡化問題的日漸加劇,跌倒已經(jīng)成為了我國65周歲以上老人受傷致死的主要原因。因此,跌倒事件嚴(yán)重影響著人們的身體健康,跌倒檢測具有十分重要的研究意義。
2.實(shí)現(xiàn)效果
跌倒效果
站立、蹲坐效果
3.相關(guān)技術(shù)原理
3.1卷積神經(jīng)網(wǎng)絡(luò)
簡介
CNN 是目前機(jī)器用來識別物體的圖像處理器。CNN 已成為當(dāng)今自動(dòng)駕駛汽車、石油勘探和聚變能研究領(lǐng)域的眼睛。在醫(yī)學(xué)成像方面,它們可以幫助更快速發(fā)現(xiàn)疾病并挽救生命。得益于 CNN 和遞歸神經(jīng)網(wǎng)絡(luò) (RNN),各種 AI 驅(qū)動(dòng)型機(jī)器都具備了像我們眼睛一樣的能力。經(jīng)過在深度神經(jīng)網(wǎng)絡(luò)領(lǐng)域數(shù)十年的發(fā)展以及在處理海量數(shù)據(jù)的 GPU 高性能計(jì)算方面的長足進(jìn)步,大部分 AI 應(yīng)用都已成為可能。
原理
人工神經(jīng)網(wǎng)絡(luò)是一個(gè)硬件和/或軟件系統(tǒng),模仿神經(jīng)元在人類大腦中的運(yùn)轉(zhuǎn)方式。卷積神經(jīng)網(wǎng)絡(luò) (CNN) 通常會在多個(gè)全連接或池化的卷積層中應(yīng)用多層感知器(對視覺輸入內(nèi)容進(jìn)行分類的算法)的變體。
CNN 的學(xué)習(xí)方式與人類相同。人類出生時(shí)并不知道貓或鳥長什么樣。隨著我們長大成熟,我們學(xué)到了某些形狀和顏色對應(yīng)某些元素,而這些元素共同構(gòu)成了一種元素。學(xué)習(xí)了爪子和喙的樣子后,我們就能更好地區(qū)分貓和鳥。
神經(jīng)網(wǎng)絡(luò)的工作原理基本也是這樣。通過處理標(biāo)記圖像的訓(xùn)練集,機(jī)器能夠?qū)W習(xí)識別元素,即圖像中對象的特征。
CNN 是頗受歡迎的深度學(xué)習(xí)算法類型之一。卷積是將濾波器應(yīng)用于輸入內(nèi)容的簡單過程,會帶來以數(shù)值形式表示的激活。通過對圖像反復(fù)應(yīng)用同一濾波器,會生成名為特征圖的激活圖。這表示檢測到的特征的位置和強(qiáng)度。
卷積是一種線性運(yùn)算,需要將一組權(quán)重與輸入相乘,以生成稱為濾波器的二維權(quán)重?cái)?shù)組。如果調(diào)整濾波器以檢測輸入中的特定特征類型,則在整個(gè)輸入圖像中重復(fù)使用該濾波器可以發(fā)現(xiàn)圖像中任意位置的特征。
關(guān)鍵代碼
基于tensorflow的代碼實(shí)現(xiàn)
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('MNIST_data_bak/', one_hot=True)
sess = tf.InteractiveSession()# 截?cái)嗟恼植荚肼?#xff0c;標(biāo)準(zhǔn)差設(shè)為0.1
def weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)# 卷積層和池化層也是接下來要重復(fù)使用的,因此也為它們定義創(chuàng)建函數(shù)
# tf.nn.conv2d是TensorFlow中的2維卷積函數(shù),參數(shù)中x是輸入,W是卷積的參數(shù),比如[5, 5, 1, 32]
# 前面兩個(gè)數(shù)字代表卷積核的尺寸,第三個(gè)數(shù)字代表有多少個(gè)channel,因?yàn)槲覀冎挥谢叶葐紊?#xff0c;所以是1,如果是彩色的RGB圖片,這里是3
# 最后代表核的數(shù)量,也就是這個(gè)卷積層會提取多少類的特征# Strides代表卷積模板移動(dòng)的步長,都是1代表會不遺漏地劃過圖片的每一個(gè)點(diǎn)!Padding代表邊界的處理方式,這里的SAME代表給
# 邊界加上Padding讓卷積的輸出和輸入保持同樣SAME的尺寸
def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')# tf.nn.max_pool是TensorFlow中的最大池化函數(shù),我們這里使用2*2的最大池化,即將2*2的像素塊降為1*1的像素
# 最大池化會保留原始像素塊中灰度值最高的那一個(gè)像素,即保留最顯著的特征,因?yàn)橄Mw上縮小圖片尺寸,因此池化層
# strides也設(shè)為橫豎兩個(gè)方向以2為步長。如果步長還是1,那么我們會得到一個(gè)尺寸不變的圖片
def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')# 因?yàn)榫矸e神經(jīng)網(wǎng)絡(luò)會利用到空間結(jié)構(gòu)信息,因此需要將1D的輸入向量轉(zhuǎn)為2D的圖片結(jié)構(gòu),即從1*784的形式轉(zhuǎn)為原始的28*28的結(jié)構(gòu)
# 同時(shí)因?yàn)橹挥幸粋€(gè)顏色通道,故最終尺寸為[-1, 28, 28, 1],前面的-1代表樣本數(shù)量不固定,最后的1代表顏色通道數(shù)量
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
x_image = tf.reshape(x, [-1, 28, 28, 1])# 定義我的第一個(gè)卷積層,我們先使用前面寫好的函數(shù)進(jìn)行參數(shù)初始化,包括weights和bias,這里的[5, 5, 1, 32]代表卷積
# 核尺寸為5*5,1個(gè)顏色通道,32個(gè)不同的卷積核,然后使用conv2d函數(shù)進(jìn)行卷積操作,并加上偏置項(xiàng),接著再使用ReLU激活函數(shù)進(jìn)行
# 非線性處理,最后,使用最大池化函數(shù)max_pool_2*2對卷積的輸出結(jié)果進(jìn)行池化操作
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)# 第二層和第一個(gè)一樣,但是卷積核變成了64
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)# 因?yàn)榍懊娼?jīng)歷了兩次步長為2*2的最大池化,所以邊長已經(jīng)只有1/4了,圖片尺寸由28*28變成了7*7
# 而第二個(gè)卷積層的卷積核數(shù)量為64,其輸出的tensor尺寸即為7*7*64
# 我們使用tf.reshape函數(shù)對第二個(gè)卷積層的輸出tensor進(jìn)行變形,將其轉(zhuǎn)成1D的向量
# 然后連接一個(gè)全連接層,隱含節(jié)點(diǎn)為1024,并使用ReLU激活函數(shù)
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)# 防止過擬合,使用Dropout層
keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)# 接 Softmax分類
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# 定義損失函數(shù)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv),reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
3.1YOLOV5簡介
基于卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)的目標(biāo)檢測模型研究可按檢測階段分為兩類,一 類 是 基 于 候 選 框 的 兩 階 段 檢 測 , R-CNN 、 Fast R-CNN、Faster R-CNN、Mask R-CNN都是基于 目標(biāo)候選框的兩階段檢測方法;另一類是基于免候選框的單階段檢測,SSD、YOLO系列都是典型的基于回歸思想的單階段檢測方法。
YOLOv5 目標(biāo)檢測模型 2020年由Ultralytics發(fā)布的YOLOv5在網(wǎng)絡(luò)輕量化 上貢獻(xiàn)明顯,檢測速度更快也更加易于部署。與之前 版本不同,YOLOv5 實(shí)現(xiàn)了網(wǎng)絡(luò)架構(gòu)的系列化,分別 是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、 YOLOv5x。這5種模型的結(jié)構(gòu)相似,通過改變寬度倍 數(shù)(Depth multiple)來改變卷積過程中卷積核的數(shù)量, 通 過 改 變 深 度 倍 數(shù) (Width multiple) 來 改 變 BottleneckC3(帶3個(gè)CBS模塊的BottleneckCSP結(jié)構(gòu))中 C3的數(shù)量,從而實(shí)現(xiàn)不同網(wǎng)絡(luò)深度和不同網(wǎng)絡(luò)寬度之 間的組合,達(dá)到精度與效率的平衡。YOLOv5各版本性能如圖所示:
模型結(jié)構(gòu)圖如下:
3.2 YOLOv5s 模型算法流程和原理
YOLOv5s模型主要算法工作流程原理:
(1) 原始圖像輸入部分加入了圖像填充、自適應(yīng) 錨框計(jì)算、Mosaic數(shù)據(jù)增強(qiáng)來對數(shù)據(jù)進(jìn)行處理增加了 檢測的辨識度和準(zhǔn)確度。
(2) 主干網(wǎng)絡(luò)中采用Focus結(jié)構(gòu)和CSP1_X (X個(gè)殘差結(jié)構(gòu)) 結(jié)構(gòu)進(jìn)行特征提取。在特征生成部分, 使用基于SPP優(yōu)化后的SPPF結(jié)構(gòu)來完成。
(3) 頸部層應(yīng)用路徑聚合網(wǎng)絡(luò)[22](path-aggregation network, PANet)和CSP2_X進(jìn)行特征融合。
(4) 使用GIOU_Loss作為損失函數(shù)。
關(guān)鍵代碼:
4.數(shù)據(jù)集處理
獲取摔倒數(shù)據(jù)集準(zhǔn)備訓(xùn)練,如果沒有準(zhǔn)備好的數(shù)據(jù)集,可自己標(biāo)注,但過程會相對繁瑣
深度學(xué)習(xí)圖像標(biāo)注軟件眾多,按照不同分類標(biāo)準(zhǔn)有多中類型,本文使用LabelImg單機(jī)標(biāo)注軟件進(jìn)行標(biāo)注。LabelImg是基于角點(diǎn)的標(biāo)注方式產(chǎn)生邊界框,對圖片進(jìn)行標(biāo)注得到xml格式的標(biāo)注文件,由于邊界框?qū)z測精度的影響較大因此采用手動(dòng)標(biāo)注,并沒有使用自動(dòng)標(biāo)注軟件。
考慮到有的朋友時(shí)間不足,博主提供了標(biāo)注好的數(shù)據(jù)集和訓(xùn)練好的模型,需要請聯(lián)系。
3.1 數(shù)據(jù)標(biāo)注簡介
通過pip指令即可安裝
pip install labelimg
在命令行中輸入labelimg即可打開
打開你所需要進(jìn)行標(biāo)注的文件夾,點(diǎn)擊紅色框區(qū)域進(jìn)行標(biāo)注格式切換,我們需要yolo格式,因此切換到y(tǒng)olo
點(diǎn)擊Create RectBo -> 拖拽鼠標(biāo)框選目標(biāo) -> 給上標(biāo)簽 -> 點(diǎn)擊ok
3.2 數(shù)據(jù)保存
點(diǎn)擊save,保存txt。
5.模型訓(xùn)練
配置超參數(shù)
主要是配置data文件夾下的yaml中的數(shù)據(jù)集位置和種類:
配置模型
這里主要是配置models目錄下的模型yaml文件,主要是進(jìn)去后修改nc這個(gè)參數(shù)來進(jìn)行類別的修改。
目前支持的模型種類如下所示:
訓(xùn)練
如果上面的數(shù)據(jù)集和兩個(gè)yaml文件的參數(shù)都修改好了的話,就可以開始yolov5的訓(xùn)練了。首先我們找到train.py這個(gè)py文件。
然后找到主函數(shù)的入口,這里面有模型的主要參數(shù)。修改train.py中的weights、cfg、data、epochs、batch_size、imgsz、device、workers等參數(shù)
至此,就可以運(yùn)行train.py函數(shù)訓(xùn)練自己的模型了。
訓(xùn)練代碼成功執(zhí)行之后會在命令行中輸出下列信息,接下來就是安心等待模型訓(xùn)練結(jié)束即可。