yolov5-v7.0 目錄結構

leolzi發表於2024-06-26

一、一級目錄下各檔案功能

  1. 模型架構(位於 /models): 如果希望改變YOLOv5的架構,需要修改通常位於 models 目錄中的模型定義檔案。這可能包括改變網路的深度和寬度,更改層型別或新增新層。
  2. 訓練資料(位於 /data): 為了提高模型在特定任務上的表現,需要更新位於 data 目錄中的訓練資料。這可能包括新增更多圖片,增強資料集的多樣性,或提高註釋的質量。
  3. 訓練過程(位於 /utils): utils 目錄通常包含實用程式指令碼,包括用於訓練模型的指令碼。您可能希望調整訓練的超引數,學習率計劃,或引入新技術,如資料增強或不同的損失函式。
  4. 預處理和後處理(位於 /utils 或 /segment): 在訓練前準備資料的方式以及模型做出預測後如何處理輸出的修改也可以是提高模型效能的方式。這可能包括改變輸入影像的大小或調整非最大抑制演算法。
  5. 基準測試(檔案 benchmarks.py): 在進行更改後,基準測試您的模型以便於與之前版本或其他模型進行效能比較是非常重要的。這可以幫助您理解所做的更改是否有益。
  6. 依賴和環境(requirements.txt、.dockerignore、.gitattributes、.gitignore): 確保開發環境和依賴是最新。
  7. 預提交鉤子(.pre-commit-config.yaml): 強制執行編碼標準或其他檢查,需要修改預提交鉤子的配置。
  8. 實驗跟蹤(/runs): 目錄包含來自訓練會話的日誌、指標和輸出。
  9. 自定義模組或擴充套件(/segment、/classify、/utils):如果專案有用於任務的自定義模組,如分割(/segment)或分類(/classify),會在這裡增強或新增功能。

二、二級目錄下各檔案功能

2.1 classify資料夾

yolov5-master 的專案中的 classify 資料夾。這個資料夾包含了幾個 Python 指令碼檔案和一個 Jupyter 筆記本檔案,它們通常用於分類任務。

  • predict.py: 指令碼用於執行模型對新資料的預測。它會載入訓練好的模型,並用它來預測輸入資料的類別。
  • train.py: 指令碼用於訓練分類模型。它會包含資料載入、模型初始化、訓練過程以及可能的驗證/測試步驟。
  • tutorial.ipynb: Jupyter 筆記本檔案是一個教程,它提供瞭如何使用 yolov5-master 中的分類功能的指導。筆記本會包含程式碼示例和解釋,引導使用者如何進行資料準備、模型訓練、評估和預測。
tutorial.ipynb 描述瞭如何使用 YOLOv5 進行簡單的訓練、驗證和預測示例,以幫助開始你的人工智慧之旅。這段內容提供了關於 YOLOv5 專案的概述、如何設定環境、如何執行預測和訓練,以及如何視覺化訓練結果。
以下是文字中一些關鍵部分的概述:
 
Setup:這部分介紹瞭如何克隆 YOLOv5 的 GitHub 倉庫,安裝依賴,以及檢查 PyTorch 和 GPU 的設定。
1. Predict:這一節介紹瞭如何使用 classify/predict.py 指令碼進行分類預測,可以從多種源(如攝像頭、圖片、影片等)進行預測,並自動從最新的 YOLOv5 釋出中下載模型。
2. Validate:這一節解釋瞭如何驗證模型在 ImageNet 資料集的 val 或 test 部分的準確度。它還提供了一個下載 ImageNet 驗證集的指令碼。
3. Train:介紹瞭如何使用 classify/train.py 指令碼在 Imagenette 資料集上訓練一個分類模型,從預訓練模型開始,並且使用 Mosaic Dataloader 進行訓練。
4. Visualize:提供瞭如何使用 Comet 和 ClearML 進行實驗跟蹤和視覺化的資訊,以及如何使用 TensorBoard 進行本地日誌記錄。

Environments:列出了可以執行 YOLOv5 的各種已驗證環境。
Status:提供了一個徽章,顯示了 YOLOv5 的 GitHub Actions 連續整合 (CI) 測試的當前狀態。
Appendix:包括瞭如何使用 PyTorch HUB 進行 YOLOv5 推理的附加內容。
  • val.py: 指令碼用於模型的驗證。它會對驗證集的資料執行預測,並評估模型的效能,通常是透過計算準確率、混淆矩陣或其他指標。

2.2 data資料夾

在 YOLOv5 專案的 data 目錄中,hyps, images, 和 scripts 資料夾通常有以下功能:

