当前位置: 首页 > news >正文

无脑——010 复现yolov8 使用yolov8和rt detr 对比,并训练自己的数据集

1.配置环境

1.

首先去官网下载yolov8的zip
https://github.com/ultralytics/ultralytics
存放在我的目录下G:\bsh\yolov8
然后使用conda创建新的环境

conda create -n yolov8 python=3.8
#然后激活环境
conda activate yolov8

然后安装pytorch,注意 ,pytorch1.10.1以后的版本才支持rtdetr.pt的两个权重文件。

 conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch

安装 ultralytics

pip install ultralytics

(然后我需要降低pillow的版本来适配我的pytorch,因为报错ImportError: DLL load failed while importing _imaging: 找不到指定的模块。:解决方法参考附录1,如果你们不需要请略过)

然后下载官网的权重文件:
https://github.com/ultralytics/assets/releases
这里我下载了一堆进行测试:
在这里插入图片描述
然后照一张图片进行测试,
可以参考官方文档
https://docs.ultralytics.com/modes/predict/#inference-arguments
自己照一张图片,放在G:\bsh\yolov8\datademo\bug.jpg里边

yolo detect predict model=weights/yolov8n.pt source=datademo\bus.jpg

运行结果如下图:
在这里插入图片描述
再拿一张自己随便拍的做测试,只能说种类越来越多了,之前yolov5那好像没有鼠标垫?
在这里插入图片描述
ps:
检测目录设置成文件夹就行。遍历文件夹里的所有文件进行检测。

yolo detect predict model=weights/yolov8n.pt source=datademo

顺便附上yolov8支持的检测参数

Usage - sources:$ yolo mode=predict model=yolov8n.pt source=0                               # webcamimg.jpg                         # imagevid.mp4                         # videoscreen                          # screenshotpath/                           # directorylist.txt                        # list of imageslist.streams                    # list of streams'path/*.jpg'                    # glob'https://youtu.be/Zgi9g1ksQHc'  # YouTube'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP streamUsage - formats:$ yolo mode=predict model=yolov8n.pt                 # PyTorchyolov8n.torchscript        # TorchScriptyolov8n.onnx               # ONNX Runtime or OpenCV DNN with dnn=Trueyolov8n_openvino_model     # OpenVINOyolov8n.engine             # TensorRTyolov8n.mlpackage          # CoreML (macOS-only)yolov8n_saved_model        # TensorFlow SavedModelyolov8n.pb                 # TensorFlow GraphDefyolov8n.tflite             # TensorFlow Liteyolov8n_edgetpu.tflite     # TensorFlow Edge TPUyolov8n_paddle_model       # PaddlePaddle

测了刚才一圈,这些模型,除了yolov_nas的三个模型,都可以正常使用,据作者说暂时不打算加入yolo-NAS,那不知道为什么会有推理的模型,好奇怪
在这里插入图片描述
在这里插入图片描述

我还意外发现,yolov8s可以检测到键盘,其他的不行
在这里插入图片描述

2.训练自己的数据集

正在更新ing
2023年8月11日
还是使用yolov5准备的数据集,准备方法可以看我之前的文章
http://t.csdn.cn/MhxVF
然后运行代码:

 yolo task=detect mode=train model=weights/yolov8s.pt data=./data/datazaoj1.yaml batch=4 epochs=50 imgsz=640 workers=4 device=0 close_mosaic=50

这里要把batch和worker调小,因为我的GTX 1060的显卡只有6G的显存,不然 就会电脑死机,记得,训练的过程中,不要打开谷歌浏览器,这玩意占用内存太多了,很容易导致训练失败。最后马赛克增强去掉,不然显存也不够
训练结果比yolov5效果好多了

Validating runs\detect\train16\weights\best.pt...
Ultralytics YOLOv8.0.150  Python-3.8.17 torch-1.10.1 CUDA:0 (NVIDIA GeForce GTX 1060, 6144MiB)
Model summary (fused): 168 layers, 11127906 parameters, 0 gradientsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 2/2 [00:00<00:00,  7.51it/s]all         11         45       0.89      0.915      0.982      0.818yuanguojia         11         14      0.774          1      0.986      0.893naiguojia         11          6      0.866          1      0.995      0.879huanhuogai         11          7      0.848          1      0.995      0.795dianchi         11          6      0.883          1      0.995      0.829shuomingshu         11          6      0.966          1      0.995      0.851paomoban         11          6          1      0.491      0.924      0.662
Speed: 0.6ms preprocess, 14.5ms inference, 0.0ms loss, 1.5ms postprocess per image
Results saved to runs\detect\train16
名称默认值描述
batch16训练的批量大小
modelnull训练模型权重,可指定具体位置,如yolov8n.pt,yolov8n.yaml等
epochs100训​​练的轮次
imgsz640输入图像压缩后的尺寸
devicenull用于训练的设备,可选0或1或cpu等
workers8多线程数据加载,默认8
datanull数据路径,使用自定义的yaml文件或者官方yaml
lr0float初始学习率
lrffloat最终学习率(lr0 * lrf)
patience50早期训练时,准确率如果没有显著上升则停止的轮次
saveTrue是否需要保存训练的模型和预测结果
cacheFalse使用缓存进行数据加载,可选True/ram, disk 或者 False
projectnull项目名称
namenull实验的名称
exist_okFalse是否覆盖现有实验
pretrainedFalse是否使用预训练模型
optimizer‘SGD’优化器,可选[‘SGD’, ‘Adam’, ‘AdamW’, ‘RMSProp’]
verboseFalse是否打印详细输出
seed0重复性实验的随机种子
deterministicTrue是否启用确定性模式
single_clsFalse是否将多类数据训练为单类
image_weightsFalse是否使用加权图像选择进行训练
rectFalse是否支持矩形训练
cos_lrFalse是否使用余弦学习率调度器
close_mosaic10禁用最后 10 个 epoch 的马赛克增强
resumeFalse是否从上一个检查点恢复训练
lr00.01初始学习率(SGD=1E-2, Adam=1E-3)
lrf0.01余弦退火超参数 (lr0 * lrf)
momentum0.937学习率动量
weight_decay0.0005权重衰减系数
warmup_epochs3.0预热学习轮次
warmup_momentum0.8预热学习率动量
warmup_bias_lr0.1预热学习率
box7.5giou损失的系数
cls0.5分类损失的系数
dfl1.5dfl损失的系数
fl_gamma0.0焦点损失的gamma系数 (efficientDet默认gamma=1.5)
label_smoothing0.0标签平滑
nbs64名义批次,比如实际批次为16,那么64/16=4,每4 次迭代,才进行一次反向传播更新权重,可以节约显存
overlap_maskTrue训练期间掩码是否重叠(仅限分割训练)
mask_ratio4掩码下采样率 (仅限分割训练)
dropout0.0使用 dropout 正则化 (仅限分类训练)

然后如果有验证机可以试一下效果:

yolo task=detect mode=val model=runs/detect/train3/weights/best.pt data=data/fall.yaml device=0

有这么多参数可以选择

名称默认值描述
valTrue在训练期间验证/测试
save_jsonFalse将结果保存到 JSON 文件
save_hybridFalse保存标签的混合版本(标签+附加预测)
conf0.001用于检测的对象置信度阈值(预测时默认 0.25 ,验证时默认0.001)
iou0.6NMS 的交并比 (IoU) 阈值
max_det300每张图像的最大检测数
halfTrue使用半精度 (FP16)
dnnFalse使用 OpenCV DNN 进行 ONNX 推理
plotsFalse在训练期间显示图片

其实如果正常训练完成,会自动进行验证评估的,就是最后显示的那一些精准度
然后推理测试(模型预测)

yolo task=detect mode=predict model=runs/detect/train3/weights/best.pt source=data/images device=0
名称默认值描述
source‘ultralytics/assets’图片或视频的源目录
saveFalse是否保存结果
showFalse是否显示结果
save_txtFalse将结果保存为 .txt 文件
save_confFalse保存带有置信度分数的结果
save_cropFasle保存裁剪后的图像和结果
conf0.3置信度阈值
hide_labelsFalse隐藏标签
hide_confFalse隐藏置信度分数
vid_strideFalse视频帧率步幅
line_thickness3边界框厚度(像素)
visualizeFalse可视化模型特征
augmentFalse将图像增强应用于预测源
agnostic_nmsFalse类别不可知的 NMS
retina_masksFalse使用高分辨率分割蒙版
classesnull只显示某几类结果,如class=0, 或者 class=[0,2,3]

