YOLOv5 口罩目標檢測實戰(zhàn)(一):項目整體介紹與數(shù)據(jù)準備
前言在公共場所佩戴口罩已成為常態(tài)化防護措施但人工監(jiān)督耗時費力且存在盲區(qū)。利用計算機視覺技術(shù)對攝像頭畫面進行實時檢測能夠有效輔助安防和防疫管理。本項目使用早期YOLOv5 2.0版本中的YOLOv5s模型實現(xiàn)端到端的口罩佩戴檢測。與圖像分類任務不同本項目需要同時解決兩個核心問題1. 找到每張人臉在畫面中的位置定位2. 判斷該人臉屬于mask戴口罩還是no-mask未戴口罩。模型最終輸出若干個目標框、每個框的類別和置信度。本文作為系列開篇重點介紹項目的目標、數(shù)據(jù)集構(gòu)成、文件目錄結(jié)構(gòu)以及完整的數(shù)據(jù)流轉(zhuǎn)流程。后續(xù)文章將深入網(wǎng)絡(luò)結(jié)構(gòu)、Anchor解碼、訓練調(diào)參與推理部署。文章目錄前言一、項目目錄結(jié)構(gòu)與核心文件核心文件職責說明二、數(shù)據(jù)集詳解與標簽格式1. 樣本與標注框分布2. YOLO標簽格式詳解3. data.yaml 配置文件三、完整數(shù)據(jù)流轉(zhuǎn)與訓練推理總流程四、快速上手運行步驟五、常見問題與解決方案數(shù)據(jù)階段六、調(diào)試建議七、總結(jié)與下篇預告一、項目目錄結(jié)構(gòu)與核心文件項目代碼基于早期YOLOv5 2.0工程推薦使用PyCharm或VSCode打開。目錄結(jié)構(gòu)分為數(shù)據(jù)集存放區(qū)MaskDataSet和算法工程區(qū)yolov5_2_0。Mask_YOLO │ ├── MaskDataSet/ # 數(shù)據(jù)集根目錄 │ ├── data.yaml # 數(shù)據(jù)集配置文件路徑、類別數(shù)、類別名 │ ├── train/ # 訓練集 │ │ ├── images/ # 訓練圖片105張 │ │ └── labels/ # 訓練標簽YOLO格式txt │ ├── valid/ # 驗證集 │ │ ├── images/ # 驗證圖片29張 │ │ └── labels/ # 驗證標簽 │ └── test/ # 測試集獨立復評 │ ├── images/ # 測試圖片15張 │ └── labels/ # 測試標簽 │ └── yolov5_2_0/ # 早期YOLOv5工程源碼 ├── train.py # 訓練總?cè)肟?├── test.py # 驗證與測試入口 ├── detect.py # 圖片/視頻推理入口 ├── camera_mask.py # 【本項目核心】攝像頭實時檢測入口 ├── models/ # 網(wǎng)絡(luò)結(jié)構(gòu)定義 │ ├── yolov5s.yaml # YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)、Anchor尺寸 │ └── yolo.py # 模型構(gòu)建與Detect檢測頭邏輯 ├── utils/ # 工具函數(shù) │ ├── datasets.py # 數(shù)據(jù)加載、Letterbox、數(shù)據(jù)增強 │ └── utils.py # IoU計算、損失函數(shù)、目標匹配、NMS ├── hyp.yaml # 超參數(shù)配置學習率、損失權(quán)重、增強參數(shù) └── runs/ # 訓練輸出 └── exp17/ # 當前項目訓練結(jié)果 ├── opt.yaml # 訓練命令參數(shù)復現(xiàn)用 ├── hyp.yaml # 本次訓練實際超參數(shù) ├── results.txt # 每輪訓練損失與驗證指標 └── weights/ ├── best.pt # 驗證集綜合表現(xiàn)最佳權(quán)重用于最終推理 └── last.pt # 最后一輪權(quán)重用于恢復訓練核心文件職責說明文件職責重要性data.yaml指定訓練/驗證圖片路徑、類別數(shù)量nc: 2、類別名稱mask, no-mask數(shù)據(jù)入口必須正確配置models/yolov5s.yaml定義Backbone、Neck、Head結(jié)構(gòu)及每層通道數(shù)、Anchor尺寸修改網(wǎng)絡(luò)結(jié)構(gòu)需改動此處hyp.yaml控制學習率lr00.01、動量0.937、損失權(quán)重及Mosaic等數(shù)據(jù)增強參數(shù)調(diào)優(yōu)精度的關(guān)鍵文件train.py整合數(shù)據(jù)、模型、超參數(shù)執(zhí)行訓練循環(huán)、驗證和模型保存訓練主程序camera_mask.py調(diào)用OpenCV讀取攝像頭執(zhí)行預處理、推理、后處理NMS和畫框顯示最終交付運行入口best.pt保存訓練過程中驗證集mAP等指標綜合表現(xiàn)最好的模型權(quán)重最終推理必須加載此文件二、數(shù)據(jù)集詳解與標簽格式1. 樣本與標注框分布原始數(shù)據(jù)集經(jīng)過清洗和劃分當前分布如下數(shù)據(jù)集圖片數(shù)量Mask框數(shù)量No-mask框數(shù)量說明訓練集train105張573123約4.7:1明顯偏向戴口罩類別驗證集valid29張14220少數(shù)類no-mask樣本極少指標易波動測試集test15張915僅用于獨立復評不參與訓練調(diào)參合計149張806148-關(guān)鍵認知模型在訓練時看過573道“戴口罩”的題只看過123道“未戴口罩”的題。這種類別失衡是后續(xù)項目中容易出現(xiàn)“漏報未戴口罩”或“誤報戴口罩”的根本原因之一。2. YOLO標簽格式詳解每張圖片對應一個同名.txt文件如0001.jpg對應0001.txt。標簽文件中的每一行代表一個真實目標框格式如下class x_center y_center width height其中class整數(shù)0代表mask1代表no-mask。x_center, y_center, width, height均為歸一化到[0, 1]之間的浮點數(shù)。歸一化公式為以x_center為例(框的左上角x 框的右下角x) / (2 * 圖片寬度)。標簽示例0001.txt內(nèi)容0 0.5125 0.4300 0.2100 0.3200 1 0.7600 0.5000 0.1800 0.2900這表示圖片中有兩個目標第一個是戴口罩的人臉位于畫面中央偏左第二個是未戴口罩的人臉位于畫面右側(cè)。3.data.yaml配置文件數(shù)據(jù)集路徑和類別映射全部在MaskDataSet/data.yaml中定義# data.yamltrain:MaskDataSet/train/imagesval:MaskDataSet/valid/imagestest:MaskDataSet/test/imagesnc:2# number of classesnames:[mask,no-mask]# class names調(diào)試提示YOLO讀取圖片依賴data.yaml中的路徑。如果訓練時報錯FileNotFoundError優(yōu)先檢查此處路徑是否為相對路徑且與train.py所在目錄的相對位置正確。三、完整數(shù)據(jù)流轉(zhuǎn)與訓練推理總流程下圖展示了從原始數(shù)據(jù)到最終攝像頭推理的完整鏈路清晰標出了訓練階段與推理階段的邊界。是否圖片 同名YOLO標簽檢查類別、坐標、空標簽和數(shù)據(jù)分布劃分train、valid、test讀取data.yaml、yolov5s.yaml、hyp.yaml加載YOLOv5s和預訓練權(quán)重DataLoader讀取圖片并同步增強標簽Backbone提取多層特征FPN PAN融合不同尺度特征P3、P4、P5三個尺度輸出候選真實框與Anchor、Grid匹配計算box、obj、cls三類損失反向傳播 SGD更新參數(shù)EMA平滑參數(shù)在驗證集計算P、R和mAP綜合表現(xiàn)是否更好保存best.pt繼續(xù)訓練并保存last.pt攝像頭或圖片推理Letterbox RGB CHW 歸一化模型前向得到25200個候選置信度篩選 NMS坐標映射回原圖畫框、類別、置信度和WARNING收集漏檢、誤檢和錯分類壞例圖2 項目訓練與推理總流程圖。上方為訓練閉環(huán)數(shù)據(jù)→增強→前向→損失→反向→保存下方為推理閉環(huán)攝像頭→預處理→前向→NMS→畫框→壞例收集。四、快速上手運行步驟安裝環(huán)境依賴建議使用Python 3.8pipinstalltorch torchvision opencv-python pandas matplotlib pyyaml tqdm檢查數(shù)據(jù)集確保MaskDataSet文件夾與yolov5_2_0位于同級目錄。隨機打開train/labels/下的一個txt文件檢查坐標是否在0~1之間。開始訓練在yolov5_2_0目錄下python train.py--data../MaskDataSet/data.yaml--weightsyolov5s.pt--epochs200--batch-size4--img-size640攝像頭實時檢測python camera_mask.py五、常見問題與解決方案數(shù)據(jù)階段問題原因解決方法訓練報錯No labels founddata.yaml中路徑錯誤或labels文件夾為空檢查train/val路徑是否指向images父目錄確保標簽與圖片同名標簽解析報錯IndexError: list index out of range標簽文件中某行缺少空格或坐標數(shù)量不為5使用文本編輯器檢查txt文件確保格式為class x y w h類別數(shù)量不對應data.yaml中nc: 2但標簽里出現(xiàn)了2或-1檢查所有標簽文件確保class只包含0和1驗證集mAP忽高忽低驗證集太小僅29張no-mask僅20框?qū)儆谡,F(xiàn)象應結(jié)合分類別指標和具體壞例分析不只看總體mAP圖像無法讀取corrupted image圖片文件損壞或不是標準格式如.jpg實際為.png使用cv2.imread()逐張測試修復或刪除損壞圖片六、調(diào)試建議建議在訓練前運行以下簡單腳本驗證數(shù)據(jù)加載是否正確importcv2 pathMaskDataSet/train/images/0001.jpglabel_pathMaskDataSet/train/labels/0001.txtimgcv2.imread(path)print(f圖片Shape:{img.shape})# 期望 (H, W, 3)withopen(label_path,r)asf:print(f標簽內(nèi)容:{f.read()})觀察變量img是否為None標簽坐標值是否在0~1范圍內(nèi)。七、總結(jié)與下篇預告本文作為系列的開篇梳理了YOLOv5口罩目標檢測項目的基本盤我們明確了目標檢測與圖像分類的區(qū)別掌握了149張圖片、954個標注框的數(shù)據(jù)分布特點理解了目錄結(jié)構(gòu)中每個關(guān)鍵文件的職責并且通過流程圖對數(shù)據(jù)如何一步步變成檢測框有了全局印象。值得記住的是本項目的訓練集存在約4.7:1的類別失衡且驗證集規(guī)模較小這意味著我們在后續(xù)解讀mAP指標時必須保持審慎。下一篇預告我們將深入YOLOv5s的模型內(nèi)部從像素、卷積、特征圖開始剖析BackboneFocus/CSP/SPP、NeckFPNPAN和Detect檢測頭是如何將一張640×640的圖片編碼為25200個候選框的敬請期待。版權(quán)說明本文為原創(chuàng)技術(shù)文章轉(zhuǎn)載請注明出處。文中代碼及配置均經(jīng)過實際測試可根據(jù)項目需求修改擴展。如發(fā)現(xiàn)疏漏或錯誤歡迎在評論區(qū)交流討論。

