YOLOv5系列(一) 本文(1.2万字) | 项目结构 | 罗列全部函数与方法 | 全网最全代码调用关系图 |

141 篇文章 7 订阅

已下架不支持订阅


点击进入专栏:
《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程



文章预览: 项目目录结构 | 罗列函数与方法 | 代码调用关系图(全网最详尽-重要)


在这里插入图片描述


文章目录

  • 一 项目目录结构
    • 1.1 .github文件夹
    • 1.2 datasets
    • 1.3 data文件夹
    • 1.4 models文件夹
    • 1.5 runs文件夹
    • 1.6 utils文件夹
    • 1.7其他一级目录文件
  • 二 罗列函数与方法
    • data文件夹
      • hyps文件夹
      • images
    • models文件夹
      • hub文件夹
      • 分割文件夹segment
      • commmon.py
      • experiment.py
      • yolo.py
    • utils文件夹
      • aws文件夹
        • resume.py
      • loggers文件夹
        • clearml文件夹
          • clearml_utils.py
          • hpo.py
        • comet文件夹
          • comet_utils.py
          • hpo.py
        • wandb文件夹
          • wandb_utils.py
      • segment文件夹
      • activations.py
      • augmentations.py
      • autoanchor.py
      • autobatch.py
      • callbacks.py
      • dataloaders.py
      • downloads.py
      • general.py
      • loss.py
      • metrics.py
      • plots.py
      • torch_utils.py
      • triton.py
    • benchmarks.py
    • detect.py
    • export.py
    • hubconf.py
    • train.py
    • val.py
  • 三 代码调用关系图(全网最详尽-重要)

一 项目目录结构

img

将源码下载好并配置好环境之后,就可以看到YOLOv5的整体目录如上图所示。

接下来我们逐一分析

1.1 .github文件夹

img

github是存放关于github上的一些“配置”的,这个不重要,我们可以不管它。


1.2 datasets

img

我们刚下载下来的源码是不包含这个文件夹的,datasets用来存放自己的数据集,分为images和labels两部分同时每一个文件夹下,又应该分为train,val。.cache文件为缓存文件,将数据加载到内存中,方便下次调用快速。可以自命名,比如我的火焰数据集就叫“fire_yolo_format”。


1.3 data文件夹

img

