跟最新项目的差别:
1.ultralytics/cfg/default.yaml 中添加了一个参数判断是否在 VINNO AI平台训练 ,暂时只支持 detect 和 segment,is_train_on_platform: (bool) 是否在 VINNO AI平台训练
2.类似ultralytics/cfg/datasets文件夹内的data文件,全部放在了vinno_dataset文件夹中,额外添加platform_data_args参数用于平台训练和测试
3.修改两个文件,ultralytics/data/dataset.py 和 ultralytics/data/base.py,添加了 datagenerate.py,用于支持读取平台数据
4.添加了vinno_files文件夹,存放需要的c++dll,额外轮廓文件,错误文件,simulater,测试数据等
5.添加了ultralytics/vinno_metrics文件夹,存放评价指标的python文件
ultralytics/engine/trainer.py文件的save_model函数中,添加了额外将模型存成onnx,计算评价指标的处理,该部分可以注释,只为了查看训练过程中的自己的指标。
该部分并不好,最好是写成跟yolo已有的评价指标可以切换的形式,两种指标的差别只在前处理的resize部分、后处理c++部分。
已有的评价指标可以近似采用,得到较好的几个模型时,再根据后处理的配置参数修改参数,得到最终的指标即可。
RTDETR、yolov10可以训练,但是转成onnx模型之后,无需nms,还是需要额外的后处理去除一些框,暂时没有相关的后续操作,如果后续这些模型效果更好,可以添加非nms的后处理
该部分写的通用需要时间,暂时没有修改,只在保存模型时,可以调用得到report而已。
6.相关的教学视频已下载,较大未放入svn,已存在移动硬盘中,有需要的可以找相关人员获取。
------- From 哔哩哔哩 魔鬼面具UP -------
本项目使用的ultralytics版本为8.2.50,在ultralytics/__init__.py中的__version__有标识.
本项目使用方法与官方一致,我会提供一个我自己常用的方法,或者自己喜欢怎么使用方便就怎么来就行.
我的实验环境:
python: 3.9.19
torch: 2.2.2+cu121
torchvision: 0.17.2+cu121
timm: 1.0.7
mmcv: 2.2.0
mmengine: 0.10.4
1. 执行pip uninstall ultralytics把安装在环境里面的ultralytics库卸载干净.<这里需要注意,如果你也在使用yolov8,最好使用anaconda创建一个虚拟环境供本代码使用,避免环境冲突导致一些奇怪的问题>
2. 卸载完成后同样再执行一次,如果出现WARNING: Skipping ultralytics as it is not installed.证明已经卸载干净.
3. 如果需要使用官方的CLI运行方式或者多卡运行,需要把ultralytics库安装一下,执行命令:<pip install -e .>,当然安装后对本代码进行修改依然有效.注意:不需要使用(官方的CLI运行方式、多卡运行),可以选择跳过这步.
4. 额外需要的包安装命令:
pip install timm thop efficientnet_pytorch einops grad-cam dill albumentations pytorch_wavelets tidecv -i https://pypi.tuna.tsinghua.edu.cn/simple (vinno平台安装未指定版本,后续有问题,可以参考下方固定的版本)
pip install timm==1.0.7 thop efficientnet_pytorch==0.7.1 einops grad-cam==1.4.8 dill==0.3.6 albumentations==1.4.11 pytorch_wavelets==1.3.0 tidecv -i https://pypi.tuna.tsinghua.edu.cn/simple
以下主要是使用dyhead必定需要安装的包,如果安装不成功dyhead没办法正常使用!如果执行了还是不成功,可看最下方mmcv安装问题.
pip install -U openmim -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install mmengine -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install "mmcv>=2.0.0" -i https://pypi.tuna.tsinghua.edu.cn/simple
5. 运行时候如果还缺什么包就请自行安装即可.
(注意:上述的库vinno平台已安装。)
AutoDL环境推荐教程:https://www.bilibili.com/video/BV1tT4y1b75q/ (注意:vinno平台未安装)
需要编译才能运行的一些模块: (注意:vinno平台未安装)
1. mamba(使用教程请看20240219版本更新说明)
2. dcnv3(请看百度云视频-DCNV2,DCNV3,DyHeadWithDCNV3相关讲解)
3. dcnv4(请关闭AMP进行训练,编译教程请看20240116版本更新说明)
4. smpconv(编译教程请看20240601版本更新说明)
5. mamba-yolo(编译教程请看20240619版本更新说明)
本目录下的test_env.py文件为了验证一些需要编译的或者难安装的(mmcv)是否成功的代码.详细请看以下这期视频:https://pan.baidu.com/s/1sWwvN4UC3blBRVe1twrJAg?pwd=bru5
模型配置文件都在ultralytics/cfg/models/v8中. yolov8有五种大小的模型,以下模型参数量和计算量均为类别80且重参数化后计算.
YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPs
YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPs
YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPs
YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
模型配置文件都在ultralytics/cfg/models/v10中. yolov10预训练权重下载链接:https://github.com/THU-MIG/yolov10/releases yolov10有六种大小的模型,以下模型参数量和计算量均为类别80且重参数化后计算.
YOLOv10n summary: 229 layers, 2299264 parameters, 2286448 gradients, 6.7 GFLOPs
YOLOv10s summary: 237 layers, 7248960 parameters, 7197744 gradients, 21.6 GFLOPs
YOLOv10m summary: 313 layers, 15359488 parameters, 15359472 gradients, 59.1 GFLOPs
YOLOv10b summary: 327 layers, 19065792 parameters, 19065776 gradients, 92.0 GFLOPs
YOLOv10l summary: 405 layers, 24371008 parameters, 24370992 gradients, 120.3 GFLOPs
YOLOv10x summary: 447 layers, 29473568 parameters, 29473552 gradients, 160.4 GFLOPs
Fuse指的是什么?
Fuse是指模型的一些模块进行融合,最常见的就是conv和bn层进行融合,在训练的时候模型是存在conv和bn的,但在推理的过程中,模型在初始化的时候会进行模型fuse,把其中的conv和bn进行融合,通过一些数学转换把bn层融合到conv里面,还有一些例如DBB,RepVGG等等模块支持融合的,这些在fuse阶段都会进行融合,融合后可以一般都可以得到比融合前更快的推理速度,而且基本不影响精度.
FPS如何计算?
怎么像yolov5那样输出每一层的参数,计算量?
使用main_profile.py,选择自己的配置文件路径即可
怎么找到对应模块的说明视频?
保存的模型存储大小问题.
在训练图中看保存的模型大小是会比训练结束后的偏大,因为其会保存一些过程中的一些其他信息,但这些不会影响原本模型的参数量和计算量,等训练结束后,其会自己读取清除额外的信息.
YOLOV8怎么指定使用哪一种大小的模型呢?
假设我选择的配置文件是yolov8.yaml,我想选择m大小的模型,则train.py中的指定为ultralytics/cfg/models/v8/yolov8m.yaml即可,同理,如果我想指定s大小的模型,则指定为ultralytics/cfg/models/v8/yolov8s.yaml即可,如果直接设置为ultralytics/cfg/models/v8/yolov8.yaml,则默认使用n大小模型,又或者我需要使用ultralytics/cfg/models/v8/yolov8-bifpn.yaml,我需要设定为s模型,则应该为ultralytics/cfg/models/v8/yolov8s-bifpn.yaml.
热力图使用脚本相关问题.
怎么判断模型收敛了?模型会不会过拟合?
曲线震荡问题.
这类问题都不好解决,如果基础模型就震荡很厉害,基本都是跟数据集有关系,如果改进后的模型后出现,基本都是改进模型不合适的问题.
绘制结构图问题.
可看以下这两个视频:
mmcv安装问题.
可以看官方文档:https://mmcv.readthedocs.io/en/latest/get_started/installation.html#install-with-pip
预训练权重相关问题.
可以看这个视频:https://www.bilibili.com/video/BV1Q1421Q7Zw/ 不载入预训练权重的话,只需要在train.py中的model.load注释即可!
绘制结构图教程.
配置文件整合问题.
训练结果可重现的问题.
参数详解.
Freezing layer 'model.22.dfl.conv.weight'
这个是正常的,这一层就是不需要训练。
为什么程序开始的时候会下载yolov8n.pt.
这个是用于AMP混合精度训练测试用的,不是预训练权重,如果下载慢,可以自行下载后放到运行目录下,它检测到有这个文件就不会下载。
为什么训练过程中显存不断在变化?有时大有时小?
因为yolov8中的标签分配策略的问题,正常现象。
如何关闭早停?
train.py中设置patience为0.
设置了epochs为300,但是发现还没有收敛,可以在300次的基础上再训练100次吗?
不行,训练了300次后再训练100次跟一次性训练400次的结果很大概率不一样,因为它们的学习率匹配不上。
我的验证集精度0.6,但是测试集精度只有0.5,这是什么问题?
没问题,一般是由于测试集与验证集差异较大导致,如果是私有数据集可以考虑重新合并随机划分,如果是公开数据集就不用管,例如visdrone2019,验证集也跟测试集相差10个点。
预测的时候在同一个目标上出现了两个框,怎么解决?
在detect.py中设置agnostic_nms=True,原始的nms是基于每个类里面进行的,设置agnostic_nms=True就是所有目标下进行,不会细分类别,可以解决这个问题。
能不能不要分测试集?
除非是公开数据集没有测试集,否则不建议,如果到时候审稿人问到为什么你没有测试集,你没有一个合理的理由可以回复,最坏的结果是实验重做。
如何可视化中间层的特征图?
运行detect.py中并设置visualize=True.
为什么yolov8-p2.yaml比yolov8.yaml参数量要小,但是计算量变大?
正常现象,可看github-issue链接.
像项目自带的v3、v5配置文件能直接用来做模型的对比实验吗?
不可以,因为里面用的都是v8的anchorfree的头,不是原版的模型。
怎么关闭混合精度训练?
train.py中设置参数amp=False.
训练时候输出: ERROR:albumentations.check_version:Error fetching version info 怎么办?
不用理会,应该是albumentations在检测最新的版本号时网络连接失败.
怎么计算small、middle、large和COCO指标?
python dataset/yolo2coco.py --image_path dataset/images/test --label_path dataset/labels/test
python get_COCO_metrice.py --pred_json runs/val/exp/predictions.json --anno_json data.json
视频教程请看百度云视频-计算COCO指标教程.
如何绘制曲线对比图?
本项目内的plot_result.py使用教程. 各种不同类型的模型曲线对比图和精度对比图也可以看这期视频:https://www.bilibili.com/video/BV1yf421X7t5/
如何替换主干?
可以看项目视频-添加我的github仓库上别的主干说明.
深度学习实验部分常见疑问解答!(小白刚入门必看!少走弯路!少自我内耗!)
1. 如何衡量自己的所做的工作量够不够?
2. 为什么别人的论文说这个模块对xxx有作用,但是我自己用的时候还掉点了?
3. 提升是和什么模型相比呢 比如和yolov8这种基础模型比还是和别人提出的目前最好的模型比
4. 对比不同的模型的时候,输入尺寸,学习率,学习次数这些是否需要一致?
深度学习实验部分常见疑问解答二!(小白刚入门必看!少走弯路!少自我内耗!)
1. 为什么我用yolov8自带的coco8、coco128训练出来的效果很差?
2. 我的数据集很大,机器跑得慢,我是否可以用数据集的百分之10的数据去测试这个改进点是否有效?有效再跑整个数据集?