相關(guān)新聞

DAQ-GP-CT485電流互感器自動化測試方案與RS485通信實戰(zhàn)

DAQ-GP-CT485電流互感器自動化測試方案與RS485通信實戰(zhàn)

如果你在工業(yè)自動化、電力監(jiān)測或能源管理領(lǐng)域工作,電流互感器的測試和校準可能是你日常工作中既基礎(chǔ)又關(guān)鍵的一環(huán)。傳統(tǒng)測試方法往往依賴笨重的標準設(shè)備、復雜的接線和手動記錄數(shù)據(jù),整個過程耗時且容易出錯。而今天要介紹的 DAQ-GP-CT485 電流互感器測試…

2026/8/1 1:49:38 閱讀更多
videoJS播放m3u8視頻流:從原理到實戰(zhàn)的完整解決方案

videoJS播放m3u8視頻流:從原理到實戰(zhàn)的完整解決方案

1. 項目緣起:當videoJS遇上m3u8,一個看似簡單卻暗藏玄機的任務 最近在做一個內(nèi)部培訓系統(tǒng)的后臺,需要嵌入一些技術(shù)分享視頻。視頻團隊給過來的源文件,清一色都是 .m3u8 格式的。對于前端來說,這不算什么新鮮事&#…

2026/8/1 15:11:43 閱讀更多
從TOP30榜單看眼科藥品零售趨勢:一份基于規(guī)模及增速雙高數(shù)據(jù)的市場結(jié)構(gòu)分析

