相比于Yolov4 ,v5的模型更多,适用配置的设备更广泛。
window环境下,首先安装anaconda,便于创建pytorch环境。安装直接百度。
第一步:从github下载压缩包
https://github.com/ultralytics/yolov5
如果英语看着费劲,可以参考这个博主的汉化版 :https://github.com/wudashuo/yolov5
下载好zip压缩包,解压之后放入一个工程目录,准备开始第二步。
第二步:下载依赖
首先,在anaconda中创建环境。
打开anaconda的命令行
创建环境名 比如叫yolov5
conda create -n yolov5
进入环境
activate yolov5
然后cd到工程目录下面
开始下载环境所需的依赖了。
然后输入命令
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple,
等待pip自动下载所需要的依赖。-i 参数是从清华镜像中下载依赖包,如果不加,则从国外源下载,不仅速度慢,还容易下载失败。
当所有依赖下载完成,可以开始第三步了。
第三步:下载权重文件
在https://github.com/ultralytics/yolov5/releases中下载4个权重文件,放到工程路径下的weights文件夹中。
一般这四个就够用了,s是最小的,速度最快,但是精度不高。
第四步 测试detect.py
在工程文件在运行cmd。
然后输入python detect.py --source 0 --weights=“weights/yolov5s.pt” (如果设备有摄像头)
或者python detect.py --source=“data/images/bus.jpg” --weights=“weights/yolov5s.pt”(设备没有摄像头)
前者会打开摄像头并实时探测物品,后者将用工程自带的一张测试图片进行测试。运行结束后,会打印结果文件的位置。在这个位置中可以找到测试结果。
结束摄像头进程 按ctrl+c即可,runs文件夹下有检测的结果。、
如果检测时的帧率只有几帧,也就是时间时0点几秒一张,多半时GPU没有使用。
检查自己的GPU是否可用
In [1]: import torch
In [2]: torch.cuda.current_device()
Out[2]: 0
In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0> In [4]: torch.cuda.device_count() Out[4]: 1 In [5]: torch.cuda.get_device_name(0) Out[5]: 'GeForce GTX 950M' In [6]: torch.cuda.is_available() Out[6]: True
可以检测到就行。如果检测不到GPU,可能是安装的cpu版本的pytorch..这时候需要手动安装pytorch的GPU版本
官网https://pytorch.org/get-started/locally/
复制下面的安装命令行就行。找适合自己设备的cuda版本
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
之后检测可用GPU之后,会发现帧率提升很大,几十帧。这也是比yolov4好一点的地方,可用选小模型,速度会快一些。
第五步 制作自己的数据集–下载LabelImg
任意位置运行cmd,然后 pip install LabelImg -i https://pypi.tuna.tsinghua.edu.cn/simple
下载安装完成后运行cmd,输入LabelImg,打开程序。
第六步 制作自己的数据集–打标签
把准备好的图片放到一个文件夹中,在LabelImg中打开这个文件夹。然后设置标签文件输出位置(change save Dir)。不要放在与图片相同的位置就行。然后对每张图片画框打标签。按w键可以画框,画完框后,就会弹出对话框,然后在对话框上写上标签名就行(这步工作就是说明图片上这个位置是什么东西)。打完标签后,你就得到两个文件夹。图片和标签。在标签文件夹中,你还得到了一个classes.txt文件。这个文件记录了数据集中所有类别。标签文件中记录的是引索。需要通过这个classes.txt文件才能知道对应的物品名称。图片和标签两个文件夹中的文件一一对应,它们名字相同,后缀名不同。然后你需要把数据分为训练集和测试集,比例要适中。
此时,你拥有4个文件夹和一个class.txt文件。
- train图片
- train标签(与train 图片一一对应,名字相同,后缀不同)
- test图片
- test标签 (与test 图片一一对应,名字相同,后缀不同)
第七步 把自己的数据集转移到yolov5工程目录
在工程目录下找到data文件夹,在这个文件夹里新建一个文件夹。可以任意命名(为方便说明,这里用命名为mydataset。在mydataset下新建两个文件夹。一个命名为images,另一个命名为labels。这两个文件夹名字是规定的,不能随意。然后分别在这两个文件夹下都新建两个文件夹,命名为train,test。
然后把第六步得到的4个文件夹中的文件转移到对应目录中
- train图片->images/train
- train标签->labels/train
- test图片->images/test
- test标签->labels/test
-
第七步 调整配置文件
1. 打开工程目录/models/yolov5s.yaml文件(如果训练的是其他模型则打开其他模型的yaml文件),然后把nc改为第六步中classes.txt中类别的数量。(你数据集中标签了多少样东西,这个数字就是几)
2. 打开工程目录/data/coco128.yaml文件。
把train:设置为第六步的train图片的存放位置
把val:设置为第六步的test图片的存放位置
程序会自动搜索labels文件的位置。这也就是第六步为什么要规定图片与标签文件夹名字的原因。这个搜索是通过简单字符串替换实现的
把nc:改为数据集的类别数目(1中的一样)
把names改为类别名称,顺序要和第六步得到的classes.txt中的一样。
第七步 训练权重
命令行切换到工程目录下。运行命令(运行之前确保修改的配置文件都保存好了)
python train.py --img 640 --data data/coco128.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 8 --epochs 50
这些参数根据实际情况进行调整。–cfg 指示用到的模型的配置文件的位置。–weights 指示对应模型权重文件的位置。
在开始训练前。会打印输出的位置。我们会得到训练指标,训练后的两个权重文件(一个是最佳权重,一个是最后一轮训练得到的权重)。
训练完成后,就可以去那个目录查看结果。
第八步 用训练得到的权重进行预测
与第四步一样,不同的是权重文件的位置变了
python detect.py --source 0 --weights=“weights/yolov5s.pt”。改一下权重路径就行。
=>python detect.py --source 0 --weights=“runs\train\exp3\weights\best.pt”
source 参数说明
如果是0,则打开摄像头
如果是图片路径,则对图片进行预测。结果路径会打印
如果是文件夹,则对文件夹中的图片和视频进行预测。
如果是视频,则对视频进行预测。