用YOLOv5和PyTorch进行物体检测
物体检测通常是最有趣的计算机视觉任务之一,初学者或爱好者可以用它来启动他们在计算机视觉和人工智能方面的职业生涯。
在这篇文章中,我们将学习一些关于物体检测的基础知识,然后再继续使用[YOLOv5]和[COCO数据集来]检测物体。
前提条件
作为先决条件,你必须有。
- 在你的机器上安装了Python。
- 有Python的基本知识。
简介
物体检测是一项计算机视觉任务,涉及到识别图像或视频中某一类别的物体实例。
物体检测被用于非常广泛的应用中,如自动驾驶汽车、安全、制造业等。
物体检测有两种主要的先进方法,即。
- 一阶段方法--这些方法主要集中在推理速度上。例子包括。YOLO、RetinaNet和SSD。
- 两阶段方法--这些方法主要集中在检测精度上。例子包括。Mask R-CNN、Faster R-CNN和Cascade R-CNN。
为了检查我们模型的准确性,我们将使用流行的物体检测器指标平均精度。
在本教程中,我们将使用YOLO*(You Only Look Once*),特别是YOLOv5,它专注于推理速度和准确性。
YOLO是一种快速而准确的物体检测方法。该算法只看一次图像,并检测所有存在的物体以及它们的位置。
YOLO的工作方式是将图像分割成一个网格,每个网格单元都能自行识别一个物体。网格单元预测所有的边框,并给每个边框一个信心分数,以确定每个预测的准确性。
说到性能,YOLO远远超过了其他物体检测器。在实时情况下,它能以每秒约155帧(fps)的速度处理图像,达到其他物体检测器(如R-CNN)的mAP(平均平均精度--一种流行的物体检测器评估指标)的两倍。
YOLOv5是YOLO系列的最新版本,是一组在COCO数据集上训练的复合比例的物体检测模型,用于模型集合*(在预测过程中结合多个模型*)、测试时间增强*(对测试图像进行随机修改,如翻转、旋转等)和超参数进化(优化)。)和超参数进化(使用遗传算法优化超参数*)。
设置开发环境
为了设置我们的开发环境,我们将首先创建我们项目的虚拟环境,如下所示。
进入终端,创建一个名为object-detection的新目录,如下图所示。
mkdir object_detection
然后,在你的项目目录内创建一个虚拟环境。
cd object detection
py -m venv .env
然后,我们将使用以下命令激活环境。
cd .env/Scripts
activate
cd ..
cd ..
一旦我们的环境设置完成,我们将继续安装我们项目的依赖项。
安装项目的依赖性
首先,我们将使用以下命令克隆GitHub上的YOLOV5仓库。
git clone https://github.com/ultralytics/yolov5.git
在成功克隆仓库到我们项目的环境后,我们将使用以下命令安装所有的依赖项。
cd yolov5
pip install -r requirements.txt
上面的命令安装了以下软件包。

一旦我们完成了所有所需依赖项的安装,我们将继续训练我们的模型。
使用 detect.py 进行模型推理
由于YOLOv5是一个预先训练好的模型,我们将通过运行下面的命令来测试它的性能,看看它通过网络摄像机检测物体的准确性。
python detect.py --source 0
这里,--source 0 标志着数据位置来自实时网络摄像机。

要测试它在其他来源上的性能,如图像文件(比方说img.jpg ),请使用以下命令。
python detect.py --source img.jpg # for a specific image file
运行下面的命令将检测存储在路径data/images 的图像上的对象。
python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images
在这里,我们使用yolov5预训练的权重来训练默认分辨率为--img 640 (大小为640像素)的图像,来源为data/images 。

上述图像对象将被检测出来,如下图所示。

检测图像的结果将被存储在路径runs/detect/exp 。
对于其他视觉对象,请使用以下命令。
python detect.py --source vid.mp4 # for a specific video
python detect.py --source path/ # for a specific directory
python detect.py --source path/*.jpg # for a specific glob
python detect.py --source 'https://youtu.be/Zgi9g1ksQHc' # for a specific YouTube video
python detect.py --source 'rtsp://example.com/media.mp4' # for a specific RTSP, RTMP, or HTTP stream
注意:在运行上面的命令之前,确保你要检测的对象位于
data/...文件夹下。例如,data/videos,data/images, 等等。
使用PyTorch Hub和YOLOv5进行模型推理
为了检查使用PyTorch进行的推理,我们将从PyTorch Hub加载预先训练好的YOLOv5s 模型,然后传递一张图片进行推理。
注意:"YOLOv5s "是最快、最轻的YOLOv5模型。
import torch
# Model - we will use yolov5s
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
# Image
img = 'https://ultralytics.com/images/zidane.jpg'
# Inference
results = model(img) # pass the image through our model
results.pandas().xyxy[0] # return the predictions as a pandas dataframe
上述代码的结果将是这样的。
模型训练
我们将继续在COCO128上训练我们的模型,COCO128是与YOLOv5一起从YOLOv5的最新版本中下载的。
在训练我们的自定义模型时,我们将使用YOLOv5预训练的权重(--weights yolov5s.pt),如下图所示。
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
或者使用随机初始化的权重(--weights '' --cfg yolov5s.yaml),如下图所示。
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights '' --cfg yolov5s.yaml --cache
在这里,我们使用预训练的YOLOv5微调了COCO128 ,3 epochs。
我们的训练结果将被保存在目录runs/train/exp 下,运行目录不断增加,即runs/train/exp1 ,runs/train/exp2 ,以此类推。
模型验证
为了评估我们的模型在COCO数据集上的准确性,我们将使用以下命令下载COCO 2017验证数据集。
torch.hub.download_url_to_file('https://ultralytics.com/assets/coco2017val.zip', 'tmp.zip')
使用解压缩文件。
unzip -q tmp.zip -d ../datasets && rm tmp.zip
一旦完成,我们将运行以下命令来验证我们的模型。
python val.py --weights yolov5x.pt --data coco.yaml --img 640 --iou 0.65 --half
这里,我们在COCO val2017数据集上测试YOLOv5x ,图像大小为640 像素。
下面是我们输出的一个例子。
该模型的评估结果将被保存到目录runs/val/exp 。
结论
总结一下,我们已经了解了什么是物体检测,它的应用,以及它的实现。
我们还解决了YOLO物体检测算法(特别是YOLOv5),我们通过设置环境来检测图像和视频,用来执行我们自己的物体检测。