前言
YOLO的简介
YOLO(You Only Look Once)是一种流行的目标检测算法,由Joseph Redmon等人于2015年提出。YOLO的设计思想是将目标检测任务转化为单个神经网络的回归问题,通过在图像上划分网格并对每个网格预测边界框和类别置信度来实现目标检测。
YOLO的发展历史
- YOLOv1:YOLOv1是最初的版本,提出了将目标检测任务统一为回归问题的思想,实现了实时目标检测。
- YOLOv2:YOLOv2在YOLOv1的基础上进行改进,引入了一些技术,如多尺度训练、Batch Normalization等,提高了检测性能。
- YOLOv3:YOLOv3进一步改进了网络结构,采用了更深的Darknet-53网络作为主干网络,提高了检测准确率和速度。
- YOLOv4:YOLOv4引入了一系列新技术,如CSPDarknet53、Mish激活函数、PANet等,使得性能得到进一步提升。
- YOLOv5:YOLOv5是由Ultralytics团队开发的版本,采用了PyTorch框架,针对性能和易用性进行了优化。
- …
目前,YOLO系列算法在目标检测领域具有广泛的应用和影响力,被广泛应用于实时目标检测、视频分析、自动驾驶等领域。
YOLO的官网
地址:https://docs.ultralytics.com/zh
YOLO的安装
环境准备
-
Git客户端
-
安装方法(windows系统下):
- 第一步:访问https://git-scm.com/downloads
- 第二步:下载对应系统的安装包进行安装
- 第三步:安装完成后,右键菜单→Git Bash,输入git --version,如果显示版本号,则说明安装成功。
-
安装方法(macOS系统下):
- 第一步:启动terminal命令行
- 第二步:输入brew install git,安装git
- 第三步:输入git --version,如果显示版本号,则说明安装成功。
-
-
Python环境
- 通过查看YOLO官网说明,ultralytics支持Python3.6+,因此需要安装Python3.6+版本的Python环境。
-
Pip
- 确保系统中已经安装了pip
下载代码
第一步:在本地创建一个文件夹(例如:D:\yolo_materials),启动cmd
如果是Mac系统,在/Users/{用户名}/下创建一个文件夹即可,例如:我创建在
/Users/deadwalk/Code/yolo_materials
第二步:在cmd中输入以下命令:
# git clone {仓库地址} 代表从仓库地址下载代码
git clone https://github.com/ultralytics/ultralytics.git
如果使用上面的gitclone命令拉取太慢,可以使用我在gitee上建立的镜像仓库,方法如下:
git clone https://gitee.com/deadwalk/ultralytics.git
代码拉取完毕后会显示如下
安装
在开始安装之前,我们再次回顾下Python解释器环境的问题:
-
一般情况下,如果安装了Python和Anaconda的话,那么我们的机器中存在两个Python解释器环境,如下图所示:
-
因为存在存在两个Python解释器环境,所以我们在安装使用时,可能存在:
- 问题1:通过命令行pip安装在python环境,但是在jupyter notebook中import提示没有相关组件;
- 问题2:通过anaconda prompt安装在anaconda的python环境中,但是vscode中import提示没有找到相关组件。
- …
对于以上问题,请自行分辨未来要使用哪个IDE以及要安装到哪个Python解释器环境中。当然,两个环境都安装也是一种办法:)
命令行中安装ultralytics
安装方法(windows系统下):
第一步:使用cd命令进入ultralytics
cd ultralytics
第二步:在命令行中输入如下命令
pip install -e .
这种方法,默认是将ultralytics安装到上图左侧的Python环境
安装方法(macOS系统下):
Mac下的安装方法与windows系统下非常类似:
第一步:启动terminal命令行,进入到ultralytics目录
第二步:在命令行中输入pip install -e .
anaconda prompt中安装ultralytics
安装方法(windows系统下):
第一步:启动anaconda prompt
第二步:创建虚拟环境
在anaconda prompt中输入命令创建虚拟环境
创建虚拟环境而不使用base环境,是避免因为频繁安装卸载组件,污染全局环境,进而造成未来多个工程运行时出现异常。
# 创建一个新的虚拟环境(示例名称为myenv,可根据需要修改,如:yolo)
conda create --name myenv# 激活新创建的虚拟环境
conda activate myenv
第三步:在anaconda prompt中输入命令切换到刚才下载的ultralytics目录
# 输入D: 回车,切换到D盘
D:# 输入cd yolo_materials,切换到yolo_materials目录
cd yolo_materials# 输入cd ultralytics,切换到ultralytics目录
cd ultralytics
第四步:运行安装命令
conda install -c conda-forge ultralytics
关于conda相关命令手册请查看《Anaconda conda常用命令:从入门到精通》
安装方法(macOS系统下):
第一步:创建anaconda虚拟环境
第二步:启动anaconda prompt
第三步:切换到刚才下载的ultralytics目录
第四步:运行安装命令
conda install -c conda-forge ultralytics
验证安装
新建Python代码文件,使用下面代码进行验证
from ultralytics import YOLO
import ultralyticsprint(ultralytics.__version__)
在Jupyter notebook中运行上述代码,如果出现如下提示,则说明安装成功。
在VSCode中运行上述代码,如果出现如下提示,则说明安装成功。
注意:在VSCode中验证安装时,注意切换解释器为之前创建的虚拟环境:
一些后置操作
安装完毕后,可以通过开始→运行→输入%appdata%回车,进入用户目录下的Appdata\Roaming目录。
进入%appdata%目录后,可以找到ultralytics目录,里面存放着ultralytics的安装文件。
删除settings.yaml文件以避免ultralytics每次都读取默认配置
YOLO的应用
官网示例
在成功安装YOLO之后,我们可以参考官网的示例进行测试。
from ultralytics import YOLO# 1,构建模型
model = YOLO("yolov8n-cls.yaml") if __name__ == "__main__":# 2,训练模型results = model.train(data="mnist160", epochs=100, imgsz=64)
根据运行日志,找到对应的文件夹
鼠标手势识别
我们同样可以使用YOLO进行鼠标手势识别项目的训练。
第一步:将鼠标手势数据集拷贝至ultralytics\datasets\gestures目录下。
第二步:修改训练脚本如下
from ultralytics import YOLO# 1,构建模型
model = YOLO("yolov8n-cls.yaml") if __name__ == "__main__":# 2,训练模型results = model.train(data="gestures", epochs=100, imgsz=128,batch=8)
第三步:运行训练脚本,训练过程中可通过如下命令查看GPU的使用情况
nvidia-smi
第四步:训练完毕后,加载使用训练的模型
在ultralytics\runs\classify\train*\weights目录下,可以找到训练好的模型;
我们通过以下代码加载模型文件,进行预测:
import streamlit as st
import torch
import os
import numpy as np
from PIL import Image
from ultralytics import YOLOif __name__ == "__main__":# 1. 显示当前设备是GPU设备还是CPUdevice = "cuda" if torch.cuda.is_available() else "cpu"st.write(f"当前设备是{device}设备")# 2. 加载使用YOLO训练的模型model = YOLO("best.pt") # load a custom trained model# 3. 上传一张图片img_path = st.file_uploader(label="上传一张图片", type=["png", "jpg", "jpeg"])if img_path:# 3.1 将上传的图像文件保存到临时文件with open("temp_img.jpg", "wb") as f:f.write(img_path.getvalue())img_path = "temp_img.jpg"# 4. 显示上传的图片img = Image.open(img_path)st.image(img, caption="上传的图片", use_column_width=True)# 5. 进行预测results = model(img_path)# 6. 显示预测结果for result in results:st.write(f"预测结果: {result}")# 7. 可视化预测结果annotated_img = results[0].plot() # 使用plot方法可视化st.image(annotated_img, caption="预测结果", use_column_width=True)
运行结果:
内容小结
- YOLO是深度学习中一个非常流行的模型,它具有很好的泛化能力,可以应用于各种场景。
- YOLO的使用非常简单,只需要三步:引入ultralytics库,创建模型,训练模型。
- YOLO训练后生成的模型文件以及过程日志,保存在ultralytics\runs目录下。
- 如果想使用自定义的数据集,将数据集按照YOLO的放在ultralytics\datasets目录下即可。
- YOLO训练后的模型使用时也比较简单,只需要三步:引入ultralytics库,加载模型,进行预测。
参考资料
CSDN:Anaconda conda常用命令:从入门到精通