最近公司有一个项目需要做目标检测,具体应用是这样的,利用RealSense D435实现医院场景下的垃圾袋、矿泉水瓶等物体的识别,获取其在世界坐标系下的坐标和最合理的抓取位置,驱动机器人底盘移动,驱动dobot机械臂实现抓取。
之前没搞过深度学习这方面的东西,问了度娘,最后决定使用yolov5去实现目标检测,参考了众大佬的博客,最终安装成功,在此记录一下。
下载地址如下:https://github.com/ultralytics/yolov5,我下载的是v6.2版本,最好使用之前的版本,新版本可能存在很多待优化的地方。解压后目录如下:
下载地址如下:https://github.com/ultralytics/yolov5/releases,与yolov5的版本一致,即v6.2版本。打开网页后下拉,找到Assets,如下:
yolov5共有四种模型:yolov5s、yolov5m、yolov5l、yolov5x,我们下载的也是这四个(下载过程非常慢,请耐心等待)。下载后将四个.pt文件放到Yolov5源码根目录下,如下:
下载地址如下:https://www.anaconda.com/,最新版本对应python3.9,版本过于新,后面的PyTorch也会面临更新问题,所以我使用的是Anaconda3-2022.05-Windows-x86_64.exe,对应python3.8.2
双击安装,这里只上一张重要的图,其它的直接next就可以:
conda create --name pytorch python==3.8
接下来还需要手动输入一个“y",等待安装即可。
输入如下命令:
conda info -e
可以看到除了base环境,还多了我们自己创建的pytorch环境
输入如下命令:
conda activate pytorch
激活后, 可以看到前面的base变成了pytorch环境了。
官网地址如下:https://pytorch.org/get-started/locally/,我这里选的是CPU,因为我的电脑是核显,没有英伟达独显,所以也用不了CUDA,如果你有英伟达显卡,记得选CUDA
输入上图中的命令:
conda install pytorch torchvision torchaudio cpuonly -c pytorch
接下来还需要手动输入一个“y",等待安装即可。
首先激活Pytorch环境,再输入python命令,进入python环境下,调用torch库,最后输出torch的版本号:
import torch
torch.__version__
首先激活Pytorch环境,输入命令:
pip install python-opencv
测试,命令如下:
import cv2
cv2.__version__
此处略过下载与安装,只介绍其环境配置。
运行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/文件夹下看到目标检测的结果: