YOLO 介绍
YOLO 是一个关于计算机视觉的深度学习模型,开发较为成熟。我们可以用它训练出属于自己的 AI 模型,而不用从无到有搭建一个框架,十分方便可靠。
1. 初步环境准备
YOLO 是一个大文件,我们要在 Githup 上下载他的源码
YOLO 有很多版本,我们以6.0版本为例子。
- 根据提示选择版本,点击右边绿色按钮 code,下载模型的源码
2. 文件解压缩后,在 vs code 中打开整个文件夹,文件结构如上
- 用 vs code 打开终端(或者用文件资源管理器打开文件夹,在空白处按 Shift+鼠标右键,选择打开 Power shell,输入命令:
pip install -r requirements. txt
,后等待环境安装。部分库可能会出现下载缓慢的情况,可以在网上换源单独下载(注:需下载 requirements. txt 中要求的版本)。
2. 数据集的准备
要把 YOLO 训练成你的形状,数据是必不可少的。
YOLO 的数据集分为两部分:原始图片(. jpg)和标签集(. txt),
其中,原始图片需要根据你的项目需求进行专门的收集(如果要识别火焰就收集一些带有火焰的图片),而标签数据分别储存在.txt 文件,文件名的前缀对应原始图片的前缀,如下:
每行有 5 个数据,新手不需要知道具体含义,感兴趣的小伙伴自行查阅
这些文件通常需要使用工具进行人工标注得到,这里推荐的工具是 make sense(Make Sense)。
进入 make sense 后点击右下角的 Get Started 按钮
将你收集的图片集文件拖入下图黑框中,或点击黑框,选中图片集文件,再点击 object detection 进入
准备一个 txt 文件再里面逐行写下你要识别的物品的标签
写好后点击红框按钮,将标签文件放入其中
标注图片后需要在右边选择标签名。当你标注完所有图片后,点击 Actions,选择 Export,并选择 yolo 格式导出,得到的压缩包就是图片标注数据,解压后得到. \txt 文件。每个. \txt 文件名的前缀对应原始图片文件名的前缀。
(注:只有标注过的图片才有对应的.\txt 文件,没有标注的图片没有对应的. \txt 文件)
(注:框与框之间尽量避免重叠)
调节参数
调节完参数后,试着跑你的程序
然后,由于版本的更新换代,你会遇到许多的error
问题:那些 error
问题 1
Exception: Dataset not found
意思是你放 dataset 文件的地方与你标注的路径不符合,程序在你标注的位置找不到对应 datase 文件
打开 data 文件夹中的 coco128.yaml,确定路径 path 为./datasets/coco,确定 datasets 文件放在 YOLOV5-6.0 文件下
AttributeError: module ‘numpy’ has no attribute ‘int’.
这是因为你的 numpy 太高级!!!
再 yolo 自带的 requierment.txt 文件中,要求 numpy 的版本至少在 1.18.5 之上,当你执行 pip install -r requirements.txt 命令时,他默认安装为1.24,但是再 numpy 版本更新时 numpy.int 在 NumPy 1.20中已弃用,在 NumPy 1.24中已删除。
不建议改用低版本的 numpy,有概率遇到新的 error,直接找到所有 np.int 改为 np.int_
打开报错文件,ctrl+f 查找所有 np.int,有两个文件,大概 5 、6 个
多跑两次就都找到了
问题 3
RuntimeError: result type Float can’t be cast to the desired output type __int 64
将 loss. Py 中 gain = torch.Ones (7, device=targets. Device)改为 gain = torch.Ones (7, device=targets. Device). Long ()即可。原因是新版本的 torch 无法自动执行此转换,旧版本 torch 可以。\n\nloss. Py 在 utils 文件夹下,ctrl+f 搜索 gain,找到 gain = torch.ones (7, device=targets. Device),将其修改为 gain = torch.Ones (7, device=targets. Device).Long(),问题就解决了
问题 4
AttributeError: ‘FreeTypeFont’ object has no attribute ‘getsize’
因为新版本的 pillow10 去除了 getsize 方法而用 getbbox 或 getlength 代替。
-
要么降级 pillow
pip install Pillow==9.5.0
-
要么将报错的地方的 getsize 改为 getbbox,但二者返回值是不一样的
getsize返回宽和高两个值,而getbbox返回上下左右四个值(left,right,top,bottle)
写成
left, top, right, bottom= self.font.getbbox(text) # text width, height
w=right - left
h=bottom - top
就可以了
问题 5
当你改用GPU跑程序的时候,会报错,这大概是因为你的torchvision版本不对
因为torch在安装同时安装的torchvision不是cuda版本(用pip查看一下就知道了),你要上torch官网自己安装对应版本
本文还有诸多不足,如果你还是不幸得遇到了依照本文无法解决的问题,祝你查的愉快
参考资料
- AttributeError: module numpy has no attribute int .报错解决方案_attributeerror: module ‘numpy’ has no attribute 'i-CSDN博客
- 解决yolov5错误:RuntimeError: result type Float can‘t be cast to the desired output type __int64_yolov5_utils.py result type float can’t be cast to-CSDN博客
- 运行yolov5训练时遇到Exception: Dataset not found ❌_dataset not found , missing paths-CSDN博客