hyps 資料夾: 這個資料夾可能包含超引數(hyperparameters)的配置。在 YOLOv5 中,超引數是模型訓練過程中需要設定的引數,比如學習率、批次大小(batch size)、動量(momentum)等。這些引數通常會影響模型的訓練效率和最終效能。配置檔案可能是 YAML 格式,用於定義在訓練過程中使用的不同的超引數組合。 images 資料夾: 這個資料夾可能用於存放用於訓練、驗證和測試的影像資料的樣本或其相關的示例圖片。在一些情況下,也可能用來存放一些說明文件或者專案的視覺輔助材料,如專案的結構圖或者流程圖。 scripts 資料夾: 通常包含一些指令碼檔案,這些指令碼可以執行資料預處理、設定環境變數、執行訓練或評估流程等自動化任務。例如,可能會有批處理或 shell 指令碼,用於自動化下載或轉換資料集,或者是用於啟動訓練流程的指令碼。

yolov5-master 的資料夾下的 data 目錄。這個目錄包含了多個 YAML 檔案,它們通常用於配置機器學習專案中的引數,如資料集路徑、類別、超引數等。

這些 YAML 檔案的名稱表明它們可能對應於不同的資料集或配置設定,例如:

coco.yaml 是用於 COCO 資料集的配置檔案。
GlobalWheat2020.yaml 是全球小麥檢測挑戰2020年的資料集配置。
ImageNet.yaml 是用於 ImageNet 資料集的配置。

如果要改進 YOLOv5 模型,這些 YAML 檔案是您可能需要修改的地方,特別是如果您想要調整模型訓練的資料集或超引數。例如,您可以:

  1. 新增/刪除資料集: 透過建立新的 YAML 檔案或修改現有檔案來包含您想要訓練或測試的資料集。
  2. 修改超引數: 在這些檔案中設定不同的超引數,比如學習率、批大小、權重衰減等。
  3. 調整資料增強: 改變或新增新的資料增強策略來提高模型的泛化能力。
  4. 類別對映: 如果要處理一個具有不同類別的新資料集,需要在相應的 YAML 檔案中更新類別。

    5. 路徑和分割槽: 更新資料集的路徑,以及訓練、驗證、測試分割槽

2.3 models資料夾

YOLOv5 專案中的 models 資料夾的內容。這個資料夾包含了定義 YOLOv5 模型架構的 Python 指令碼和 YAML 配置檔案。下面是每個檔案或資料夾的一般用途:

  1. __init__.py: 這是一個初始化檔案,使 Python 將此目錄當作一個包來處理。
  2. common.py: 通常包含模型架構中使用的通用層或功能的定義。
  3. experimental.py: 包含實驗性質的模型功能或層的定義,這些是正在測試中的新特性。
  4. tf.py: 包含 TensorFlow 相關的模型功能或工具,例如用於 TensorFlow 模型轉換的函式。
  5. yolo.py: 包含 YOLOv5 模型架構的定義,這是構建模型的核心指令碼。
  6. yolov5l.yaml, yolov5m.yaml, yolov5n.yaml, yolov5s.yaml, yolov5x.yaml: 這些 YAML 檔案定義了不同大小的 YOLOv5 模型配置,例如層數、通道數、錨點尺寸等。l、m、n、s、x 分別代表 large、medium、nano、small、xlarge,反映模型的不同尺寸和容量。以yolov5s.yaml為例進行分析:

配置檔案是使用 YAML 格式編寫的,它描述了模型的不同部分,如背部(backbone)和頭部(head)的層次結構,以及使用的超引數。
這個配置檔案中的一些重要引數和部分包括:
nc: 類別的數量,這裡設定為81,表示模型將識別81個不同的物件類別。
depth_multiple 和 width_multiple: 這些乘數用於縮放模型的深度(層數)和寬度(通道數),以調整模型的大小和計算複雜度。
anchors: 定義了錨點框的尺寸,這些錨點框用於檢測不同尺寸的物件。
模型的架構分為兩部分:
backbone: 定義了模型的主體結構,負責特徵提取。它包括多個卷積層(Conv)和堆疊的卷積塊(C3, C2),以及一個空間金字塔池化層(SPPF)。
head: 定義了模型的頭部結構,負責根據特徵做出檢測。它包含了卷積層,上取樣層(nn.Upsample),拼接層(Concat),另外的 C3 塊,以及最終的檢測層(Detect)。
在配置中,有一些註釋掉的層,如 -1, 1, Conv, [1024, 3, 2] 和隨後的 -1, 3, C3, [1024],這意味著在當前的模型配置中,這些層被移除了。其他層的引數也有所調整,比如 SPPF 層和 Detect 層的引數被修改了。

  7. hub 目錄: 包含 PyTorch Hub 相關的指令碼,允許使用者透過 PyTorch Hub 介面訪問預訓練模型。

  8. segment 目錄: 包含用於影像分割的模型定義或工具。

  9. .pycache__ 目錄: 包含 Python 編譯過的位元組碼檔案,這些檔案可以加快模組的載入速度。