结果比较满意
在这里插入图片描述
在这里插入图片描述
然后用rtdetr-x.pt试试,进行对比
同样的训练代码,worker=4训练不起来,改成了=2也不行,
然后就用rtdetr-l.pt测试了

yolo task=detect mode=train model=weights/rtdetr-l.pt data=./data/datazaoj1.yaml batch=2 epochs=50 imgsz=640 workers=1 device=0 close_mosaic=50

这是我的参数
然后结果:

Validating runs\detect\train20\weights\best.pt...
Ultralytics YOLOv8.0.150  Python-3.8.17 torch-1.10.1 CUDA:0 (NVIDIA GeForce GTX 1060, 6144MiB)
rt-detr-l summary: 498 layers, 31996070 parameters, 0 gradientsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 3/3 [00:00<00:00,  3.91it/s]all         11         45      0.687      0.941      0.951      0.738yuanguojia         11         14      0.699          1      0.885       0.79naiguojia         11          6      0.552          1      0.927      0.868huanhuogai         11          7      0.719          1      0.995      0.729dianchi         11          6      0.475          1      0.995       0.79shuomingshu         11          6      0.676          1      0.995      0.787paomoban         11          6          1      0.644      0.909      0.466
Speed: 1.0ms preprocess, 60.0ms inference, 0.0ms loss, 1.3ms postprocess per image
Results saved to runs\detect\train20

就到这里,然后去重新装个pytorch。
1.10.1 + 10.2cuda的torch官方配的是0.11.2的torchvision,即使版本对的,也是会出现这个问题。
后来给降到了1.10.0torch + 0.11.0torchvision,
正在配置ing

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=10.2 -c pytorch

附录1

1.pillow库报错

ImportError: DLL load failed while importing _imaging: 找不到指定的模块。
(yolov8) PS G:\bsh\yolov8> pip show pillow
Name: Pillow
Version: 9.3.0

看出,报错是因为pillow版本过高,直接安装8.0版本即可

pip install pillow==8.0

2.yolo_nas测试问题

安装pip install super_gradients之后还是报错LooseVersion = distutils.version.LooseVersion
AttributeError: module ‘distutils’ has no attribute ‘version’
然后又安装的pip install setuptools==59.5.0

http://www.lryc.cn/news/119385.html

相关文章:

  • 如何给Google Chrome增加proxy
  • 设计模式——原型模式
  • Spring框架中的Bean生命周期
  • async和await修饰符
  • vivado tcl创建工程和Git管理
  • 田间农业数字管理系统-高标准农田建设
  • 【网络安全】等保测评系列预热
  • 解决: git拉取报错 git 未能顺利结束 (退出码 1)
  • 【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别
  • 开发一个RISC-V上的操作系统(六)—— 中断(interrupt)和异常(exception)
  • 心跳跟随的心形灯(STM32(HAL)+WS2812+MAX30102)
  • 5. 服务发现
  • 算法备案背后的原因:确保技术透明度与公正
  • Linux centos 常用命令 【持续更新】
  • 《使用 VMware 在 Windows 上搭建 Linux 系统的完整指南》
  • 大数据Flink(六十):Flink 数据流和分层 API介绍
  • 软件测试面试题——如何测试App性能?
  • 玩转C链表
  • MySQL表的基础的增删改查
  • 数字化车间
  • 基础堆排序
  • ISC 2023 | 赛宁网安验证评估 重磅发布
  • 浅谈AI浪潮下的视频大数据发展趋势与应用
  • github 无语的问题,Host does not existfatal: Could not read from remote repository.
  • 机器学习基础之《特征工程(4)—特征降维—案例》
  • docker 删除镜像文件
  • ArcGIS Pro 基础安装与配置介绍
  • 剑指 Offer 13. 机器人的运动范围
  • 技术应用:Docker安全性的最佳实验|聊聊工程化Docker
  • 【Tomcat】Tomcat部署及优化