Yolov5 使用

x33g5p2x  于2021-11-12 转载在 其他  
字(3.1k)|赞(0)|评价(0)|浏览(312)

相比于Yolov4 ,v5的模型更多,适用配置的设备更广泛。

window环境下,首先安装anaconda,便于创建pytorch环境。安装直接百度。

第一步:从github下载压缩包

https://github.com/ultralytics/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文件。

    1. train图片
  1. train标签(与train 图片一一对应,名字相同,后缀不同)
  2. test图片
  3. test标签 (与test 图片一一对应,名字相同,后缀不同)

第七步 把自己的数据集转移到yolov5工程目录

在工程目录下找到data文件夹,在这个文件夹里新建一个文件夹。可以任意命名(为方便说明,这里用命名为mydataset。在mydataset下新建两个文件夹。一个命名为images,另一个命名为labels。这两个文件夹名字是规定的,不能随意。然后分别在这两个文件夹下都新建两个文件夹,命名为train,test。

然后把第六步得到的4个文件夹中的文件转移到对应目录中

    1. train图片->images/train
  1. train标签->labels/train
  2. test图片->images/test
  3. 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,则打开摄像头
如果是图片路径,则对图片进行预测。结果路径会打印
如果是文件夹,则对文件夹中的图片和视频进行预测。
如果是视频,则对视频进行预测。

相关文章