soarli

Linux下CPU环境的YOLOv5搭建
前言昨天收到了腾讯云的活动服务器到期提醒,抱着学习的态度(白嫖的资源到了最后一刻也要压榨到底)进行了Linux Y...
扫描右侧二维码阅读全文
17
2022/04

Linux下CPU环境的YOLOv5搭建

前言

昨天收到了腾讯云的活动服务器到期提醒,抱着学习的态度(白嫖的资源到了最后一刻也要压榨到底)进行了Linux YOLOv5的配置试验(有关YOLOv5的详细笔记见今年寒假时我写的Win10下YOLOv5的CPU环境搭建),现将本次笔记记录如下:

image-20220416022447322

安装pytorch

1、官网地址https://pytorch.org/

2、根据自己的需求选择

image-20220416010754798

例如此时最新版本对应的安装方法为:

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu

但是,对于默认情况下无法访问境外网站的网络环境下(疯狂暗示校园网),可以使用国内镜像下载安装:

sudo pip3 install torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

安装过程中可能会出现MemoryError(如下图):

image-20220417004824128

这是由于pip安装的缓存机制想要先把整个文件读取到内存以后才开始安装进而导致内存不足导致的。所以我们在安装时指示不启用缓存即可,使用 --no-cache-dir 命令安装即可避坑:

sudo pip3 install --no-cache-dir torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

还有可能会遇到:

Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-6_zbv3dk/pillow/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-pf11hf8u-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-build-6_zbv3dk/pillow/

此时需要先:

# Setuptools 升级(Upgrade)
pip3 install --upgrade pip setuptools wheel
# 安装pillow(python的图形界面库)
python3 -m pip install Pillow

测试是否安装成功

import torch
#查看版本
print(torch.__version__)
#查看gpu是否可用
print(torch.cuda.is_available())
#返回设备gpu个数
print(torch.cuda.device_count())

image-20220416014123704

下载YOLOv5 github项目

sudo mkdir /yolov5
cd /yolov5/
sudo git clone https://github.com/ultralytics/yolov5

image-20220416014324646

移出文件

cd yolov5/
sudo mv * .[^.]* ..
cd ..
sudo rm yolov5/ -r

安装依赖

python3 -m pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

image-20220416014657617

