閥門網(wǎng)站建設(shè)國色天香站長工具
本研究提出了一種基于YOLOv8深度學習的智慧課堂學生專注度檢測系統(tǒng),旨在實現(xiàn)對課堂中學生專注度的實時分析與評估。隨著智慧教育的快速發(fā)展,學生的課堂表現(xiàn)和專注度成為評估學習效果的重要因素之一。然而,傳統(tǒng)的專注度評估方法往往依賴于主觀觀察或通過問卷調(diào)查收集信息,存在耗時、效率低下、主觀性強等問題。為了解決這些問題,本文設(shè)計了一種基于YOLOv8目標檢測算法的智能系統(tǒng),結(jié)合深度學習技術(shù),對學生的面部表情、姿態(tài)、眼動等多種行為特征進行自動檢測和分類,從而對其專注度進行科學量化。
該系統(tǒng)采用PyQt5作為用戶界面,界面簡潔直觀,用戶能夠通過該平臺實時監(jiān)控課堂中的學生表現(xiàn)。通過自定義的數(shù)據(jù)集,該系統(tǒng)將學生的專注度劃分為七個等級,分別是:中等專注、較高專注、高度專注、沒有專注、低專注、中等偏低專注和較低專注。每個專注度等級的劃分基于學生的多模態(tài)行為特征,尤其是面部表情變化、頭部運動和眼神專注方向等,深度學習模型通過大量數(shù)據(jù)的訓練和優(yōu)化,能夠精準識別這些特征并做出判斷。
在系統(tǒng)的實現(xiàn)過程中,本文詳細描述了數(shù)據(jù)采集、標注以及模型訓練的全過程。使用的YOLOv8深度學習模型因其強大的檢測精度和實時性,能夠快速響應(yīng)并處理多名學生的專注度信息。此外,系統(tǒng)還提供了結(jié)果的可視化功能,教師可以通過界面查看專注度分類結(jié)果,及時了解課堂中每個學生的專注狀態(tài)。系統(tǒng)還支持對歷史數(shù)據(jù)的統(tǒng)計和分析,幫助教育工作者從更長遠的時間尺度上觀察學生的專注度變化,為教學改進提供數(shù)據(jù)支持。
實驗部分,本研究在多個真實課堂場景中對系統(tǒng)進行了驗證。實驗結(jié)果表明,系統(tǒng)在準確性、魯棒性和實時性方面表現(xiàn)優(yōu)異,能夠有效應(yīng)對不同照明條件、學生面部遮擋等復(fù)雜場景。與現(xiàn)有方法相比,該系統(tǒng)不僅提高了檢測效率,還減少了教師的負擔,進一步增強了課堂管理的智能化水平。該系統(tǒng)的應(yīng)用前景廣泛,不僅可用于課堂教學,還可以在遠程教育、個性化學習管理等領(lǐng)域發(fā)揮重要作用。
本文所提出的基于YOLOv8的智慧課堂學生專注度檢測系統(tǒng),為教育領(lǐng)域的智能化管理提供了一種全新的解決方案。未來,隨著數(shù)據(jù)集的進一步豐富和模型性能的持續(xù)優(yōu)化,該系統(tǒng)有望在更大范圍內(nèi)推廣應(yīng)用,推動智慧教育的深度發(fā)展。
算法流程
項目數(shù)據(jù)
通過搜集關(guān)于數(shù)據(jù)集為各種各樣的學生專注度相關(guān)圖像,并使用Labelimg標注工具對每張圖片進行標注,分7檢測類別,分別是’中等專注’,’較高專注’,’高度專注’,’沒有專注’,’低專注’,’中等偏低專注’,’較低專注’。
目標檢測標注工具
(1)labelimg:開源的圖像標注工具,標簽可用于分類和目標檢測,它是用python寫的,并使用Qt作為其圖形界面,簡單好用(雖然是英文版的)。其注釋以 PASCAL VOC格式保存為XML文件,這是ImageNet使用的格式。此外,它還支持 COCO數(shù)據(jù)集格式。
(2)安裝labelimg 在cmd輸入以下命令 pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
結(jié)束后,在cmd中輸入labelimg
初識labelimg
打開后,我們自己設(shè)置一下
在View中勾選Auto Save mode
接下來我們打開需要標注的圖片文件夾
并設(shè)置標注文件保存的目錄(上圖中的Change Save Dir)
接下來就開始標注,畫框,標記目標的label,然后d切換到下一張繼續(xù)標注,不斷重復(fù)重復(fù)。
Labelimg的快捷鍵
(3)數(shù)據(jù)準備
這里建議新建一個名為data的文件夾(這個是約定俗成,不這么做也行),里面創(chuàng)建一個名為images的文件夾存放我們需要打標簽的圖片文件;再創(chuàng)建一個名為labels存放標注的標簽文件;最后創(chuàng)建一個名為 classes.txt 的txt文件來存放所要標注的類別名稱。
data的目錄結(jié)構(gòu)如下:
│─img_data
│─images 存放需要打標簽的圖片文件
│─labels 存放標注的標簽文件
└ classes.txt 定義自己要標注的所有類別(這個文件可有可無,但是在我們定義類別比較多的時候,最好有這個創(chuàng)建一個這樣的txt文件來存放類別)
首先在images這個文件夾放置待標注的圖片。
生成文件如下:
“classes.txt”定義了你的 YOLO 標簽所引用的類名列表。
(4)YOLO模式創(chuàng)建標簽的樣式
存放標簽信息的文件的文件名為與圖片名相同,內(nèi)容由N行5列數(shù)據(jù)組成。
每一行代表標注的一個目標,通常包括五個數(shù)據(jù),從左到右依次為:類別id、x_center、y_center、width、height。
其中:
–x類別id代表標注目標的類別;
–x_center和y_center代表標注框的相對中心坐標;
–xwidth和height代表標注框的相對寬和高。
注意:這里的中心點坐標、寬和高都是相對數(shù)據(jù)!!!
存放標簽類別的文件的文件名為classes.txt (固定不變),用于存放創(chuàng)建的標簽類別。
完成后可進行后續(xù)的yolo訓練方面的操作。
模型訓練
模型的訓練、評估與推理
1.YOLOv8的基本原理
YOLOv8是一個SOTA模型,它建立在Yolo系列歷史版本的基礎(chǔ)上,并引入了新的功能和改進點,以進一步提升性能和靈活性,使其成為實現(xiàn)目標檢測、圖像分割、姿態(tài)估計等任務(wù)的最佳選擇。其具體創(chuàng)新點包括一個新的骨干網(wǎng)絡(luò)、一個新的Ancher-Free檢測頭和一個新的損失函數(shù),可在CPU到GPU的多種硬件平臺上運行。
YOLOv8是Yolo系列模型的最新王者,各種指標全面超越現(xiàn)有對象檢測與實例分割模型,借鑒了Yolov5、Yolov6、YoloX等模型的設(shè)計優(yōu)點,在全面提升改進Yolov5模型結(jié)構(gòu)的基礎(chǔ)上實現(xiàn),同時保持了Yolov5工程化簡潔易用的優(yōu)勢。
Yolov8模型網(wǎng)絡(luò)結(jié)構(gòu)圖如下圖所示:
2.數(shù)據(jù)集準備與訓練
本研究使用了包含學生專注度相關(guān)圖像的數(shù)據(jù)集,并通過Labelimg標注工具對每張圖像中的目標邊框(Bounding Box)及其類別進行標注。然后主要基于YOLOv8n這種模型進行模型的訓練,訓練完成后對模型在驗證集上的表現(xiàn)進行全面的性能評估及對比分析。模型訓練和評估流程基本一致,包括:數(shù)據(jù)集準備、模型訓練、模型評估。本次標注的目標類別為學生專注度,數(shù)據(jù)集中共計包含6469張圖像,其中訓練集占5108張,驗證集占1361張。部分圖像如下圖所示:
部分標注如下圖所示:
圖片數(shù)據(jù)的存放格式如下,在項目目錄中新建datasets目錄,同時將檢測的圖片分為訓練集與驗證集放入datasets目錄下。
接著需要新建一個data.yaml文件,用于存儲訓練數(shù)據(jù)的路徑及模型需要進行檢測的類別。YOLOv8在進行模型訓練時,會讀取該文件的信息,用于進行模型的訓練與驗證。
data.yaml的具體內(nèi)容如下:
train: E:/StudentClassroom_v8/datasets/train/images 訓練集的路徑
val: E:/StudentClassroom_v8/datasets/val/images 驗證集的路徑
# test: E:/StudentClassroom_v8/datasets/test/images 測試集的路徑
nc: 7
names: [‘hand-raising’, ‘reading’, ‘writing’, ‘sleep’, ‘using phone’, ‘bowing the head’, ‘leaning over the table’]
這個文件定義了用于模型訓練和驗證的數(shù)據(jù)集路徑,以及模型將要檢測的目標類別。
數(shù)據(jù)準備完成后,通過調(diào)用train.py文件進行模型訓練,epochs參數(shù)用于調(diào)整訓練的輪數(shù),batch參數(shù)用于調(diào)整訓練的批次大小(根據(jù)內(nèi)存大小調(diào)整,最小為1)。
CPU/GPU訓練代碼如下:
加載名為 yolov8n.pt 的預(yù)訓練YOLOv8模型,yolov8n.pt是預(yù)先訓練好的模型文件。
使用YOLO模型進行訓練,主要參數(shù)說明如下:
(1)data=data_yaml_path: 指定了用于訓練的數(shù)據(jù)集配置文件。
(2)epochs=150: 設(shè)定訓練的輪數(shù)為150輪。
(3)batch=4: 指定了每個批次的樣本數(shù)量為4。
(4)optimizer=’SGD’):SGD 優(yōu)化器。
(7)name=’train_v8′: 指定了此次訓練的命名標簽,用于區(qū)分不同的訓練實驗。
3.訓練結(jié)果評估
在深度學習的過程中,我們通常通過觀察損失函數(shù)下降的曲線來了解模型的訓練情況。對于YOLOv8模型的訓練,主要涉及三類損失:定位損失(box_loss)、分類損失(cls_loss)以及動態(tài)特征損失(dfl_loss)。訓練完成后,相關(guān)的訓練過程和結(jié)果文件會保存在 runs/ 目錄下,具體如下:
各損失函數(shù)作用說明:
定位損失box_loss:預(yù)測框與標定框之間的誤差(GIoU),越小定位得越準;
分類損失cls_loss:計算錨框與對應(yīng)的標定分類是否正確,越小分類得越準;
動態(tài)特征損失(dfl_loss):DFLLoss是一種用于回歸預(yù)測框與目標框之間距離的損失函數(shù)。在計算損失時,目標框需要縮放到特征圖尺度,即除以相應(yīng)的stride,并與預(yù)測的邊界框計算Ciou Loss,同時與預(yù)測的anchors中心點到各邊的距離計算回歸DFLLoss。這個過程是YOLOv8訓練流程中的一部分,通過計算DFLLoss可以更準確地調(diào)整預(yù)測框的位置,提高目標檢測的準確性。
訓練結(jié)果如下:
這張圖展示了YOLOv8模型在訓練和驗證過程中的多個重要指標的變化趨勢,具體如下:
train/box_loss:
(1)這是訓練過程中邊界框損失的變化。邊界框損失用于衡量模型預(yù)測的目標框與實際目標框的差異。
(2)隨著訓練輪次的增加,損失逐漸下降,表明模型在邊界框定位上的準確性在提高。
train/cls_loss:
(1)這是訓練集上的分類損失。分類損失衡量模型對目標類別的預(yù)測準確性。
(2)隨著訓練的進行,分類損失也在不斷下降,說明模型對目標的分類能力在不斷提升。
train/dfl_loss:
(1)這是分布聚焦損失(distribution focal loss),用于幫助模型對目標框的精確定位。
(2)這也是一種用于優(yōu)化邊界框的損失,下降表明模型在邊界框回歸的精細度上表現(xiàn)越來越好。
metrics/precision(B):
(1)這是訓練集上的精度(precision)曲線。精度表示模型在檢測到的目標中有多少是真正的目標。
(2)圖中精度逐漸提高,說明模型在訓練過程中變得越來越準確。
metrics/recall(B):
(1)這是訓練集上的召回率(recall)曲線。召回率表示模型檢測出的真實目標的比例。
(2)圖中的曲線顯示召回率逐漸提高,說明模型能夠找到越來越多的目標。
val/box_loss:
(1)這是驗證集上的邊界框損失曲線。
(2)隨著訓練的進行,驗證集上的損失也在不斷下降,表明模型在驗證集上具有良好的泛化能力。
val/cls_loss:
(1)這是驗證集上的分類損失曲線。
(2)隨著訓練的進行,損失逐漸降低,表明模型對驗證數(shù)據(jù)的分類能力也在提升。
val/dfl_loss:
(1)這是驗證集上的分布聚焦損失曲線。
(2)驗證集上的分布焦點損失,下降趨勢表明模型在驗證數(shù)據(jù)上的邊界框回歸精度也在不斷提高。
metrics/mAP50(B):
(1)這是驗證集上的mAP50曲線,表示在交并比閾值為0.5時模型的平均精度(mean Average Precision)。
(2)mAP50逐漸上升,說明模型在驗證集上的檢測性能在逐步提升。
metrics/mAP50-95(B):
(1)這是驗證集上的mAP50-95曲線,表示在不同交并比閾值(從0.5到0.95)下模型的平均精度。
(2)mAP50-95比mAP50更加嚴格,曲線表明隨著訓練的進行,模型在更高要求下的表現(xiàn)也逐漸提升。
這些圖表反映了模型的訓練和驗證過程中的性能變化。整體來看,訓練損失和驗證損失隨著訓練輪次的增加逐漸減少,模型的精度和召回率逐漸提高,驗證集上的mAP50和mAP50-95也都在上升,表明模型的檢測能力在不斷改善。
這張圖展示的是 Precision-Recall 曲線,用于評估模型在不同類別下的檢測性能。以下是詳細解釋:
各類行為的mAP@0.5值:
(1)hand-raising:0.819
(2)reading:0.794
(3)writing:0.757
(4)sleep:0.930
(5)using phone:0.947
(6)bowing the head:0.845
(7)leaning over the table:0.983
(8)all classes:整體的mAP@0.5為0.868
曲線分析:
(1)leaning over the table的曲線(淺紫色)幾乎緊貼右上角,說明該行為的檢測效果非常好,具有較高的精度和召回率,mAP@0.5也達到了0.983。
(2)using phone和sleep的曲線(分別為紫色和紅色)也表現(xiàn)較好,精度和召回率都很高,mAP@0.5分別為0.947和0.930。
(3)writing和reading的曲線(分別為綠色和橙色)表現(xiàn)相對較差,特別是writing這一類別的曲線更靠近下方,表示模型在該類別上的精度和召回率稍低,mAP@0.5分別為0.757和0.794。
總結(jié):
該圖顯示了模型對不同類別行為的檢測性能??傮w來看,模型在大部分行為上的表現(xiàn)都不錯,尤其是“l(fā)eaning over the table”和“using phone”類的表現(xiàn)非常好,而“writing”和“reading”類的檢測表現(xiàn)稍差,但整體的mAP@0.5為0.868,表明該模型在智慧課堂場景中的學生專注度 檢測上具有較高的準確性。
4.檢測結(jié)果識別
模型訓練完成后,我們可以得到一個最佳的訓練結(jié)果模型best.pt文件,在runs/train/weights目錄下。我們可以使用該文件進行后續(xù)的推理檢測。
imgTest.py 圖片檢測代碼如下:
加載所需庫:
(1)from ultralytics import YOLO:導入YOLO模型類,用于進行目標檢測。
(2)import cv2:導入OpenCV庫,用于圖像處理和顯示。
加載模型路徑和圖片路徑:
(1)path = ‘models/best.pt’:指定預(yù)訓練模型的路徑,這個模型將用于目標檢測任務(wù)。
(2)img_path = “TestFiles/imagetest.jpg”:指定需要進行檢測的圖片文件的路徑。
加載預(yù)訓練模型:
(1)model = YOLO(path, task=’detect’):使用指定路徑加載YOLO模型,并指定檢測任務(wù)為目標檢測 (detect)。
(2)通過 conf 參數(shù)設(shè)置目標檢測的置信度閾值,通過 iou 參數(shù)設(shè)置非極大值抑制(NMS)的交并比(IoU)閾值。
檢測圖片:
(1)results = model(img_path):對指定的圖片執(zhí)行目標檢測,results 包含檢測結(jié)果。
顯示檢測結(jié)果:
(1)res = results[0].plot():將檢測到的結(jié)果繪制在圖片上。
(2)cv2.imshow(“YOLOv8 Detection”, res):使用OpenCV顯示檢測后的圖片,窗口標題為“YOLOv8 Detection”。
(3)cv2.waitKey(0):等待用戶按鍵關(guān)閉顯示窗口
此代碼的功能是加載一個預(yù)訓練的YOLOv8模型,對指定的圖片進行目標檢測,并將檢測結(jié)果顯示出來。
執(zhí)行imgTest.py代碼后,會將執(zhí)行的結(jié)果直接標注在圖片上,結(jié)果如下:
這段輸出是基于YOLOv8模型對圖片“imagetest.jpg”進行檢測的結(jié)果,具體內(nèi)容如下:
圖像信息:
(1)處理的圖像路徑為:TestFiles/imagetest.jpg。
(2)圖像尺寸為 544×640 像素。
檢測結(jié)果:
(1)模型在該圖片上檢測到 1 個沒有專注(”1 sleep”)
處理速度:
(1)預(yù)處理時間: 4.1ms。
(2)推理時間: 35.4ms。
(3)后處理時間: 55.4ms。
這個輸出表明模型成功識別了目標類別,并給出了每個階段的處理時間,顯示了模型在此圖像上的推理效率。
運行效果
– 運行 MainProgram.py
1.主要功能:
(1)可用于實時檢測目標圖片中的學生專注度;
(2)支持圖片、視頻及攝像頭進行檢測,同時支持圖片的批量檢測;
(3)界面可實時顯示目標位置、目標總數(shù)、置信度、用時等信息;
(4)支持圖片或者視頻的檢測結(jié)果保存。
2.檢測結(jié)果說明:
這張圖表顯示了基于YOLOv8模型的目標檢測系統(tǒng)的檢測結(jié)果界面。以下是各個字段的含義解釋:
用時(Time taken):
(1)這表示模型完成檢測所用的時間為0.024秒。
(2)這顯示了模型的實時性,檢測速度非???。
目標數(shù)目(Number of objects detected):
(1)檢測到的目標數(shù)目為19,表示這是當前檢測到的第1個目標。
目標選擇(下拉菜單):全部:
(1)這里有一個下拉菜單,用戶可以選擇要查看的目標類型。
(2)在當前情況下,選擇的是“全部”,意味著顯示所有檢測到的目標信息。
結(jié)果(Result):
(1)當前選中的結(jié)果為 “高度專注”,表示系統(tǒng)正在高亮顯示檢測到的“writing”。
置信度(Confidence):
(1)這表示模型對檢測到的目標屬于“高度專注”類別的置信度為91.25%。
(2)置信度反映了模型的信心,置信度越高,模型對這個檢測結(jié)果越有信心。
目標位置(Object location):
(1)xmin: 531, ymin: 174:目標的左上角的坐標(xmin, ymin),表示目標區(qū)域在圖像中的位置。
(2)xmax: 617, ymax: 239:目標的右下角的坐標(xmax, ymax),表示目標區(qū)域的邊界。
這些坐標表示在圖像中的目標區(qū)域范圍,框定了檢測到的“高度專注”的位置。
這張圖展示了學生專注度的一次檢測結(jié)果,包括檢測時間、檢測到的種類、各行為的置信度、目標的位置信息等。用戶可以通過界面查看并分析檢測結(jié)果,提升學生專注度檢測的效率。
3.圖片檢測說明
(1)學生低專注度
(2)學生高度專注度
(3)學生較低專注度
(4)學生較高專注度
(5)學生沒有專注度
(6)學生中等偏低專注度
(7)學生中等專注度
點擊打開圖片按鈕,選擇需要檢測的圖片,或者點擊打開文件夾按鈕,選擇需要批量檢測圖片所在的文件夾。
操作演示如下:
(1)點擊目標下拉框后,可以選定指定目標的結(jié)果信息進行顯示。
(2)點擊保存按鈕,會對檢測結(jié)果進行保存,存儲路徑為:save_data目錄下。
檢測結(jié)果:系統(tǒng)識別出圖片中的學生專注度,并顯示檢測結(jié)果,包括總目標數(shù)、用時、目標類型、置信度、以及目標的位置坐標信息。
4.視頻檢測說明
點擊視頻按鈕,打開選擇需要檢測的視頻,就會自動顯示檢測結(jié)果,再次點擊可以關(guān)閉視頻。
點擊保存按鈕,會對視頻檢測結(jié)果進行保存,存儲路徑為:save_data目錄下。
檢測結(jié)果:系統(tǒng)對視頻進行實時分析,檢測到學生專注度并顯示檢測結(jié)果。表格顯示了視頻中多個檢測結(jié)果的置信度和位置信息。
這個界面展示了系統(tǒng)對視頻幀中的多目標檢測能力,能夠準確識別學生專注度,并提供詳細的檢測結(jié)果和置信度評分。
5.攝像頭檢測說明
點擊打開攝像頭按鈕,可以打開攝像頭,可以實時進行檢測,再次點擊,可關(guān)閉攝像頭。
檢測結(jié)果:系統(tǒng)連接攝像頭進行實時分析,檢測到學生專注度并顯示檢測結(jié)果。實時顯示攝像頭畫面,并將檢測到的行為位置標注在圖像上,表格下方記錄了每一幀中檢測結(jié)果的詳細信息。
6.保存圖片與視頻檢測說明
點擊保存按鈕后,會將當前選擇的圖片(含批量圖片)或者視頻的檢測結(jié)果進行保存。
檢測的圖片與視頻結(jié)果會存儲在save_data目錄下。
保存的檢測結(jié)果文件如下:
圖片文件保存的csv文件內(nèi)容如下,包括圖片路徑、目標在圖片中的編號、目標類別、置信度、目標坐標位置。
注:其中坐標位置是代表檢測框的左上角與右下角兩個點的x、y坐標。
(1)圖片保存
(2)視頻保存
– 運行 train.py
1.訓練參數(shù)設(shè)置
(1)data=data_yaml_path: 使用data.yaml中定義的數(shù)據(jù)集。
(2)epochs=150: 訓練的輪數(shù)設(shè)置為150輪。
(3)batch=4: 每個批次的圖像數(shù)量為4(批次大小)。
(4)name=’train_v8′: 訓練結(jié)果將保存到以train_v8為名字的目錄中。
(5)optimizer=’SGD’: 使用隨機梯度下降法(SGD)作為優(yōu)化器。
雖然在大多數(shù)深度學習任務(wù)中,GPU通常會提供更快的訓練速度。
但在某些情況下,可能由于硬件限制或其他原因,用戶需要在CPU上進行訓練。
溫馨提示:在CPU上訓練深度學習模型通常會比在GPU上慢得多,尤其是像YOLOv8這樣的計算密集型模型。除非特定需要,通常建議在GPU上進行訓練以節(jié)省時間。
2.訓練日志結(jié)果
這張圖展示了使用YOLOv8進行模型訓練的詳細過程和結(jié)果。
訓練總時長:
(1)模型在訓練了150輪后,總共耗時3.210小時。
mAP指標
(1)mAP50:在IoU(交并比)閾值為0.5時的平均精度。IoU是衡量檢測邊界框與真實標注框重疊程度的指標。mAP50數(shù)值越高,表示模型檢測性能越好。例如,“l(fā)eaning over the table” 類的mAP50為0.983,說明該類別的檢測性能非常好。
(2)mAP50-95:在IoU閾值從0.5到0.95不等的平均精度,是一個更嚴格的檢測標準。mAP50-95值越高,說明模型在不同IoU閾值下都有較好的表現(xiàn)。例如,”leaning over the table” 類的mAP50-95為0.719,相較于其他類別更具魯棒性。
速度:
(1)0.2ms 預(yù)處理時間
(2)1.3ms 推理時間
(3)0.9ms 后處理時間
結(jié)果保存:
(1)Results saved to runs\detect\train_v8:驗證結(jié)果保存在 runs\detect\train_v8 目錄下。
完成信息:
(1)Process finished with exit code 0:表示整個驗證過程順利完成,沒有報錯。
該驗證結(jié)果表明模型在不同學生專注度類別上的檢測精度和召回率表現(xiàn)較好,尤其是在”leaning over the table”和”using phone”這些類別中表現(xiàn)突出,但在”sleep”和”writing”這些類別中表現(xiàn)稍差。模型總體檢測效果較為理想,且推理速度較快,適合實時檢測應(yīng)用場景。