Linux系统安装YOLOv5

在计算机视觉领域,大家都接触到的YOLO算法,它是众多开发者与研究者的首选工具。本文介绍如何在Linux 系统下搭建 YOLOv5 的运行环境。

安装步骤

1、下载完整YOLOv5源码

源码仓库地址
下载到本地,并创建文件夹为yolov5

2、创建并激活虚拟环境

下载对应版本(本次下载的是Miniconda3-latest-Linux-x86_64.sh)
Miniconda3地址

1
2
# x86_64 架构
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

下载完成如下图

3、运行安装脚本

1
bash Miniconda3-latest-Linux-x86_64.sh

安装过程中需要输入yes,同意安装

最终显示安装成功

4、创建虚拟环境并激活

1
conda create -n yolov5 python=3.8 -y

此处可能会出现报错,请看文章最后错误处理

5、安装配置环境与依赖

进入到刚刚下载的 yolov5 目录下

  • 安装PyTorch

GPU环境示例,假设CUDA11.2

1
2
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 \
-f https://download.pytorch.org/whl/torch_stable.html

CPU环境

1
2
# 下载CPU环境
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
  • 安装其他依赖
    1
    2
    3
    4
    5
    6
    7
    # 安装YOLOv5依赖
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

    # 常见缺失包处理
    sudo yum -y install libSM libXext libXrender # 解决 OpenCV 报错[^2^]
    # Ubuntu 使用apt 安装

6、获取yolov5s.pt

1
2
3
4
5
6
7
# 下载
wget -O yolov5s.pt https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
# 运行
python detect.py --weights yolov5s.pt --source https://ultralytics.com/images/zidane.jpg

# 运行
python detect.py --weights yolov5s.pt --source test.jpg

运行后会在runs/detect目录下生成图片,根据运行先后会生成exp 文件夹
运行效果如下,原图:

效果图:

错误处理

1、报错如下,原因是国内网络连不上官方源,而不是真的需要手动点“接受”

1
2
3
4
5
6
7
8
9
10
CondaToSNonInteractiveError: Terms of Service have not been accepted for the following channels. Please accept or remove them before proceeding:
• https://repo.anaconda.com/pkgs/main
• https://repo.anaconda.com/pkgs/r

To accept a channel's Terms of Service, run the following and replace `CHANNEL` with the channel name/URL:
‣ conda tos accept --override-channels --channel CHANNEL

To remove channels with rejected Terms of Service, run the following and replace `CHANNEL` with the channel name/URL:
‣ conda config --remove channels CHANNEL

处理方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 允许
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

# 先删掉失败的官方源
conda config --remove channels https://repo.anaconda.com/pkgs/main
conda config --remove channels https://repo.anaconda.com/pkgs/r

# 添加清华镜像并设为默认
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
# 验证当前通道
conda config --show channels

2、删除错误,原因没有写入官方源

1
2
3
4
$ conda config --remove channels https://repo.anaconda.com/pkgs/main

CondaKeyError: 'channels': value 'https://repo.anaconda.com/pkgs/main' not present in config

处理方式

1
conda config --remove-key channels 2>/dev/null || true

3、运行图片错误,原因图片没有找到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
python detect.py --weights yolov5s.pt --source https://ultralytics.com/images/zidane.jpg
detect: weights=['yolov5s.pt'], source=https://ultralytics.com/images/zidane.jpg, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_format=0, save_csv=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
Downloading https://ultralytics.com/images/zidane.jpg to zidane.jpg...
Traceback (most recent call last):
File "detect.py", line 438, in <module>
main(opt)
File "detect.py", line 433, in main
run(**vars(opt))
File "/home/lgw/.local/lib/python3.8/site-packages/torch/utils/_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
File "detect.py", line 158, in run
source = check_file(source) # download
File "/home/lgw/Disk/YOLO/yolov5-master/utils/general.py", line 495, in check_file
torch.hub.download_url_to_file(url, file)
File "/home/lgw/.local/lib/python3.8/site-packages/torch/hub.py", line 624, in download_url_to_file
u = urlopen(req)
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/urllib/request.py", line 525, in open
response = self._open(req, data)
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/urllib/request.py", line 542, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/urllib/request.py", line 502, in _call_chain
result = func(*args)
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/urllib/request.py", line 1397, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/urllib/request.py", line 1358, in do_open
r = h.getresponse()
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/http/client.py", line 1348, in getresponse
response.begin()
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/http/client.py", line 316, in begin
version, status, reason = self._read_status()
File "/home/lgw/miniconda3/envs/yolov5/lib/python3.8/http/client.py", line 285, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
(yolov5)

处理方式

1
2
3
4
5
# 手动用浏览器或者把本地某张图片并命名为zidane.jpg

# 然后执行
python detect.py --weights yolov5s.pt --source zidane.jpg