下载预训练模型并放到yolo项目根目录。(下载yolov5l.pt, yolov5m.pt, yolov5s.pt, yolov5x.pt

测试使用

测试一张网络图片

sudo python3 detect.py --weights yolov5s.pt --source http://upload.lcqixing.com/upload/202111/02/d0c4a9d7c3936b7ef4bef056d5cff99e.jpg

image-20220416020259168

识别结果:

d0c4a9d7c3936b7ef4bef056d5cff99e

如果要不加sudo也能识别,只需要修改权限:

# 修改权限
sudo chown -R ubuntu:ubuntu /yolov5/
# 普通权限也能识别了
python3 detect.py --weights yolov5s.pt --source http://upload.lcqixing.com/upload/202111/02/d0c4a9d7c3936b7ef4bef056d5cff99e.jpg

image-20220416020650598

再来一张:

python3 detect.py --weights yolov5s.pt --source https://lab.soarli.top/web/imgs/cat.png

预训练模型竟然只有29%的把握认为它是cat

cat

识别视频

python3 detect.py --weights yolov5s.pt --source ./xw_llh.mp4

识别完成:

image-20220416023007532

好端端的100多MB硬是变成了600+MB:

image-20220416023111585

再来测试一下流媒体

python3 detect.py --weights yolov5s.pt --source http://xxxxxxxxx

image-20220416031120682

猜测由于其不兼容Python 3.6导致的此问题。

更新Python3->3.7

# <安装Python 3.7>
sudo apt update
# add-apt-repository 命令是software-properties-common包的一部分
sudo apt install software-properties-common
# PPA软件源包含了从2.3到3.7在内的所有Python版本的deb安装包(并且仍然在紧随Python官方进行更新)
sudo add-apt-repository ppa:deadsnakes/ppa
# 安装3.7版本
sudo apt install python3.7

# <修改环境变量>
# 现在是3.6版本
python3 --version
# 修改环境变量
cd ~
echo alias python3=python3.7 >> ~/.bashrc
# source一下
source ~/.bashrc
# 记录一下指定python=python3的方法,非必要无需操作
echo alias python=python3 >> ~/.bashrc

再次以非sudo权限执行(最好一开始先更换python版本):

# 强制升级pip
python3 -m pip install --upgrade --force pip
# 安装yolo所需的依赖
python3 -m pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

如果出现PyYAML的报错:

ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

只需:

# 忽略已安装的PyYAML
python3 -m pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --ignore-installed PyYAML

额...貌似猜想错误...

image-20220417021647505

分析qt.qpa.xcb: could not connect to display 感觉应该由于视频cv.imshow()之类的卡住了,简单分析了一下(也就花了一个通宵),找到了问题所在:

下面是detect.py的源代码,其中红框内被注释掉的代码都是我加上的(原本没有):

解决问题:

image-20220417060432419

独立视频资源

不难发现,对于网络资源,它采取“先下载,再识别”的策略:

完整操作

升级python 3.7

ubuntu@VM-4-11-ubuntu:~$ python3 --version
Python 3.6.9
# <安装Python 3.7>
sudo apt update
# add-apt-repository 命令是software-properties-common包的一部分
sudo apt install software-properties-common
# PPA软件源包含了从2.3到3.7在内的所有Python版本的deb安装包(并且仍然在紧随Python官方进行更新)
sudo add-apt-repository ppa:deadsnakes/ppa
# 安装3.7版本
sudo apt install python3.7
# 修改环境变量
cd ~
echo alias python3=python3.7 >> ~/.bashrc
# source一下
source ~/.bashrc
# 检查
ubuntu@VM-4-11-ubuntu:~$ python3 --version
Python 3.7.13

安装Pytorch

python3 -m pip install --no-cache-dir torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

image-20220417030952791

python3 -m pip install --upgrade pip setuptools wheel
python3 -m pip install Pillow
python3 -m pip install --no-cache-dir torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple

验证Pytorch安装状态

ubuntu@VM-4-11-ubuntu:~$ python3
Python 3.7.13 (default, Mar 16 2022, 17:37:17)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
1.11.0+cu102
>>> print(torch.cuda.is_available())
False
>>> print(torch.cuda.device_count())
0

部署yolo项目

sudo mkdir /yolov5
cd /yolov5/

# 克隆Github仓库
sudo git clone https://github.com/ultralytics/yolov5
# 或者
wget https://cdn4.soarli.top/yolo/yolov5.zip
unzip yolov5.zip

移出文件:

cd yolov5/
sudo mv * .[^.]* ..
cd ..
sudo rm yolov5/ -r
# 修改权限
sudo chown -R ubuntu:ubuntu /yolov5/

安装依赖

python3 -m pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

留意到第一次运行时需要到境外网站下载一个字体文件和与训练模型:

Downloading https://ultralytics.com/assets/Arial.ttf to /home/ubuntu/.config/Ultralytics/Arial.ttf... 

不妨直接上传预训练模型和字体文件到/yolov5

wget https://cdn4.soarli.top/yolo/Arial.ttf
cp Arial.ttf /home/ubuntu/.config/Ultralytics/Arial.ttf
# 提供yolov5l.pt, yolov5m.pt, yolov5s.pt, yolov5x.pt
wget https://cdn4.soarli.top/yolo/pt_model/yolov5s.pt

开始识别:

python3 detect.py --weights yolov5s.pt --source http://upload.lcqixing.com/upload/202111/02/d0c4a9d7c3936b7ef4bef056d5cff99e.jpg

image-20220417031700911

至此,搞定!

参考资料:

https://zhuanlan.zhihu.com/p/354648251

https://blog.csdn.net/weixin_42544131/article/details/114079270

https://blog.csdn.net/qqjjjaa11/article/details/100737978

https://blog.csdn.net/xue_csdn/article/details/94588823

https://blog.csdn.net/qq_41221841/article/details/123114200

https://blog.csdn.net/xiaojun1288/article/details/121357721

https://blog.csdn.net/weixin_41862755/article/details/121700282

最后修改:2022 年 04 月 17 日 06 : 34 PM

2 条评论

  1. 巴涅波赫夫

    文章写得不错,支持一下!

    1. soarli
      @巴涅波赫夫

      谢谢大佬

发表评论