從TOP30榜單看眼科藥品零售趨勢:一份基于規(guī)模及增速雙高數(shù)據(jù)的市場結(jié)構(gòu)分析

由中康開思發(fā)布的2026Q1全國零售藥店眼科類藥品規(guī)模&增速雙高TOP30榜單顯示,玻璃酸鈉滴眼液以5億銷售額穩(wěn)居一季度規(guī)模首位,作為干眼癥一線用藥的市場地位持續(xù)鞏固;左氧氟沙星滴眼液銷售額突破1億元,同比增長31%,展…

2026/8/1 15:11:43 閱讀更多
ABAP開發(fā)中SY-INDEX與SY-TABIX的核心區(qū)別與應用場景詳解

ABAP開發(fā)中SY-INDEX與SY-TABIX的核心區(qū)別與應用場景詳解

1. 項目概述:從兩個“循環(huán)計數(shù)器”說起 在ABAP開發(fā)的世界里, SY-INDEX 和 SY-TABIX 是兩個幾乎每天都會打交道的系統(tǒng)變量。乍一看,它們都像是循環(huán)里的計數(shù)器,很多新手,甚至一些有幾年經(jīng)驗的開發(fā)者,都曾…

2026/8/1 15:11:43 閱讀更多
Textractor終極指南:輕松提取游戲文本的免費開源工具

Textractor終極指南:輕松提取游戲文本的免費開源工具

Textractor終極指南:輕松提取游戲文本的免費開源工具 【免費下載鏈接】Textractor Extracts text from video games and visual novels. Highly extensible. 項目地址: https://gitcode.com/gh_mirrors/te/Textractor 你是否曾經(jīng)在玩外語游戲時因為語言障礙而…

2026/8/1 15:11:42 閱讀更多
5分鐘解鎖Burp Suite中文界面:安全測試新手的終極指南

5分鐘解鎖Burp Suite中文界面:安全測試新手的終極指南

5分鐘解鎖Burp Suite中文界面:安全測試新手的終極指南 【免費下載鏈接】BurpSuiteCN-Release BurpSuite漢化發(fā)布 項目地址: https://gitcode.com/gh_mirrors/bu/BurpSuiteCN-Release 作為一名網(wǎng)絡(luò)安全新手,你是否曾經(jīng)面對Burp Suite那密密麻麻的…

2026/8/1 15:01:40 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產(chǎn)的一款用于半導體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設(shè)備及通用機械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/1 0:09:33 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產(chǎn)的一款用于半導體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設(shè)備及通用機械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/1 0:09:33 閱讀更多