門戶網(wǎng)站建設(shè)中存在的問(wèn)題刷贊網(wǎng)站推廣永久
前言
前面簡(jiǎn)單介紹了YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)和創(chuàng)新點(diǎn)(直通車:【YOLO系列】YOLOv5超詳細(xì)解讀(網(wǎng)絡(luò)詳解))
在接下來(lái)我們會(huì)進(jìn)入到Y(jié)OLOv5更深一步的學(xué)習(xí),首先從源碼解讀開(kāi)始。
因?yàn)槲沂羌冃“?#xff0c;剛開(kāi)始下載完源碼時(shí)真的一臉懵,所以就先從最基礎(chǔ)的項(xiàng)目目錄結(jié)構(gòu)開(kāi)始吧~因?yàn)橄嚓P(guān)解讀不是很多,所以有的是我根據(jù)作者給的英文文檔自己翻譯的,如有不對(duì)之處歡迎大家指正呀!這篇只是簡(jiǎn)單介紹每個(gè)文件是做什么的,大體上了解這個(gè)項(xiàng)目,具體的代碼詳解后期會(huì)慢慢更新,也歡迎大家關(guān)注我的專欄,和我一起學(xué)習(xí)呀!
源碼下載地址:mirrors / ultralytics / yolov5 · GitCode
目錄
前言
?一、項(xiàng)目目錄結(jié)構(gòu)
?1.1?.github文件夾
?1.2?datasets
?1.3?data文件夾
?1.4?models文件夾
?1.5?runs文件夾
?1.6?utils文件夾
?1.7其他一級(jí)目錄文件
?一、項(xiàng)目目錄結(jié)構(gòu)
?
?將源碼下載好并配置好環(huán)境之后,就可以看到Y(jié)OLOv5的整體目錄如上圖所示。
接下來(lái)我們逐一分析
?1.1?.github文件夾
?
?github是存放關(guān)于github上的一些“配置”的,這個(gè)不重要,我們可以不管它。
1.2?datasets
?
我們剛下載下來(lái)的源碼是不包含這個(gè)文件夾的,datasets用來(lái)存放自己的數(shù)據(jù)集,分為images和labels兩部分。同時(shí)每一個(gè)文件夾下,又應(yīng)該分為train,val。.cache文件為緩存文件,將數(shù)據(jù)加載到內(nèi)存中,方便下次調(diào)用快速??梢宰悦?#xff0c;比如我的火焰數(shù)據(jù)集就叫“fire_yolo_format”。
?1.3?data文件夾
??
data文件夾主要是存放一些超參數(shù)的配置文件(如.yaml文件)是用來(lái)配置訓(xùn)練集和測(cè)試集還有驗(yàn)證集的路徑的,其中還包括目標(biāo)檢測(cè)的種類數(shù)和種類的名稱;還有一些官方提供測(cè)試的圖片。YOLOv5 有大約 30 個(gè)超參數(shù)用于各種訓(xùn)練設(shè)置。更好的初始猜測(cè)會(huì)產(chǎn)生更好的最終結(jié)果,因此在演化之前正確初始化這些值很重要。
如果是訓(xùn)練自己的數(shù)據(jù)集的話,那么就需要修改其中的yaml文件。不過(guò)要注意,自己的數(shù)據(jù)集不建議放在這個(gè)路徑下面,建議把數(shù)據(jù)集放到Y(jié)OLOv5項(xiàng)目的同級(jí)目錄下面。
詳解:
- hyps文件夾? ?# 存放yaml格式的超參數(shù)配置文件
-
hyps.scratch-high.yaml? #?數(shù)據(jù)增強(qiáng)高,適用于大型型號(hào),即v3、v3-spp、v5l、v5x
-
hyps.scratch-low.yaml? # 數(shù)據(jù)增強(qiáng)低,適用于較小型號(hào),即v5n、v5s
-
hyps.scratch-med.yaml??# 數(shù)據(jù)增強(qiáng)中,適用于中型型號(hào)。即v5m
-
- images? # 存放著官方給的兩張測(cè)試圖片
- scripts? # 存放數(shù)據(jù)集和權(quán)重下載shell腳本
- download_weights.sh? #?下載權(quán)重文件,包括五種大小的P5版和P6版以及分類器版
-
get_coco.sh?? #?下載coco數(shù)據(jù)集
-
get_coco128.sh? #?下載coco128(只有128張)
-
Argoverse.yaml? #?后面的每個(gè).yaml文件都對(duì)應(yīng)一種標(biāo)準(zhǔn)數(shù)據(jù)集格式的數(shù)據(jù)
- coco.yaml ? # COCO數(shù)據(jù)集配置文件
- coco128.yaml ? # COCO128數(shù)據(jù)集配置文件
- voc.yaml ? # VOC數(shù)據(jù)集配置文件
?1.4?models文件夾
?
models是模型文件夾。里面主要是一些網(wǎng)絡(luò)構(gòu)建的配置文件和函數(shù),其中包含了該項(xiàng)目的四個(gè)不同的版本,分別為是s、m、l、x。從名字就可以看出,這幾個(gè)版本的大小。他們的檢測(cè)速度分別都是從快到慢,但是精確度分別是從低到高。如果訓(xùn)練自己的數(shù)據(jù)集的話,就需要修改這里面相對(duì)應(yīng)的yaml文件來(lái)訓(xùn)練自己模型。
詳解:
- hub? # 存放yolov5各版本目標(biāo)檢測(cè)網(wǎng)絡(luò)模型配置文件
- anchors.yaml? # COCO數(shù)據(jù)的默認(rèn)錨點(diǎn)
- yolov3-spp.yaml? # 帶spp的yolov3
- yolov3-tiny.yaml? # 精簡(jiǎn)版yolov3
- yolov3.yaml? # yolov3
- yolov5-bifpn.yaml? # 帶二值fpn的yolov5l
- yolov5-fpn.yaml? # 帶fpn的yolov5
- yolov5-p2.yaml? # (P2, P3, P4, P5)都輸出,寬深與large版本相同,相當(dāng)于比large版本能檢測(cè)更小物體
- yolov5-p34.yaml? # 只輸出(P3, P4),寬深與small版本相同,相當(dāng)于比small版本更專注于檢測(cè)中小物體
- yolov5-p6.yaml? # (P3, P4, P5, P6)都輸出,寬深與large版本相同,相當(dāng)于比large版本能檢測(cè)更大物體
- yolov5-p7.yaml? # (P3, P4, P5, P6, P7)都輸出,寬深與large版本相同,相當(dāng)于比large版本能檢測(cè)更更大物體
- yolov5-panet.yaml? # 帶PANet的yolov5l
- yolov5n6.yaml? # (P3, P4, P5, P6)都輸出,寬深與nano版本相同,相當(dāng)于比nano版本能檢測(cè)更大物體,anchor已預(yù)定義
- yolov5s6.yaml? # (P3, P4, P5, P6)都輸出,寬深與small版本相同,相當(dāng)于比small版本能檢測(cè)更大物體,anchor已預(yù)定義
- yolov5m6.yaml?? # (P3, P4, P5, P6)都輸出,寬深與middle版本相同,相當(dāng)于比middle版本能檢測(cè)更大物體,anchor已預(yù)定義
- yolov5l6.yaml?? # (P3, P4, P5, P6)都輸出,寬深與large版本相同,相當(dāng)于比large版本能檢測(cè)更大物體,anchor已預(yù)定義,推測(cè)是作者做實(shí)驗(yàn)的產(chǎn)物
- yolov5x6.yaml?? # (P3, P4, P5, P6)都輸出,寬深與Xlarge版本相同,相當(dāng)于比Xlarge版本能檢測(cè)更大物體,anchor已預(yù)定義
- yolov5s-ghost.yaml? ?# backbone的卷積換成了GhostNet形式的yolov5s,anchor已預(yù)定義
- yolov5s-transformer.yaml? # backbone最后的C3卷積添加了Transformer模塊的yolov5s,anchor已預(yù)定義
- _int_.py? ?#?空的
- common.py ? # 放的是一些網(wǎng)絡(luò)結(jié)構(gòu)的定義通用模塊,包括autopad、Conv、DWConv、TransformerLayer等
- experimental.py ? # 實(shí)驗(yàn)性質(zhì)的代碼,包括MixConv2d、跨層權(quán)重Sum等
- tf.py??# tensorflow版的yolov5代碼
- yolo.py? # yolo的特定模塊,包括BaseModel,DetectionModel,ClassificationModel,parse_model等
- yolov5l.yaml ? # yolov5l網(wǎng)絡(luò)模型配置文件,large版本,深度1.0,寬度1.0
- yolov5m.yaml ? # yolov5m網(wǎng)絡(luò)模型配置文件,middle版本,深度0.67,寬度0.75
- yolov5n.yaml ? # yolov5n網(wǎng)絡(luò)模型配置文件,nano版本,深度0.33,寬度0.25
- yolov5s.yaml ? # yolov5s網(wǎng)絡(luò)模型配置文件,small版本,深度0.33,寬度0.50
- yolov5x.yaml ? # yolov5x網(wǎng)絡(luò)模型配置文件,Xlarge版本,深度1.33,寬度1.25
1.5?runs文件夾
runs是我們運(yùn)行的時(shí)候的一些輸出文件。每一次運(yùn)行就會(huì)生成一個(gè)exp的文件夾。
?詳解:
- detect? ?# 測(cè)試模型,輸出圖片并在圖片中標(biāo)注出物體和概率
- train? ? # 訓(xùn)練模型,輸出內(nèi)容,模型(最好、最新)權(quán)重、混淆矩陣、F1曲線、超參數(shù)文件、P曲線、R曲線、PR曲線、結(jié)果文件(loss值、P、R)等expn
?- expn? ?#?第n次實(shí)驗(yàn)數(shù)據(jù)
- confusion_matrix.png? ?# 混淆矩陣
- P_curve.png? ?# 準(zhǔn)確率與置信度的關(guān)系圖線
- R_curve.png? # 精準(zhǔn)率與置信度的關(guān)系圖線
- PR_curve.png? #??精準(zhǔn)率與召回率的關(guān)系圖線
- F1_curve.png? ?# F1分?jǐn)?shù)與置信度(x軸)之間的關(guān)系
- labels_correlogram.jpg? ?#?預(yù)測(cè)標(biāo)簽長(zhǎng)寬和位置分布
- ?results.png? ?#?各種loss和metrics(p、r、mAP等,詳見(jiàn)utils/metrics)曲線
- results.csv? # 對(duì)應(yīng)上面png的原始result數(shù)據(jù)
- hyp.yaml? #? 超參數(shù)記錄文件
- opt.yaml? # 模型可選項(xiàng)記錄文件
- train_batchx.jpg? # 訓(xùn)練集圖像x(帶標(biāo)注)
- val_batchx_labels.jpg? # 驗(yàn)證集圖像x(帶標(biāo)注)
- val_batchx_pred.jpg? # 驗(yàn)證集圖像x(帶預(yù)測(cè)標(biāo)注)
- weights? #? 權(quán)重
- ???????best.pt? # 歷史最好權(quán)重
- last.pt? ?# 上次檢測(cè)點(diǎn)權(quán)重
- labels.jpg? #?4張圖, 4張圖,(1,1)表示每個(gè)類別的數(shù)據(jù)量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1,2)真實(shí)標(biāo)注的 bounding_box
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2,1) 真實(shí)標(biāo)注的中心點(diǎn)坐標(biāo)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2,2)真實(shí)標(biāo)注的矩陣寬高??????????????
1.6?utils文件夾
? ?
?utils工具文件夾。存放的是工具類的函數(shù),里面有l(wèi)oss函數(shù),metrics函數(shù),plots函數(shù)等等。
? ? 詳解:
- aws? ?#? 恢復(fù)中斷訓(xùn)練,和aws平臺(tái)使用相關(guān)的工具
- flask_rest_api? # 和flask 相關(guān)的工具
- google_app_engine? ?# 和谷歌app引擎相關(guān)的工具
- loggers? ? # 日志打印
- _init_.py? ? #?notebook的初始化,檢查系統(tǒng)軟件和硬件
- activations.py? #??激活函數(shù)
- augmentations? # 存放各種圖像增強(qiáng)技術(shù)
- autoanchor.py? ? #? 自動(dòng)生成錨框
- autobatch.py? ?# 自動(dòng)生成批量大小
- benchmarks.py? ?#? 對(duì)模型進(jìn)行性能評(píng)估(推理速度和內(nèi)存占用上的評(píng)估)
- callbacks.py? ?#? 回調(diào)函數(shù),主要為logger服務(wù)
- datasets? # dateset和dateloader定義代碼
- downloads.py? ?#??谷歌云盤內(nèi)容下載
- general.py? ?# 全項(xiàng)目通用代碼,相關(guān)實(shí)用函數(shù)實(shí)現(xiàn)
- loss.py? ?#? 存放各種損失函數(shù)
- metrics.py? ?# 模型驗(yàn)證指標(biāo),包括ap,混淆矩陣等
- plots.py? ?#? 繪圖相關(guān)函數(shù),如繪制loss、ac曲線,還能單獨(dú)將一個(gè)bbox存儲(chǔ)為圖像
- torch_utils.py? ?#?輔助函數(shù)
1.7其他一級(jí)目錄文件
?詳解:
- .dockerignore? ?#?docker的ignore文件
- .gitattributes? ?#?用于將.ipynb后綴的文件剔除GitHub語(yǔ)言統(tǒng)計(jì)
- .gitignore? ?#??docker的ignore文件
- CONTRIBUTING.md? # markdown格式說(shuō)明文檔
- detect.py? ?# 目標(biāo)檢測(cè)預(yù)測(cè)腳本
- export.py? #? 模型導(dǎo)出
- hubconf.py? # pytorch hub相關(guān)
- LICENSE? ? # 證書(shū)
- README.md? ? # markdown格式說(shuō)明文檔
- requirements.txt? # 可以通過(guò)pip install requirement進(jìn)行依賴環(huán)境下載
- setup.cfg? #? 項(xiàng)目打包文件
- train.py? ?# 目標(biāo)檢測(cè)訓(xùn)練腳本
- tutorial.ipynb? #? 目標(biāo)檢測(cè)上手教程
- val.py? # 目標(biāo)檢測(cè)驗(yàn)證腳本
- yolov5s.pt? ?#? coco數(shù)據(jù)集模型預(yù)訓(xùn)練權(quán)重,運(yùn)行代碼的時(shí)候會(huì)自動(dòng)從網(wǎng)上下載
本文參考:
YOLOV5學(xué)習(xí)筆記(四)——項(xiàng)目目錄及代碼講解
?YOLOv5-6.2版本代碼Project逐文件詳解