环境
为了方便使用 yolov5
目标检测,有网友已经将其做成了库,提交到了官方的索引库 pypi
上,这样,我们就可以直接使用 pip进行安装了,其项目地址: https://github.com/fcakyon/yolov5-pip
首先创建一个干净的 python
虚拟环境
conda create -n yolov5pip python=3.8
conda activate yolov5pip
如果 python
版本大于3.7,直接使用 pip
安装
pip install yolov5
如果 python
的版本是3.6的话,需要安装指定版本的 numpy
和 matplotlib
pip install "numpy>=1.18.5,<1.20" "matplotlib>=3.2.2,<4"
pip install yolov5
yolov5
库安装好后,同时会生成 yolov5
的命令行工具,其使用方法与源码中的 detect.py
非常类似,如下
yolov5 detect --source 0 # webcam
file.jpg # image
file.mp4 # video
path/ # directory
path/*.jpg # glob
rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa # rtsp stream
rtmp://192.168.1.105/live/test # rtmp stream
http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8 # http stream
测试发现,cpu的环境下,图片、视频检测都没问题,但是如果使用 gpu的话,就会报错了,这可能是目前版本的 bug
YOLOv5 2021-9-15 torch 1.7.1+cu101 CUDA:0 (NVIDIA GeForce GTX 1070 Ti, 8116.4375MB)
Fusing layers…
Model Summary: 283 layers, 7276605 parameters, 0 gradients
Traceback (most recent call last):
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/bin/yolov5”, line 8, in
sys.exit(app())
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/lib/python3.8/site-packages/yolov5/cli.py”, line 11, in app
fire.Fire(
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/lib/python3.8/site-packages/fire/core.py”, line 141, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/lib/python3.8/site-packages/fire/core.py”, line 466, in _Fire
component, remaining_args = _CallAndUpdateTrace(
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/lib/python3.8/site-packages/fire/core.py”, line 681, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/lib/python3.8/site-packages/torch/autograd/grad_mode.py”, line 26, in decorate_context
return func(*args, **kwargs)
File “/home/xugaoxiang/anaconda3/envs/yolov5pip/lib/python3.8/site-packages/yolov5/detect.py”, line 120, in run
model(torch.zeros(1, 3, *imgsz).to(device).type_as(next(model.parameters()))) # run once
TypeError: zeros() argument after * must be an iterable, not int
除了 detect检测之外,yolov5还支持 train、val和export
模型训练的命令如下
yolov5 train --data coco.yaml --cfg yolov5s.yaml --weights '' --batch-size 64
yolov5m 40
yolov5l 24
yolov5x 16
另外关于 val和 export命令的使用,可以通过 --help来查看其具体支持的参数,如
yolov5 export --help
库安装好了,就可以在 python中调用了,来看个最简单的示例
# 导入模块
import yolov5
# 载入模型
model = yolov5.load('yolov5s.pt')
# 待检测的图片
img = 'https://github.com/ultralytics/yolov5/raw/master/data/images/zidane.jpg'
# 推理,默认参数
# results = model(img)
# 使用特定尺寸进行推理
# results = model(img, size=1280)
# 数据增强,能够检测出更多的目标,当然也有可能出现误检
results = model(img, augment=True)
# 检测结果数据解析,所属类别、置信度、目标位置信息
predictions = results.pred[0]
boxes = predictions[:, :4] # x1, x2, y1, y2
scores = predictions[:, 4]
categories = predictions[:, 5]
# 显示检测结果
results.show()
# 保存检测结果图片
results.save(save_dir='results/')
将官方提供的 yolov5s模型下载下来,然后执行上述脚本,检测结果如下
由于使用了 augment参数,检测结果多了个 person,默认参数的检测结果与原版 yolov5检测结果一致
首选需要安装 gpu版本的 pytorch,这里选择 1.7.1
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
跟原版一样,通过 device参数来指定 cuda加速
from yolov5 import YOLOv5
# 模型路径
model_path = 'yolov5s.pt'
device = "cuda" # or "cpu"
# 模型初始化
yolov5 = YOLOv5(model_path, device)
# 待检测图片
image = 'https://github.com/ultralytics/yolov5/raw/master/data/images/zidane.jpg'
# 推理,默认参数
results = yolov5.predict(image)
# 使用特定尺寸进行推理
results = yolov5.predict(image, size=1280)
# 数据增强,能够检测出更多的目标,当然也有可能出现误检
# results = yolov5.predict(image, augment=True)
# 多个参数一起使用
# results = yolov5.predict(image, size=1280, augment=True)
# 如果需要检测多张图片的话,可以使用列表
# results = yolov5.predict([image1, image2], size=1280, augment=True)
# 检测结果数据解析,所属类别、置信度、目标位置信息
predictions = results.pred[0]
boxes = predictions[:, :4] # x1, x2, y1, y2
scores = predictions[:, 4]
categories = predictions[:, 5]
# 显示检测结果
results.show()
# 保存检测结果
results.save(save_dir='results/')
colab是google提供的一个jupyter notebook工具,支持google drive、tensorflow在内的google全家桶,主要用于机器学习的开发和研究。colab最大的好处是给广大的AI开发者提供免费的gpu资源,可以在上面非常轻松地运行如tensorflow、pytorch、keras等深度学习框架。
来到google drive,点击左上方的New
创建一个新的文件夹colab
接下来,将准备好的口罩数据集上传到colab文件夹中,这个数据集,前面我们在YOLOv5模型训练的时候用过,可以到下面的地址下载
原始链接 https://public.roboflow.ai/object-detection/mask-wearing
接下来创建colab,点击New --> More --> Google Colaboratory
创建好notebook后,需要来到 修改 --> 笔记本设置 设置gpu加速
GPU环境设置好后,我们就可以在notebook中查看colab提供的gpu资源了,使用!nvidia-smi命令
可以看到google提供的硬件是是tesla P100,显存是16G。貌似每次colab分配的gpu是不一样的,有时候是P100,有时候是T4
下面看看pytorch的安装情况,执行
import torch
torch.__version__
可以看到平台已经默认安装,且版本是1.6,CUDA的版本是10.1
如果需要安装第三方库,可以在单元格中直接安装,如!pip3 install torchvision
接下来就把google drive挂载过来,这样就可以在colab中使用google drive中的资源了
import os
from google.colab import drive
drive.mount('/content/drive')
path = "/content/drive/My Drive"
os.chdir(path)
os.listdir(path)
执行上述单元格中的代码,会要求进行输入验证码
google drive就会被挂载到目录/content/drive,后续就可以对google drive里的文件进行操作了
准备工作搞定好,我们就可以下载YOLOv5的源码了,在单元格中执行
git clone https://github.com/ultralytics/yolov5.git
然后切换到google drive,修改yolov5/models/yolov5s.yaml,将原来的nc: 80改为nc: 2
然后就可以来到colab,进入到yolov5目录,在单元格中执行训练命令
python train.py --data ../mask/data.yaml --cfg models/yolov5s.yaml --weights '' --batch-size 64
训练时,出现了pyyaml模块的一个错误,这是由于pyyaml版本过低的原因,我们升级下就可以解决
pip install -U pyyaml