# vinno平台训练: 跟最新项目的差别: 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,已存在移动硬盘中,有需要的可以找相关人员获取。 # 基于[ultralytics](https://github.com/ultralytics/ultralytics)的YOLOV8、YOLOV10改进项目 ------- 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库安装一下,执行命令:,当然安装后对本代码进行修改依然有效.注意:不需要使用(官方的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 # 自带的一些文件说明 1. train.py(配合vinno平台,将其改为main.py) 训练模型的脚本 2. main_profile.py 输出模型和模型每一层的参数,计算量的脚本 3. val.py 使用训练好的模型计算指标的脚本 4. detect.py 推理的脚本 5. track.py 跟踪推理的脚本 6. test_yaml.py 用来测试所有yaml是否能正常运行的脚本 7. heatmap.py 生成热力图的脚本 8. get_FPS.py 计算模型储存大小、模型推理时间、FPS的脚本 9. get_COCO_metrice.py 计算COCO指标的脚本 10. plot_result.py 绘制曲线对比图的脚本,可看百度云视频-plot_result.py使用教程 11. transform_PGI.py 去掉PGI模块. 12. export.py 导出onnx脚本.[视频链接](https://www.bilibili.com/video/BV1CK421e7Y3/) 13. get_model_erf.py 绘制模型的有效感受野.[视频链接](https://www.bilibili.com/video/BV1Gx4y1v7ZZ/) 14. 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 # 常见疑问 1. Fuse指的是什么? Fuse是指模型的一些模块进行融合,最常见的就是conv和bn层进行融合,在训练的时候模型是存在conv和bn的,但在推理的过程中,模型在初始化的时候会进行模型fuse,把其中的conv和bn进行融合,通过一些数学转换把bn层融合到conv里面,还有一些例如DBB,RepVGG等等模块支持融合的,这些在fuse阶段都会进行融合,融合后可以一般都可以得到比融合前更快的推理速度,而且基本不影响精度. 2. FPS如何计算? 1. 在运行val.py后最后会出来Speed: 0.1ms preprocess, 5.4ms inference, 0.0ms loss, 0.4ms postprocess per image这行输出,这行输出就代表了每张图的前处理,推理,loss,后处理的时间,当然在val.py过程中是不需要计算loss的,所以为0,FPS最严谨来说就是1000(1s)/(preprocess+inference+postprocess),没那么严谨的话就是只除以inference的时间,还有一个问题就是batchsize应该设置为多少,其实这行输出就已经是每张图的时间了,但是batchsize还是会对这个时间有所影响,主要是关于并行处理的问题,GPU中可以一次处理多个batch的数据,也可以只处理一个数据,但是处理多batch的数据比处理一个数据的时候整体速度要快,举个例子,比如我有1000张图,我分别设置batchsize为32和batchsize为1,整体运行的时间百分之99都是batchsize为32的快,因此这就导致不同batch输出的时间不同,至于该设置多少来计算FPS,貌似众说纷纭,所以这里我也不好给意见. 附上yolov5作者对于FPS和Batch的一个实验链接: https://github.com/ultralytics/yolov5/discussions/6649 2. 项目中的get_FPS.py是只算推理时间. 3. batch问题,比如你设置为16,那所有对比的模型都在同一个batch来计算即可. 4. 小模型尽量要大bs(16,32)测. 3. 怎么像yolov5那样输出每一层的参数,计算量? 使用main_profile.py,选择自己的配置文件路径即可 4. 怎么找到对应模块的说明视频? 1. 视频都在本项目下的项目视频百度云链接.txt,然后可以看这里的[更新公告](https://blog.csdn.net/qq_37706472/article/details/136178142)来确定哪些改进点是哪一期更新的,然后可以直接找到对应的视频链接下载看即可. 2. 20231010之前的日期都以模块命名. 3. 不一定所有的模块都有视频说明,看模块的复杂度. 5. 保存的模型存储大小问题. 在训练图中看保存的模型大小是会比训练结束后的偏大,因为其会保存一些过程中的一些其他信息,但这些不会影响原本模型的参数量和计算量,等训练结束后,其会自己读取清除额外的信息. 6. 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. 7. 热力图使用脚本相关问题. 1. 需要安装grad-cam==1.4.8 2. 使用示例:https://www.bilibili.com/video/BV1fU421o7jH/ 如果更换了主干还需看:https://www.bilibili.com/video/BV1F6421V77v/ 3. 进度条不满是正常现象,只要进度条不是0,都可以进行出图. 8. 怎么判断模型收敛了?模型会不会过拟合? 1. 主要看训练结束后的result.png中的精度曲线,精度曲线没有上升的趋势就可以了. 2. 很多场景的数据下在曲线上都会呈现像过拟合的趋势,但是代码中已经会自动保存best.pt,用best.pt可以避免训练后期过拟合导致的精度下降等等影响,简单来说就是只需要用best.pt即可,不需要理会过拟合的问题. 9. 曲线震荡问题. 这类问题都不好解决,如果基础模型就震荡很厉害,基本都是跟数据集有关系,如果改进后的模型后出现,基本都是改进模型不合适的问题. 10. 绘制结构图问题. 可看以下这两个视频: 1. https://www.bilibili.com/video/BV1X94y1K76Z/ 2. https://www.bilibili.com/video/BV1WA4m1V7nQ/ 11. mmcv安装问题. 可以看官方文档:https://mmcv.readthedocs.io/en/latest/get_started/installation.html#install-with-pip 12. 预训练权重相关问题. 可以看这个视频:https://www.bilibili.com/video/BV1Q1421Q7Zw/ 不载入预训练权重的话,只需要在train.py中的model.load注释即可! 13. 绘制结构图教程. 1. [什么?你说你不会画模型结构图?行吧,那你进来看看吧,手把手教你画YAML结构图!](https://www.bilibili.com/video/BV1X94y1K76Z/) 2. [什么?你说你更换主干后看不懂配置文件也不懂画结构图?那你快点进来看看了!](https://www.bilibili.com/video/BV1WA4m1V7nQ/) 3. [从简到难手把手教你画Pytorch模块内的结构图!](https://www.bilibili.com/video/BV1dC411p7H7/) 14. 配置文件整合问题. 1. [YOLOV8-不会把多个改进整合到一个yaml配置文件里面?那来看看这个吧!从简到难手把手带你整合三个yaml](https://www.bilibili.com/video/BV15H4y1Y7a2/) 15. 训练结果可重现的问题. 1. torch版本需要大于等于2.0.0才会开启确定性训练算法. 2. 训练中不能开启cache参数. 3. 满足以上条件外,还要看模型中是否有不支持确定性训练算法的操作,pytorch官网也标注,即使开启确定性训练算法也不是百分百能保证训练结果的可重现性. 16. 参数详解. 1. [训练参数官方文档地址](https://docs.ultralytics.com/modes/train/#resuming-interrupted-trainings:~:text=a%20training%20run.-,Train%20Settings,-The%20training%20settings) 2. [验证参数官方文档地址](https://docs.ultralytics.com/modes/val/#usage-examples:~:text=of%20each%20category-,Arguments%20for%20YOLO%20Model%20Validation,-When%20validating%20YOLO) 3. [推理参数官方文档地址](https://docs.ultralytics.com/modes/predict/#inference-sources:~:text=of%20Results%20objects-,Inference%20Arguments,-model.predict()) 4. [导出参数官方文档地址](https://docs.ultralytics.com/modes/export/#usage-examples) 17. Freezing layer 'model.22.dfl.conv.weight' 这个是正常的,这一层就是不需要训练。 18. 为什么程序开始的时候会下载yolov8n.pt. 这个是用于AMP混合精度训练测试用的,不是预训练权重,如果下载慢,可以自行下载后放到运行目录下,它检测到有这个文件就不会下载。 19. 为什么训练过程中显存不断在变化?有时大有时小? 因为yolov8中的标签分配策略的问题,正常现象。 20. 如何关闭早停? train.py中设置patience为0. 21. 设置了epochs为300,但是发现还没有收敛,可以在300次的基础上再训练100次吗? 不行,训练了300次后再训练100次跟一次性训练400次的结果很大概率不一样,因为它们的学习率匹配不上。 22. 我的验证集精度0.6,但是测试集精度只有0.5,这是什么问题? 没问题,一般是由于测试集与验证集差异较大导致,如果是私有数据集可以考虑重新合并随机划分,如果是公开数据集就不用管,例如visdrone2019,验证集也跟测试集相差10个点。 23. 预测的时候在同一个目标上出现了两个框,怎么解决? 在detect.py中设置agnostic_nms=True,原始的nms是基于每个类里面进行的,设置agnostic_nms=True就是所有目标下进行,不会细分类别,可以解决这个问题。 24. 能不能不要分测试集? 除非是公开数据集没有测试集,否则不建议,如果到时候审稿人问到为什么你没有测试集,你没有一个合理的理由可以回复,最坏的结果是实验重做。 25. 如何可视化中间层的特征图? 运行detect.py中并设置visualize=True. 26. 为什么yolov8-p2.yaml比yolov8.yaml参数量要小,但是计算量变大? 正常现象,可看[github-issue链接](https://github.com/ultralytics/ultralytics/issues/7502). 27. 像项目自带的v3、v5配置文件能直接用来做模型的对比实验吗? 不可以,因为里面用的都是v8的anchorfree的头,不是原版的模型。 28. 怎么关闭混合精度训练? train.py中设置参数amp=False. 29. 训练时候输出: ERROR:albumentations.check_version:Error fetching version info 怎么办? 不用理会,应该是albumentations在检测最新的版本号时网络连接失败. 30. 怎么计算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指标教程. 31. 如何绘制曲线对比图? 本项目内的plot_result.py使用教程. 各种不同类型的模型曲线对比图和精度对比图也可以看这期视频:https://www.bilibili.com/video/BV1yf421X7t5/ 32. 如何替换主干? 可以看项目视频-添加我的github仓库上别的主干说明. # YOLOV8源码常见疑问解答小课堂 1. [关于配置文件中Optimizer参数为auto的时候,究竟Optimizer会怎么选用呢?](https://www.bilibili.com/video/BV1K34y1w7cZ/) 2. [best.pt究竟是根据什么指标来保存的?](https://www.bilibili.com/video/BV1jN411M7MA/) 3. [数据增强在yolov8中的应用](https://www.bilibili.com/video/BV1aQ4y1g7ah/) 4. [如何添加FPS计算代码和FPS的相关的一些疑问](https://www.bilibili.com/video/BV1Sw411g7DD/) 5. [预测框粗细颜色修改与精度小数位修改](https://www.bilibili.com/video/BV12K421a7rH/) 6. [导出改进/剪枝的onnx模型和讲解onnx-opset和onnxsim的作用](https://www.bilibili.com/video/BV1CK421e7Y3/) # 一些非常推荐小白看的视频链接 1. [YOLOV8模型详细讲解(包含该如何改进YOLOV8)(刚入门小白,需要改进YOLOV8的同学必看!)](https://www.bilibili.com/video/BV1Ms421u7VH/) 2. [提升多少才能发paper?轻量化需要看什么指标?需要轻量化到什么程度才能发paper?这期给大家一一解答!](https://www.bilibili.com/video/BV1QZ421M7gu/) 3. [深度学习实验部分常见疑问解答!(小白刚入门必看!少走弯路!少自我内耗!)](https://www.bilibili.com/video/BV1Bz421B7pC/) ``` 1. 如何衡量自己的所做的工作量够不够? 2. 为什么别人的论文说这个模块对xxx有作用,但是我自己用的时候还掉点了? 3. 提升是和什么模型相比呢 比如和yolov8这种基础模型比还是和别人提出的目前最好的模型比 4. 对比不同的模型的时候,输入尺寸,学习率,学习次数这些是否需要一致? ``` 4. [深度学习实验部分常见疑问解答二!(小白刚入门必看!少走弯路!少自我内耗!)](https://www.bilibili.com/video/BV1ZM4m1m785/) ``` 1. 为什么我用yolov8自带的coco8、coco128训练出来的效果很差? 2. 我的数据集很大,机器跑得慢,我是否可以用数据集的百分之10的数据去测试这个改进点是否有效?有效再跑整个数据集? ``` 5. [深度学习实验部分常见疑问解答三!(怎么判断模型是否收敛?模型过拟合怎么办?)](https://www.bilibili.com/video/BV11S421d76P/) 6. [YOLO系列模型训练结果详细解答!(训练过程的一些疑问,该放哪个文件运行出来的结果、参数量计算量在哪里看..等等问题)](https://www.bilibili.com/video/BV11b421J7Vx/)