在改進 YOLOv5 進行目標檢測或其他任務時,需要根據需要修改 YAML 配置檔案或 Python 指令碼來調整模型的結構和效能。

2.4 runs資料夾

YOLOv5 專案的 runs 資料夾內容。在 YOLOv5 的目錄結構中,runs 資料夾通常用於儲存訓練和檢測(或推理)的輸出。

資料夾通常包含以下內容:

  1. detect: 這個資料夾通常包含執行目標檢測任務(如 detect.py)後的輸出結果,包括檢測到的物件的影像、影片以及可能的 JSON 或 CSV 格式的結果檔案。
  2. train: 這個資料夾包含模型訓練過程的輸出結果,通常包括權重檔案、日誌、訓練和驗證的損失圖表以及其他可能的效能指標。

2.5 segment資料夾

YOLOv5 專案的 segment 資料夾,這個資料夾包含了用於影像分割任務的指令碼和教程。

  1. predict.py: 這個指令碼用於在一組影像上執行模型,以生成分割預測,為每個畫素分配一個類別標籤。
  2. train.py: 這個指令碼用於訓練影像分割模型,包括載入資料集、定義模型架構、設定損失函式和最佳化器、以及執行訓練迴圈。
  3. tutorial.ipynb: 這是一個 Jupyter 筆記本檔案,包含一個互動式教程,指導如何使用此資料夾中的程式碼進行影像分割。
  4. val.py: 這個指令碼用於評估訓練好的分割模型在驗證資料集上的效能。它會計算並輸出多種效能指標。

2.6 utils資料夾

YOLOv5 專案的 utils 資料夾,這個資料夾包含了多個用於不同輔助功能的 Python 指令碼檔案。

  1. activations.py: 定義了網路啟用函式,如 ReLU 或 Leaky ReLU。
  2. augmentations.py: 包含用於資料增強的方法,這些方法可以在訓練過程中增加資料的多樣性。
  3. autoanchor.py: 包含自動調整錨點大小的演算法,以適應特定資料集的分佈。
  4. autobatch.py: 包含自動確定最佳批處理大小的工具。
  5. callbacks.py: 定義了訓練過程中的回撥函式,如模型儲存、效能評估等。
  6. dataloaders.py: 包含用於載入和處理訓練和驗證資料的功能。
  7. downloads.py: 包含從網際網路下載模型權重或資料集的功能。
  8. general.py: 包含一般工具和輔助函式,如時間轉換、路徑處理等。
  9. loss.py: 定義了用於訓練的損失函式,如交叉熵或目標檢測的損失函式。
  10. metrics.py: 包含計算模型效能評價指標的函式,如準確率、IoU等。
  11. plots.py: 包含用於生成訓練過程中的圖表和視覺化的函式。
  12. torch_utils.py: 包含 PyTorch 相關的輔助工具函式,可能與裝置選擇、模型初始化等相關。
  13. triton.py: 可能與NVIDIA Triton Inference Server(一個AI模型部署解決方案)的整合有關。

YOLOv5 專案的 utils 資料夾下還有幾個子資料夾:

  • aws: 包含與Amazon Web Services整合的工具。
  • docker: 包含Docker容器的配置檔案。
  • flask_rest_api: 包含用於建立Flask REST API的指令碼。
  • google_app_engine: 包含用於部署到 Google App Engine 的配置和指令碼。
  • loggers: 包含日誌記錄功能,用於跟蹤模型訓練和推理過程中的資訊。
  • segment: 包含用於影像分割任務的相關工具和指令碼。

三、如何對YOLOv5模型進行改進?

在對 YOLOv5 模型進行改進時,可能需要對以下資料夾中的檔案進行操作:

  1. models: 修改模型架構定義檔案,包括更改模型的深度和寬度,新增或移除層,或者調整層的引數。這些架構檔案通常以 .yaml 結尾。
  2. data: 更新資料集配置檔案,包括新增或修改類別標籤、設定新的資料路徑、或調整資料增強引數。
  3. utils: 需要更新輔助函式,如自動錨點調整(autoanchor.py)、損失函式(loss.py)、效能評估指標(metrics.py)等,以適應新的模型結構或訓練要求。
  4. segment: 在進行影像分割,可能需要更新這個資料夾中的指令碼來適配新的模型架構或資料處理流程。
  5. train.py 和 val.py: 對訓練和驗證指令碼進行修改,以包含新的模型配置或調整訓練超引數。
  6. runs: 這個資料夾下內容通常是自動生成的,用於儲存訓練和檢測的輸出結果,需要檢查這些輸出來評估您所做改進的效果。
  7. 配置環境(如 requirements.txt 檔案): 如果引入了新的依賴或庫,可能需要更新環境配置。

原文連結:https://blog.csdn.net/qq_60245590/article/details/135577508

相關文章