点击进入专栏:
《人工智能专栏》 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
- 三 代码调用关系图(全网最详尽-重要)
一 项目目录结构
将源码下载好并配置好环境之后,就可以看到YOLOv5的整体目录如上图所示。
接下来我们逐一分析
1.1 .github文件夹
github是存放关于github上的一些“配置”的,这个不重要,我们可以不管它。
1.2 datasets
我们刚下载下来的源码是不包含这个文件夹的,datasets用来存放自己的数据集,分为images和labels两部分。同时每一个文件夹下,又应该分为train,val。.cache文件为缓存文件,将数据加载到内存中,方便下次调用快速。可以自命名,比如我的火焰数据集就叫“fire_yolo_format”。
1.3 data文件夹
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文件夹
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文件夹
runs是我们运行的时候的一些输出文件。每一次运行就会生成一个exp的文件夹。
详解:
-
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文件夹
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其他一级目录文件
详解:
- .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 autopad | Conv | DWConv |
---|---|---|
DWConvTranspose2d | TransformerLayer | TransformerBlock |
Bottleneck | BottleneckCSP | CrossConv |
C3 | C3x | C3TR |
C3SPP | C3Ghost | SPP |
SPPF | Focus | GhostConv |
GhostBottleneck | Contract | Expand |
Concat | DetectMultiBackend | AutoShape |
Detections | Proto | Classify |
experiment.py
Sum | MixConv2d |
---|---|
Ensemble | attempt_load |
yolo.py
Detect | Segment | BaseModel |
---|---|---|
DetectionModel | DetectionModel | SegmentationModel |
ClassificationModel | def 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_dataset | ClearmlLogger |
---|
hpo.py
使用 ClearML 的 HyperParameterOptimizer 类来自动调整 YOLOv5 模型的超参数。它定义了一系列的超参数范围,并设定了优化的目标指标(这里是最大化 mAP_0.5)。然后,它启动并管理了一个优化过程,该过程会尝试不同的参数组合以找到性能最优的配置。此脚本特别适用于自动化机器学习工作流程,提高模型调优的效率
comet文件夹
comet_utils.py
def download_model_checkpoint | def set_opt_parameters |
---|---|
def check_comet_weights | def check_comet_resume |
hpo.py
使用 Comet.ml 的优化器进行 YOLOv5 模型的超参数优化。它首先通过命令行参数配置训练环境和参数,然后使用 Comet.ml 优化器来迭代不同的参数组合,以找到最优的训练配置。这个脚本特别适用于自动化机器学习工作流程,提高模型调优的效率。
wandb文件夹
wandb_utils.py
WandbLogger | def all_logging_disabled |
---|
segment文件夹
分割的代码
activations.py
SiLU | Hardswish | Mish |
---|---|---|
MemoryEfficientMish | FReLU | AconC |
MetaAconC |
augmentations.py
Albumentations | def normalize | def denormalize |
---|---|---|
def augment_hsv | def hist_equalize | def replicate |
def letterbox | def random_perspective | def copy_paste |
def cutout | def mixup | def box_candidates |
def classify_albumentations | def classify_transforms | LetterBox |
CenterCrop | ToTensor |
autoanchor.py
def check_anchor_order | def check_anchors | def kmean_anchors |
---|
autobatch.py
def check_train_batch_size | def autobatch |
---|
callbacks.py
dataloaders.py
def get_hash | def exif_size | def exif_transpose |
---|---|---|
def seed_worker | def create_dataloader | InfiniteDataLoader |
_RepeatSampler | LoadScreenshots | LoadImages |
LoadStreams | def img2label_paths | def verify_image_label |
ClassificationDataset | def create_classification_dataloader |
downloads.py
def is_url | def gsutil_getsize | def url_getsize |
---|---|---|
def curl_download | def safe_download | def attempt_download |
general.py
is_ascii | is_chinese | is_colab |
---|---|---|
is_jupyter | is_kaggle | is_docker |
is_writeable | set_logging | user_config_dir |
class Profile | class Timeout | class WorkingDirectory |
methods | print_args | init_seeds |
intersect_dicts | get_default_args | get_latest_run |
file_age | file_date | file_size |
check_online | git_describe | check_git_status |
check_git_info | check_python | check_version |
check_img_size | check_imshow | check_suffix |
check_yaml | check_file | check_font |
check_dataset | check_amp | yaml_load |
yaml_save | unzip_file | url2file |
download | make_divisible | clean_str |
one_cycle | colorstr | labels_to_class_weights |
labels_to_image_weights | coco80_to_coco91_class | xyxy2xywh |
xywh2xyxy | xywhn2xyxy | xyxy2xywhn |
xyn2xy | segment2box | segments2boxes |
resample_segments | scale_boxes | scale_segments |
clip_boxes | clip_segments | non_max_suppression |
strip_optimizer | print_mutation | apply_classifier |
increment_path | imread | imwrite |
imshow |
loss.py
def smooth_BCE | BCEBlurWithLogitsLoss | FocalLoss |
---|---|---|
QFocalLoss | ComputeLoss |
metrics.py
fitness | smooth | ap_per_class |
---|---|---|
compute_ap | ConfusionMatrix | bbox_iou |
box_iou | bbox_ioa | wh_iou |
plot_pr_curve | plot_mc_curve |
plots.py
class Colors | feature_visualization | hist2d |
---|---|---|
butter_lowpass_filtfilt | output_to_target | plot_images |
plot_lr_scheduler | plot_val_txt | plot_targets_txt |
plot_val_study | plot_labels | imshow_cls |
plot_evolve | plot_results | profile_idetection |
save_one_box |
torch_utils.py
smart_inference_mode | smartCrossEntropyLoss | smart_DDP |
---|---|---|
reshape_classifier_output | torch_distributed_zero_first | device_count |
select_device | time_sync | profile |
is_parallel | de_parallel | initialize_weights |
find_modules | sparsity | prune |
fuse_conv_and_bn | model_info | scale_img |
copy_attr | smart_optimizer | smart_hub_load |
smart_resume | class EarlyStopping | class ModelEMA |
triton.py
部署
benchmarks.py
各种推理模型基准
detect.py
运行各种导出的模型文件
export.py
各种模型转换
hubconf.py
推理各种类型的文件
train.py
进行模型训练
val.py
验证测试
三 代码调用关系图(全网最详尽-重要)
因文档特殊,不能在博客正确显示,请移步以下链接!
点击进入可以放大缩小等操作
预览: