目录
最终效果:
------------------------全文8963字102图一步一步完成大约耗时2h------------------------
所需软件以及环境:
Vmware Workstation 17pro
内存 8GB
处理器 6
硬盘 20GB
Python 3.8
Yolo V5
Pytorch 2.1
系统 Ubuntu20.04.6
一.【YOLOV5算法原理】
此步是对算法原理进行介绍,如需实战,直接跳过这一节(没有任何影响)到下一节【二、系统环境】
参考链接:
【YOLOV5】https://github.com/ultralytics/yolov5
【知乎江大白】https://zhuanlan.zhihu.com/p/172121380
【YOLO-YOLOV5】https://blog.csdn.net/guanjing_dream/article/details/123705221
结构:
1.输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放
2.Backbone:Focus结构,CSP结构
3.Neck:FPN+PAN结构
4.Prediction:GIOU_Loss
1.输入端
(1)Mosaic数据增强
Yolov5的输入端采用了和Yolov4一样的Mosaic数据增强的方式,Mosaic数据增强提出的作者也是来自Yolov5团队的成员,不过,随机缩放、随机裁剪、随机排布的方式进行拼接。
(2)自适应锚框计算
在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚框。在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。
(3)自适应图片缩放
在Yolov5的代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边。
2.Backbone
(1)Focus结构
Focus结构,在Yolov3&Yolov4中并没有这个结构,其中比较关键是切片操作。以Yolov5s的结构为例,原始608*608*3的图像输入Focus结构,采用切片操作,先变成304*304*12的特征图,再经过一次32个卷积核的卷积操作,最终变成304*304*32的特征图。
(2)CSP结构
Yolov5中设计了两种CSP结构,以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。
3.Neck
Yolov5现在的Neck和Yolov4中一样,都采用FPN+PAN的结构,但在Yolov5刚出来时,只使用了FPN结构,后面才增加了PAN结构,此外网络中其他部分也进行了调整。Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。
4.输出端
(1)Bounding box损失函数
Yolov5中采用其中的CIOU_Loss做Bounding box的损失函数。
(2)nms非极大值抑制
在目标检测的后处理过程中,针对很多目标框的筛选,通常需要nms操作。因为CIOU_Loss中包含影响因子v,涉及groudtruth的信息,而测试推理时,是没有groundtruth的。所以Yolov4在DIOU_Loss的基础上采用DIOU_nms的方式,而Yolov5中采用加权nms的方式。可以看出,采用DIOU_nms,下方中间箭头的黄色部分,原本被遮挡的摩托车也可以检出。
二.【系统环境】
1.虚拟机的安装与创建
首先需要安装虚拟机软件Vmware Workstation 17pro(这里我选择的是这个版本,不一定需要这个版本)百度即可下载
虚拟机软件打开后就是这样的界面:
点击新建虚拟机:
点击自定义,下一步:
下一步
稍后安装操作系统,下一步
选择Linux(我们稍后要安装的Ubuntu就是基于Linux的)下一步:
给虚拟机起一个名字(自己喜欢就行)
位置更改到自定义文件夹下(需要新建一个自己喜欢的文件夹)
选择处理器数量2,每个处理器的内核3(根据自己的笔记本性能来),我的笔记本是16核,最好不超过一半(设备管理器 – 处理器 - 查看)
分配虚拟机内存,建议4GB-8GB(我是8GB)
选择网络,桥接网络(之后可以更改)
下一步
下一步
选择新建虚拟机,下一步
分配磁盘大小,默认20GB有点小,下面需要安装配置各种环境和包,最好30GB,之后不够了可以很轻松的扩容,选择将虚拟磁盘拆分成多个空间。
需要新建一个目录文件夹(自己喜欢就行),这个文件夹就是你的虚拟磁盘
浏览一下你刚才的设置,确认无误后点击完成~
恭喜你完成了虚拟机的创建(进度1/9加油加油!!)
---------------------------------------------------------------------------------------------------------------------------------
2.安装Ubuntu操作系统
打开刚刚创建的虚拟机
第2步就是你这一步创建的目录文件夹(去找找啦)
我的虚拟机名字我起的ubuntu_Akaxi_20.04(虚拟机名字随便起)
打开后你就可以看到,这样的界面:
左边的红色框框就是你为虚拟机配置的信息(第一步骤干的事情)
现在我们需要正式的给他安装一个操作系统——Ubuntu
【Ubuntu镜像】http://mirrors.aliyun.com/ubuntu-releases/20.04/
这里选择Ubuntu版本20.04.6的桌面desktop-amd64位的iso镜像,如图,点击下载:
下载完成后,打开虚拟机的CD/DVD
点击浏览,找到刚刚下载的Ubuntu20.04.6的镜像文件,使用ISO镜像文件打开,这样就在虚拟机插入了Ubuntu噜
点击开启虚拟机(准备在虚拟机里面安装Ubuntu20.04.6操作系统)
进入安装界面,选择语言,中文,然后安装Ubuntu
选择安装Ubuntu时下载更新,显示不全,用win键 + 鼠标拖拽
选择清除整个磁盘并安装Ubuntu
磁盘分区,点击继续
选择系统时间,我们是东八区,默认上海,继续
设置Ubuntu系统信息与密码,姓名,计算机名字,密码,登录时需要密码,这个密码要记住噜,之后很多地方使用超级管理员权限需要输入密码。
等待安装(大概5-10分钟)
安装完毕,点击现在重启,看到此界面,就完成Ubuntu系统的安装噜。
进度(2/9)快啦快啦,加油加油
---------------------------------------------------------------------------------------------------------------------------------
3.环境的配置
****************************************************************************
3.1.Ubuntu下Anacoda安装以及虚拟环境配置
参考链接:http://Ubuntu系统下安装Anaconda3及配置 - 知乎 (zhihu.com)
在Ubuntu打开火狐浏览器:(没有网络,把虚拟机网络模式改成NAT模式)如图:
在清华源网址下载Anaconda3-2021-11-Linux-x86_64.sh
【清华源】https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
速度嘎嘎快
下载完成后,可以在文件夹,下载中找到下好的软件包
将其复制到主目录下面
在空白处鼠标右键,选择在终端打开
输入
bash Anaconda3-2021.11-Linux-x86_64.sh
准备安装啦
输入后,终端输出串串英文,让你阅读一些事项,一路回车即可,遇到让你输入‘yes’ or ‘no’,全输入yes回车即可
之后他会让你确认Anaconda安装目录,默认在你主文件夹下,生成一个anaconda3的文件夹,回车开始嘎嘎安装
安装完成,输入yes,可以看到真的在主目录下生成了anaconda的文件夹。
看到此界面,就代表你已经在Ubuntu系统下装上了anaconda噜,如图:
装好后我们还需要进行一些环境配置
输入
sudo gedit ~/.bashrc
进入bashrc文件设置环境变量(gedit是一个文本编辑器)
输入你的密码后在bashrc文件的末尾添加路径:
export PATH="/home/你的用户名/anaconda3/bin:$PATH" 我就是export PATH="/home/Akaxi/anaconda3/bin:$PATH"
添加后保存退出
输入
source ~/.bashrc
更新下环境
输入
conda list
可看到一系列的包名输出,代表完成啦,撒花~~
由于annaconda自带的下载工具pip默认使用的是外网的网址,接下来需要对其网址进行更新,用我们国的自带的网址,这样使用conda pip就嘎嘎快
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
由于annaconda也自带的conda工具默认使用的是外网的网址,我们也需要对其进行配置,方便接下来的环境管理与使用,输入:
conda clean -i sudo gedit ~/.condarc
进入condarc文件,将配置信息粘贴写入,保存退出
配置信息:
channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
输入conda安装第三方包测试:
Conda install scrapy
测试时间比较长,大概3min
然后使用annaconda的conda命令创建虚拟环境,我的环境My_torch
conda create -n <环境名称自定义> python=<python的版本号> 例如:conda create -n My_torch python=3.8 输入后回车
完成后显示done,这样我们就创建好啦:
接下来
source activate <你的虚拟环境>
成功后可以看到你的环境从base变成了My_torch
至此,在Ubuntu上anaconda安装并且配置完成啦,还配置了自己的虚拟环境My_torch,这个环境就是接下来yolov5需要的环境噜,恭喜恭喜,已经完成了(3/9)加油!
****************************************************************************
3.2.Pytorch安装
在虚拟机打开火狐浏览器里输入pytorch官网用来获取下载指令
【Pytorch官网】https://pytorch.org/
选择conda版本,选择cpu版本,下面得到安装指令
conda install pytorch torchvision torchaudio cpuonly -c pytorch
在终端粘贴就可以进行pytorch的下载
输入y(yes)开始下载
看到以下界面就代表下载好啦~~~~撒花
我们测试一下:
输入 python3 再输入 import torch 再输入 torch.__version__
出现你的pytorch版本号就代表下载成功噜~~~~
进度(4/9)加油!
****************************************************************************
3.3.Vscode安装
打开火狐浏览器,输入vscode官网(此步是为了方便后续浏览代码以及展示效果)
【Vscode官网】https://code.visualstudio.com/Download
选择linux版本的.deb_x64版本,点击下载
等待下载
下载完成后,在文件的下载中找到安装包,点击用软件安装打开
点击安装,输入密码(如果提示进程被琐,重启解决)
安装完成后,belike:
右上角关闭,左下角点击打开应用列表,顶上输入vscode查找应用
双击打开,可以鼠标右键-添加到收藏夹栏
进入后我们点击拓展,下载拓展中文包
输入chinese找到中文包,点击install下载
下载完成后,右下角更改系统语言并且重启vscode
接下来配置Python拓展,同样在vscode拓展里输入python下载拓展并安装
这样我们就在ubuntu系统下安装了最好用的代码编辑器vscode噜
撒花~~~~~
进度(5/9)
****************************************************************************
3.4.Yolov5源码及环境获取安装
在火狐浏览器输入gitee(一个国内的代码仓库),输入yolov5查找相关开源仓库,找到其中一个就行,当然用我的仓库也行
这是链接:https://search.gitee.com/?skin=rec&type=repository&q=yolov5
点击进入,点击克隆/下载 – 下载zip(可能需要账号登录)
下载完成后,在文件夹下载中找到yolo-master压缩包,将其解压(提取)
将解压后的文件夹复制到桌面,方便操作
右键打开终端,进入文件夹目录
cd yolo-master
注意指令前面一定要是你之前配置pytorch的环境,我的是My_torch
输入指令进入环境:conda activate <你的环境> 例如我的:conda activate My_torch
使用指令用清华源安装需要的环境:
pip install -U -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
注意 -U 是大写噜
输入指令后开始嘎嘎安装(大约2分钟)
安装完成后,所有的环境以及包都安装好啦!!!!!!!恭喜
进度(6/9)
三. 【测试Yolov5】
接下来就是最激动人心的时刻!测试Yolov5!
打开vscode,点击打开文件夹(也就是我们的工作目录),点击我们之前下载的yolov5-mater文件夹
打开后,信任文件夹
接下来点击我们用来测试yolov5的detect.py文件,点击右下角的环境解释器,在上面选框中找到我们的之前配置的My_torch解释器。
选择解释器后可以发现解释器变成了My-torch,然后点击右上角的三角运行。
然后就可以在vscode终端看到一些列输出
运行成功!!yolov5实现目标检测结果保存在目录runs/detect/exp中,我们找到目录看看效果~~
可以看到yolov5检测效果十分的不错,测试成功!!!!!!!
进度(7/9)
四. 【实现自己输入图片/笔记本摄像头的目标检测】
---------------------------------------------------------------------------------------------------------------------------------
1.输入自己的图片
在文件夹找到yolov5-master文件夹,点击进入,找到data文件夹,继续找到images文件夹,这就是yolov5获取源图片的位置,将我们需要自定义检测的图片放入即可。
这里我用QQ将一张车人图片放在images里面,图片名字是xiantao_Car_person.jpg(注意图片是jpg格式)
(当然也可以在火狐浏览器上面下载你喜欢的图片放在images里面)
xiantao_Car_person.jpg
再次打开vscode,重复前面一节的【三、测试yolov5】过程,运行程序,看看yolov5这次能不能对我们给定的图片进行目标检测呢。
运行detect.py程序,终端输出成功运行信息,结果保存在runs/detect/exp2目录下,我们找到xiantao_Car_person.jpg
可以看到,yolov5对我们自定义输入的图片目标检测成功!!!!!
进度(8/9)
接下来我们自己插入一个Usb摄像头,进行实时的目标检测~~
---------------------------------------------------------------------------------------------------------------------------------
2.使用笔记本摄像头目标检测
还是用vscode打开detect.py文件,找到第245行的参数行
将 default = ROOT / ‘data/images’ 改为 default = ‘0’ 【0表示使用笔记本默认摄像头】
然后将摄像头连接到虚拟机上,不然运行detect,py就会报错
虚拟机 – 可移动设备 – 找到笔记本摄像头 – 连接
之后点击运行detect.py就可以看yolov5跑出来的效果啦
(这里很可能会遇到报错:什么什么no shape读不到摄像头)
打开茄子相机应用看看有没有图像输出,如果没有很大可能是虚拟机的Usb设置不对,先关机,在USB适配器将兼容性改为USB3.1
再次打开虚拟机(记得将摄像头连接到虚拟机!)打开茄子相机,就可以看到摄像头啦~
点击运行,可以看到出现一个界面,动态的显示摄像头的图像,就是yolov5进行的目标检测噜,成功检测到摄像头的输出并目标检测啦。
点击终端,按下q结束程序,可以在
yolov5-mater/runs/detect/最新的exp文件下看到刚刚运行的视频
至此,在Ubuntu下使用yolov5进行目标检测已经完全成功!完结撒花!!!!!!!!!!!进度(9/9)
更多细节:
【使用外接USB摄像头进行目标检测】
将这里的default = ‘0’改为default = ‘1’或者‘2’等,这个看你的usb摄像头搭载在哪里,输入指令ls -l /dev/video* 查看。
【Ros下搭载yolov5实现目标检测】
作为一名Ros机器人学习者,当然想到能将yolov5搭载在Ros环境中,那对于很多机器人都可以实现目标检测,检测到车辆或者行人还是其他事物时,在不同的应用场景进行设计。我比较感兴趣的是在车辆上搭载yolov5,实现自动驾驶场景,目标检测,信息判断,消息通信,话题发布通信,路径规划导航等,在Ros的环境下自己实现车辆的自动避险,自动驾驶等,想必也是帅的嘞。
可能需要一时半会,码一下这篇博主的文章
https://blog.csdn.net/svfsvadfv/article/details/129825613
----------------------------------------------------------------------------------------------------
相信读到这里的朋友,一定是坚持且优秀的
给博主一个免费的赞👍吧
扫描二维码进博主交流群,问题交流 | 吹吹水 | 一起变得更加优秀
2023.11.4
渝北仙桃数据谷