data文件夹主要是存放一些超参数的配置文件(如.yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称;还有一些官方提供测试的图片。YOLOv5 有大约 30 个超参数用于各种训练设置。更好的初始猜测会产生更好的最终结果,因此在演化之前正确初始化这些值很重要。

如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。不过要注意,自己的数据集不建议放在这个路径下面,建议把数据集放到YOLOv5项目的同级目录下面。

详解:

  • hyps文件夹

    # 存放yaml格式的超参数配置文件

    • hyps.scratch-high.yaml # 数据增强高,适用于大型型号,即v3、v3-spp、v5l、v5x
    • hyps.scratch-low.yaml # 数据增强低,适用于较小型号,即v5n、v5s
    • hyps.scratch-med.yaml # 数据增强中,适用于中型型号。即v5m
  • images # 存放着官方给的两张测试图片

  • scripts

    # 存放数据集和权重下载shell脚本

    • download_weights.sh # 下载权重文件,包括五种大小的P5版和P6版以及分类器版
    • get_coco.sh # 下载coco数据集
    • get_coco128.sh # 下载coco128(只有128张)
  • Argoverse.yaml # 后面的每个.yaml文件都对应一种标准数据集格式的数据

  • coco.yaml # COCO数据集配置文件

  • coco128.yaml # COCO128数据集配置文件

  • voc.yaml # VOC数据集配置文件


1.4 models文件夹

img

models是模型文件夹。里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。**他们的检测速度分别都是从快到慢,但是精确度分别是从低到高。**如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。

详解:

  • hub

    # 存放yolov5各版本目标检测网络模型配置文件

    • anchors.yaml # COCO数据的默认锚点
    • yolov3-spp.yaml # 带spp的yolov3
    • yolov3-tiny.yaml # 精简版yolov3
    • yolov3.yaml # yolov3
    • yolov5-bifpn.yaml # 带二值fpn的yolov5l
    • yolov5-fpn.yaml # 带fpn的yolov5
    • yolov5-p2.yaml # (P2, P3, P4, P5)都输出,宽深与large版本相同,相当于比large版本能检测更小物体
    • yolov5-p34.yaml # 只输出(P3, P4),宽深与small版本相同,相当于比small版本更专注于检测中小物体
    • yolov5-p6.yaml # (P3, P4, P5, P6)都输出,宽深与large版本相同,相当于比large版本能检测更大物体
    • yolov5-p7.yaml # (P3, P4, P5, P6, P7)都输出,宽深与large版本相同,相当于比large版本能检测更更大物体
    • yolov5-panet.yaml # 带PANet的yolov5l
    • yolov5n6.yaml # (P3, P4, P5, P6)都输出,宽深与nano版本相同,相当于比nano版本能检测更大物体,anchor已预定义
    • yolov5s6.yaml # (P3, P4, P5, P6)都输出,宽深与small版本相同,相当于比small版本能检测更大物体,anchor已预定义
    • yolov5m6.yaml # (P3, P4, P5, P6)都输出,宽深与middle版本相同,相当于比middle版本能检测更大物体,anchor已预定义
    • yolov5l6.yaml # (P3, P4, P5, P6)都输出,宽深与large版本相同,相当于比large版本能检测更大物体,anchor已预定义,推测是作者做实验的产物
    • yolov5x6.yaml # (P3, P4, P5, P6)都输出,宽深与Xlarge版本相同,相当于比Xlarge版本能检测更大物体,anchor已预定义
    • yolov5s-ghost.yaml # backbone的卷积换成了GhostNet形式的yolov5s,anchor已预定义
    • yolov5s-transformer.yaml # backbone最后的C3卷积添加了Transformer模块的yolov5s,anchor已预定义
  • int.py # 空的

  • common.py # 放的是一些网络结构的定义通用模块,包括autopad、Conv、DWConv、TransformerLayer等

  • experimental.py # 实验性质的代码,包括MixConv2d、跨层权重Sum等

  • tf.py # tensorflow版的yolov5代码

  • yolo.py # yolo的特定模块,包括BaseModel,DetectionModel,ClassificationModel,parse_model等

  • yolov5l.yaml # yolov5l网络模型配置文件,large版本,深度1.0,宽度1.0

  • yolov5m.yaml # yolov5m网络模型配置文件,middle版本,深度0.67,宽度0.75

  • yolov5n.yaml # yolov5n网络模型配置文件,nano版本,深度0.33,宽度0.25

  • yolov5s.yaml # yolov5s网络模型配置文件,small版本,深度0.33,宽度0.50

  • yolov5x.yaml # yolov5x网络模型配置文件,Xlarge版本,深度1.33,宽度1.25


1.5 runs文件夹

img

runs是我们运行的时候的一些输出文件。每一次运行就会生成一个exp的文件夹。

img

详解:

  • detect # 测试模型,输出图片并在图片中标注出物体和概率

  • train

    # 训练模型,输出内容,模型(最好、最新)权重、混淆矩阵、F1曲线、超参数文件、P曲线、R曲线、PR曲线、结果文件(loss值、P、R)等

    expn

    • expn # 第n次实验数据

    • confusion_matrix.png # 混淆矩阵

    • P_curve.png # 准确率与置信度的关系图线

    • R_curve.png # 精准率与置信度的关系图线

    • PR_curve.png # 精准率与召回率的关系图线

    • F1_curve.png # F1分数与置信度(x轴)之间的关系

    • labels_correlogram.jpg # 预测标签长宽和位置分布

    • results.png # 各种loss和metrics(p、r、mAP等,详见utils/metrics)曲线

    • results.csv # 对应上面png的原始result数据

    • hyp.yaml # 超参数记录文件

    • opt.yaml # 模型可选项记录文件

    • train_batchx.jpg # 训练集图像x(带标注)

    • val_batchx_labels.jpg # 验证集图像x(带标注)

    • val_batchx_pred.jpg # 验证集图像x(带预测标注)

    • weights # 权重

    • best.pt # 历史最好权重

    • last.pt # 上次检测点权重

    • labels.jpg # 4张图, 4张图,(1,1)表示每个类别的数据量

      (1,2)真实标注的 bounding_box
      (2,1) 真实标注的中心点坐标
      (2,2)真实标注的矩阵宽高
      

1.6 utils文件夹

img

utils工具文件夹。存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。

详解:

  • aws # 恢复中断训练,和aws平台使用相关的工具
  • flask_rest_api # 和flask 相关的工具
  • google_app_engine # 和谷歌app引擎相关的工具
  • loggers # 日志打印
  • init.py # notebook的初始化,检查系统软件和硬件
  • activations.py # 激活函数
  • augmentations # 存放各种图像增强技术
  • autoanchor.py # 自动生成锚框
  • autobatch.py # 自动生成批量大小
  • benchmarks.py # 对模型进行性能评估(推理速度和内存占用上的评估)
  • callbacks.py # 回调函数,主要为logger服务
  • datasets # dateset和dateloader定义代码
  • downloads.py # 谷歌云盘内容下载
  • general.py # 全项目通用代码,相关实用函数实现
  • loss.py # 存放各种损失函数
  • metrics.py # 模型验证指标,包括ap,混淆矩阵等
  • plots.py # 绘图相关函数,如绘制loss、ac曲线,还能单独将一个bbox存储为图像
  • torch_utils.py # 辅助函数

1.7其他一级目录文件

img

详解:

  • .dockerignore # docker的ignore文件
  • .gitattributes # 用于将.ipynb后缀的文件剔除GitHub语言统计
  • .gitignore # docker的ignore文件
  • CONTRIBUTING.md # markdown格式说明文档
  • detect.py # 目标检测预测脚本
  • export.py # 模型导出
  • hubconf.py # pytorch hub相关
  • LICENSE # 证书
  • README.md # markdown格式说明文档
  • requirements.txt # 可以通过pip install requirement进行依赖环境下载
  • setup.cfg # 项目打包文件
  • train.py # 目标检测训练脚本
  • tutorial.ipynb # 目标检测上手教程
  • val.py # 目标检测验证脚本
  • yolov5s.pt # coco数据集模型预训练权重,运行代码的时候会自动从网上下载

二 罗列函数与方法

data文件夹

yaml各种数据集的加载路径与类别

hyps文件夹

yaml超参

images

两个jpg测试图片

models文件夹

hub文件夹

yaml配置文件

分割文件夹segment

yaml配置文件

commmon.py

def autopadConvDWConv
DWConvTranspose2dTransformerLayerTransformerBlock
BottleneckBottleneckCSPCrossConv
C3C3xC3TR
C3SPPC3GhostSPP
SPPFFocusGhostConv
GhostBottleneckContractExpand
ConcatDetectMultiBackendAutoShape
DetectionsProtoClassify

experiment.py

SumMixConv2d
Ensembleattempt_load

yolo.py

DetectSegmentBaseModel
DetectionModelDetectionModelSegmentationModel
ClassificationModeldef parse_model

utils文件夹

docker文件夹flask_rest_api文件夹google_app_engine文件夹

aws文件夹

resume.py

自动地恢复所有未完成的 YOLOv5 训练,不论是单 GPU 还是多 GPU 训练。它遍历找到所有的 last.pt 模型检查点,读取对应的训练配置文件 opt.yaml,并根据配置确定是否使用分布式训练

loggers文件夹

clearml文件夹
clearml_utils.py
def construct_datasetClearmlLogger
hpo.py

使用 ClearML 的 HyperParameterOptimizer 类来自动调整 YOLOv5 模型的超参数。它定义了一系列的超参数范围,并设定了优化的目标指标(这里是最大化 mAP_0.5)。然后,它启动并管理了一个优化过程,该过程会尝试不同的参数组合以找到性能最优的配置。此脚本特别适用于自动化机器学习工作流程,提高模型调优的效率

comet文件夹
comet_utils.py
def download_model_checkpointdef set_opt_parameters
def check_comet_weightsdef check_comet_resume
hpo.py

使用 Comet.ml 的优化器进行 YOLOv5 模型的超参数优化。它首先通过命令行参数配置训练环境和参数,然后使用 Comet.ml 优化器来迭代不同的参数组合,以找到最优的训练配置。这个脚本特别适用于自动化机器学习工作流程,提高模型调优的效率。

wandb文件夹
wandb_utils.py
WandbLoggerdef all_logging_disabled

segment文件夹

分割的代码

activations.py

SiLUHardswishMish
MemoryEfficientMishFReLUAconC
MetaAconC

augmentations.py

Albumentationsdef normalizedef denormalize
def augment_hsvdef hist_equalizedef replicate
def letterboxdef random_perspectivedef copy_paste
def cutoutdef mixupdef box_candidates
def classify_albumentationsdef classify_transformsLetterBox
CenterCropToTensor

autoanchor.py

def check_anchor_orderdef check_anchorsdef kmean_anchors

autobatch.py

def check_train_batch_sizedef autobatch

callbacks.py

LoadImagesAndLabels
register_action
get_registered_actions
run

dataloaders.py

def get_hashdef exif_sizedef exif_transpose
def seed_workerdef create_dataloaderInfiniteDataLoader
_RepeatSamplerLoadScreenshotsLoadImages
LoadStreamsdef img2label_pathsdef verify_image_label
ClassificationDatasetdef create_classification_dataloader
class LoadImagesAndLabels
check_cache_ram
cache_labels
__getitem__
load_image
cache_images_to_disk
load_mosaic
collate_fn
load_image
collate_fn4

downloads.py

def is_urldef gsutil_getsizedef url_getsize
def curl_downloaddef safe_downloaddef attempt_download

general.py

is_asciiis_chineseis_colab
is_jupyteris_kaggleis_docker
is_writeableset_logginguser_config_dir
class Profileclass Timeoutclass WorkingDirectory
methodsprint_argsinit_seeds
intersect_dictsget_default_argsget_latest_run
file_agefile_datefile_size
check_onlinegit_describecheck_git_status
check_git_infocheck_pythoncheck_version
check_img_sizecheck_imshowcheck_suffix
check_yamlcheck_filecheck_font
check_datasetcheck_ampyaml_load
yaml_saveunzip_fileurl2file
downloadmake_divisibleclean_str
one_cyclecolorstrlabels_to_class_weights
labels_to_image_weightscoco80_to_coco91_classxyxy2xywh
xywh2xyxyxywhn2xyxyxyxy2xywhn
xyn2xysegment2boxsegments2boxes
resample_segmentsscale_boxesscale_segments
clip_boxesclip_segmentsnon_max_suppression
strip_optimizerprint_mutationapply_classifier
increment_pathimreadimwrite
imshow

loss.py

def smooth_BCEBCEBlurWithLogitsLossFocalLoss
QFocalLossComputeLoss

metrics.py

fitnesssmoothap_per_class
compute_apConfusionMatrixbbox_iou
box_ioubbox_ioawh_iou
plot_pr_curveplot_mc_curve

plots.py

class Colorsfeature_visualizationhist2d
butter_lowpass_filtfiltoutput_to_targetplot_images
plot_lr_schedulerplot_val_txtplot_targets_txt
plot_val_studyplot_labelsimshow_cls
plot_evolveplot_resultsprofile_idetection
save_one_box

torch_utils.py

smart_inference_modesmartCrossEntropyLosssmart_DDP
reshape_classifier_outputtorch_distributed_zero_firstdevice_count
select_devicetime_syncprofile
is_parallelde_parallelinitialize_weights
find_modulessparsityprune
fuse_conv_and_bnmodel_infoscale_img
copy_attrsmart_optimizersmart_hub_load
smart_resumeclass EarlyStoppingclass ModelEMA

triton.py

部署

benchmarks.py

各种推理模型基准

detect.py

运行各种导出的模型文件

export.py

各种模型转换

hubconf.py

推理各种类型的文件

train.py

进行模型训练

val.py

验证测试

三 代码调用关系图(全网最详尽-重要)

因文档特殊,不能在博客正确显示,请移步以下链接!

图解YOLOv5_v7.0代码结构与调用关系

点击进入可以放大缩小等操作

预览:
在这里插入图片描述

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

已下架不支持订阅

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小酒馆燃着灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值