前言

  最近公司有一个项目需要做目标检测,具体应用是这样的,利用RealSense D435实现医院场景下的垃圾袋、矿泉水瓶等物体的识别,获取其在世界坐标系下的坐标和最合理的抓取位置,驱动机器人底盘移动,驱动dobot机械臂实现抓取。
  之前没搞过深度学习这方面的东西,问了度娘,最后决定使用yolov5去实现目标检测,参考了众大佬的博客,最终安装成功,在此记录一下。

一、Yolov5

1、下载Yolov5源码

下载地址如下:https://github.com/ultralytics/yolov5,我下载的是v6.2版本,最好使用之前的版本,新版本可能存在很多待优化的地方。解压后目录如下:
在这里插入图片描述

2、下载Yolov5预训练模型

下载地址如下:https://github.com/ultralytics/yolov5/releases,与yolov5的版本一致,即v6.2版本。打开网页后下拉,找到Assets,如下:
在这里插入图片描述
yolov5共有四种模型:yolov5s、yolov5m、yolov5l、yolov5x,我们下载的也是这四个(下载过程非常慢,请耐心等待)。下载后将四个.pt文件放到Yolov5源码根目录下,如下:
在这里插入图片描述

二、安装Python虚拟环境

1、下载安装Anaconda3

下载地址如下:https://www.anaconda.com/,最新版本对应python3.9,版本过于新,后面的PyTorch也会面临更新问题,所以我使用的是Anaconda3-2022.05-Windows-x86_64.exe,对应python3.8.2
在这里插入图片描述
在这里插入图片描述
双击安装,这里只上一张重要的图,其它的直接next就可以:
在这里插入图片描述

2、利用Anaconda3下载PyTorch

2.1 创建PyTorch环境

找到Anaconda Prompt,如下:
在这里插入图片描述
输入如下命令:

conda create --name pytorch python==3.8

接下来还需要手动输入一个“y",等待安装即可。

2.2 查看pytorch环境并激活

输入如下命令:

conda info -e

在这里插入图片描述
可以看到除了base环境,还多了我们自己创建的pytorch环境

2.3 激活

输入如下命令:

conda activate pytorch

在这里插入图片描述
激活后, 可以看到前面的base变成了pytorch环境了。

2.4 安装Pytorch

官网地址如下:https://pytorch.org/get-started/locally/,我这里选的是CPU,因为我的电脑是核显,没有英伟达独显,所以也用不了CUDA,如果你有英伟达显卡,记得选CUDA
在这里插入图片描述
输入上图中的命令:

conda install pytorch torchvision torchaudio cpuonly -c pytorch

接下来还需要手动输入一个“y",等待安装即可。

2.5 验证Pytorch是否安装成功

首先激活Pytorch环境,再输入python命令,进入python环境下,调用torch库,最后输出torch的版本号:

import torch
torch.__version__

2.6 在Pytorch中安装opencv

首先激活Pytorch环境,输入命令:

pip install python-opencv

测试,命令如下:

import cv2
cv2.__version__

三、PyCharm环境搭建

此处略过下载与安装,只介绍其环境配置。

1、打开下载好的detect.py文件

在这里插入图片描述

2、设置编译配置

在这里插入图片描述

3、设置解释器

在这里插入图片描述
在这里插入图片描述

四、运行

运行detect.py,发现控制台报错,提示某些包没有安装,可使用pip命令进行安装,具体命令,要看自己报什么错误,比如我运行时需安装的包较多,依次运行如下命令:

pip install pandas -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install pyyaml
pip install tqdm
pip install matplotlib
pip install seaborn

安装完成,再次运行,报错如下:

AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'

解决方法:
打开D:\Anaconda3\envs\yolov5-6.0\lib\site-packages\torch\nn\modules\upsampling.py文件,修改代码如下:

def forward(self, input: Tensor) -> Tensor:
    return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)

# return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
#                      recompute_scale_factor=self.recompute_scale_factor)

再次运行,报错如下:

UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at  C:\cb\pytorch_1000000000000\work\aten\src\ATen\native\TensorShape.cpp:2228.)  return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]

解决方法:
打开D:\Anaconda3\envs\yolov5-6.0\lib\site-packages\torch\function.py文件,找到478行,修改代码如下:

# Remove this two weeks after landing.
kwargs = {} if indexing is None else {'indexing': indexing}
return _VF.meshgrid(tensors, **kwargs,indexing='ij')
#return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]

再次运行,运行成功:
在这里插入图片描述

五、效果

我们使用的是两张图片,图片位于:
在这里插入图片描述
运行detect.py后,可以在runs/detect/exp/文件夹下看到目标检测的结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