0


Ubuntu20.04配置深度学习环境yolov5最简流程

一、Ubuntu20.04配置深度学习环境

1.首先给Ubuntu安装Chrome浏览器(搜索引擎换成百度即可)

安装命令:打开终端直接输入

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt-get -f install
2.换成搜狗输入法(如果安装完成无法打汉字,可输入以下命令)
sudo apt-get update
sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2
sudo apt install libgsettings-qt1
3.安装WPS for Linux

进入搜狗for linux官网下载搜狗输入法 ,下载x86版本

WPS for linux

4. 安装其它之前需要先安装anaconda

  1. 先去官网下载好anaconda后面是.sh文件

  2. 输入命令(命令上对应你自己下载的版本号):

sh Anaconda3-2021.11-Linux-x86_64.sh

后面根据提示进行操作即可

  1. 新打开一个终端可以看到前面带一个base,说明安装成功
5. ubuntu换国内镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
6.安装配置anaconda

anaconda添加国内镜像源

#添加镜像源

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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

#显示检索路径

conda config --set show_channel_urls yes

#显示镜像通道

  1. conda config --show channels###### 安装完成anaconda后创建一个虚拟环境
conda create -n yolo python=3.7

yolo是你虚拟环境名字,可自己取,Python不要安装太高版本3.7即可

查看自己的虚拟环境

conda env list 

激活虚拟环境

conda activate yolo 

接下来需要在虚拟环境里面安装pytorch

二、安装pytorch前首先安装显卡驱动

  1. 输入
nvidia-smi

提示Command 'nvidia-smi' not found, but can be installed with:说明你还没有安装显卡驱动

2.安装显卡驱动最简单方式:

打开软件和更新

ununtu软件-下载自-安装源改成国内,然后左面有一个附加驱动里面有许多专有的驱动程序,点击一个专有的,接着点击应用更改

3.这时如果弹出更新应用时出错

解决方法:打开软件更新器更新一下

完成后重启在输入nvidia-smi就可以看到电脑可以安装cuda的最高版本号

(图上看到可以安装的cuda最高版本号为12.0)

三、安装配置pytorch

1.首先查看查看显卡使用情况

打开终端输入:

nvidia-smi

查看可以安装cuda的版本(低于这个或等于这个版本都可以安装,高于11.3版本,建议安装11.3的)

2.进入自己创建的虚拟环境把pytorch安装在自己的虚拟环境里面

(可以在torch官网Previous PyTorch Versions | PyTorch上复制安装命令)

打开终端输入:两个不同版本看你选择(Python需要3.7版本装的cuda才是10.2)

这个是cuda11.3版本的torch

国内镜像源经常用放在这里

-i https://pypi.tuna.tsinghua.edu.cn/simple

下载错了删除虚拟环境的命令

# 第一步:首先退出环境
conda deactivate
 
# 第二步:删除环境
conda remove -n  yolo --all
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch

这个是cuda10.2版本的

conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=10.2 -c pytorch

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

下面复现VIT-SAM使用的版本

python3.8+pytorch2.0****+****torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8

1. 新建虚拟环境python3.8

conda create -n yolo python=3.8
  1. 安装pytorch2.0.0
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
  1. 安装cuda11.8+cudnn(参考文章Ubuntu16.04下安装cuda和cudnn的三种方法)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
gedit ~/.bashrc

在bashrc里面添加如下代码

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64
export PATH=$PATH:/usr/local/cuda-11.8/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.8
source ~/.bashrc
nvcc -V #查看cuda是否安装完成

出现如下cuda11.8的版本好说明安装完成

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0


安装cudnn官网(参考文章Ubuntu安装cuda与cudnn,亲测可用)

参考(文章cudnn升级方法,解决CuDNN版本不兼容问题)

主要之前安装测试完成之后在autokeras环境中遇到了这种问题:

Loaded runtime CuDNN library: 8.2.1 but source was compiled with: 8.6.0. CuDNN library needs to have matching major version

现在写一些安装cudnn的流程:

  1. 如果你下载的cudnn是tar.xz结尾的用解压:
tar xvJf  data.tar.xz

cudnn是.tgz结尾的用解压:

tar -zxvf cudnn-11.3-linux-x64-v8.2.1.32.tgz

cudnn是.deb结尾的用解压:

sudo dpkg -i 
  1. 删除旧版本
sudo rm -rf /usr/local/cuda/include/cudnn.h
sudo rm -rf /usr/local/cuda/lib64/libcudnn*
  1. 安装新版本
    cd进入刚才解压的cuda文件夹
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/lib* /usr/local/cuda/lib64/
  1. 建立软连接(其中so.8.2.1和so.8是你下载的cudnn版本)
cd /usr/local/cuda/lib64/
sudo chmod +r libcudnn.so.8.2.1
sudo ln -sf libcudnn.so.8.2.1 libcudnn.so.8
sudo ln -sf libcudnn.so.8 libcudnn.so   
sudo ldconfig
  1. 测试验证:

查看cudnn的版本

首先使用以下指令查看现有cudnn的版本

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 2
#define CUDNN_PATCHLEVEL 1
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
 
#include "driver_types.h"

报错解决:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 没有显示

2.解决方法:
原因:可能是最新版本的cudnn把文件放入的cudann_version.h中而没有在原来的cudnn.h中 所以要换一个文件复制, 具体操作如下;
执行下面代码

sudo cp cuda/include/cudnn_version.h    /usr/local/cuda/include/

查看是否安装成功:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

找到

下载这三个

cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb)

cuDNN Developer Library for Ubuntu20.04 x86_64 (Deb)

cuDNN Code Samples and User Guide for Ubuntu20.04 x86_64 (Deb)

用sudo dpkg -i直接解压即可

用以下代码进行测试:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.backends.cudnn as cudnn
from torchvision import datasets, transforms

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)

def train(model, device, train_loader, optimizer, epoch):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = data.to(device), target.to(device)
        optimizer.zero_grad()
        output = model(data)
        loss = F.nll_loss(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 10 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                       100. * batch_idx / len(train_loader), loss.item()))

def main():
    cudnn.benchmark = True
    torch.manual_seed(1)
    device = torch.device("cuda")
    kwargs = {'num_workers': 1, 'pin_memory': True}
    train_loader = torch.utils.data.DataLoader(
        datasets.MNIST('../data', train=True, download=True,
                       transform=transforms.Compose([
                           transforms.ToTensor(),
                           transforms.Normalize((0.1307,), (0.3081,))
                       ])),
        batch_size=64, shuffle=True, **kwargs)

    model = Net().to(device)
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

    for epoch in range(1, 11):
        train(model, device, train_loader, optimizer, epoch)

if __name__ == '__main__':
    main()

如果正常输出一下以下信息,证明已经安装成了:

Train Epoch: 1 [0/60000 (0%)] Loss: 2.365850
Train Epoch: 1 [640/60000 (1%)] Loss: 2.305295
Train Epoch: 1 [1280/60000 (2%)] Loss: 2.301407
Train Epoch: 1 [1920/60000 (3%)] Loss: 2.316538
Train Epoch: 1 [2560/60000 (4%)] Loss: 2.255809
Train Epoch: 1 [3200/60000 (5%)] Loss: 2.224511
Train Epoch: 1 [3840/60000 (6%)] Loss: 2.216569
Train Epoch: 1 [4480/60000 (7%)] Loss: 2.181396

ubuntu20.4+cuda11.8+python3.8对应的tensorrt(参考文章TensorRT安装及使用教程)

(TensorRT安装亲测这个可以我的cudnn是8.2也可以对应cuda11.8就没改)

因为TensorRT不同的版本依赖于不同的cuda版本和cudnn版本。所以很多时候我们都是根据我们自己电脑的cuda版本和cudnn版本来决定要下载哪个TensorRT版本。

cuda版本

nvcc -V

在我的系统里,cudnn文件存在于/usr/include/文件夹下。cd进入/usr/include/文件夹,查看cudnn的版本:

cd /usr/include/
cat cudnn_version.h
  1. 首先下载TensorRT编译YOLOv5的代码

tensorrt官网(点进去选择你对应的版本)

  1. 模型转换
    在tensorrtx/yolov5文件夹中可找到gen_wts.py,该脚本可将Pytorch模型(.pt格式)转换成权重文本文件(.wts格式)。将gen_wts.py拷贝到{ultralytics}/yolov5文件夹中,并在此文件夹中打开终端,输入(其中best.pt 是你训练好的权重文件)
python gen_wts.py -w best.pt -o best.wts

这样就在{ultralytics}/yolov5文件夹中生成了best.wts文件。

  1. 修改yololayer.h参数
    打开tensorrtx\yolov5文件夹,找到yololayer.h文件,修改CLASS_NUM,使与pytorch模型一致:

  1. 编译并生成引擎文件
    终端依次输入下列指令,在tensortrtx/yolov5目录下新建build文件夹
mkdir build  

将生成的best.wts拷贝到build文件夹下,输入下列指令对其进行编译

cmake ..  
make  


再输入下列指令,可使best.wts生成best.engine,注意末尾的n代表模型尺度,可选项有n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw,必须与pytorch模型一致:

sudo ./yolov5 -s best.wts best.engine s

  1. 进行检测
    输入下列指令,可对指定路径下的图片进行检测,这里的图片路径是…/samples:
sudo ./yolov5 -d best.engine ../samples  

可以和之前没有使用tensorrt时使用的Pytorch模型检测所耗时间进行对比,TensorRT加速后单幅图片耗时明显缩短

看到这里就可以了,后面的文字是之前写的没有删

参考文章:【Jetson平台 ubuntu 18.04 使用 TensorRT 加速 YOLOv5 检测】

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

安装命令复制过来进行安装(不要把安装命令后面的-c pytorch -c conda-forge去掉,否则你安装的将是cpu版的,无法调用gpu)

pytorch要选1.10以后的不然还是CPU版本的,具体原因看:

解决cpu版本解决torch是cpu版本的问题

输入:nvidia-smi

如果报错:Module nvidia/470.182.03 already installed on kernel 5.15.0-69-generic/x86_6

说明自己装的驱动和电脑内核驱动不一致(还没有更新)重启一下电脑即可

还不行进入BIOS把找到驱动后面的Secure Boot改为Disabled

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

Make sure that the latest NVIDIA driver is installed and running.

解决方法:

安装dkms:

sudo apt-get install dkms

查看本机连接不上的驱动版本:

ls -l /usr/src/

使用dkms重新安装适合驱动:

sudo dkms install -m nvidia -v 470.103.01

完成重启即可测试:

nvidia-smi

import torch

print(torch.cuda.is_available())

输出true即可

3. 配置完成测试,终端打开输入:
Python
import torch # 如果pytorch安装成功即可导入
print(torch.cuda.is_available()) # 查看CUDA是否可用,输出true代表可以调用GPU
print(torch.cuda.device_count()) # 查看可用的CUDA数量
print(torch.version.cuda) # 查看CUDA的版本号
​
4.用conda list查看pytorch和cuda、cudnn的版本

如果发现安装成CPU版本,用以下命令卸载在重新安装:

conda uninstall pytorch
conda uninstall libtorch

有问题看以下链接

解决cpu版本解决torch是cpu版本的问题

yolov5跑模型时报错:

RuntimeError: result type Float can't be cast to the desired output type long int

解决方法:

1.打开你的【utils】文件下的【loss.py】

2.按【Ctrl】+【F】打开搜索功能,输入【for i in range(self.nl)】找到下面的一行内容:

(上面的代码在【loss.py】的后半部分)

将下面代码替换掉这一行的红色字:anchors = self.anchors[i]

anchors, shape = self.anchors[i], p[i].shape

3.按【Ctrl】+【F】打开搜索功能,输入【indices.append】找到下面的一行内容:

indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices

(上面的代码在【loss.py】的最后部分,具体位置在上一处搜索位置的下面几行)

将下面的代码替换掉上图中的红字部分:

indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid

参考:yolov5部署之环境配置及源码测试_yolov5环境测试_Christo3的博客-CSDN博客

四、ubuntu20.04下载安装tensorrt

4.1 环境

CUDA 11.1 (11.2、11.3)

CUDNN 8.1

4.2 下载tensorRT (匹配相应的版本)

官网地址 :Log in | NVIDIA Developer

下载的时tar包

安装

解压

tar zxf TensorRT-8.0.1.6.Linux.x86_64-gnu.cuda-11.3.cudnn8.2.tar.gz

存放在自己想放的目录下(也可以重命名),如:

mv TensorRT-8.0.1.6 /opt
4.3 添加环境

将下面的环境变量 添加到.bashrc文件并保存:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/TensorRT-8.0.1.6/lib

激活环境:

source ~/.bashrc

复制tensorRT目录下 lib、include文件夹到系统文件夹(或者将这两个文件夹路径添加到.bashrc文件中)

sudo cp -r ./lib/* /usr/lib
sudo cp -r ./include/* /usr/include
4.4 C++测试是否成功

测试代码:TensorRT-8.0.1.6/samples/sampleMNIST

本版本无需去data文件夹下载对应的数据集,自己带了,如果没有,那就下载对应的数据集

4.5 python download_pgms.py

如果文件夹下有pgm格式的图片 说明下载成功

在tensorRT目录下samples文件夹下 用sampleMNIST示例测试

编译:

make

清除之前编译的可执行文件及配置文件:

make clean

编译成功,执行bin目录下的可执行文件

./../../bin/sample_mnist

参考文章:Ubuntu20.04 安装tensorRT_tensorrt安装 ubuntu_墨文昱的博客-CSDN博客

需要对yolov5中的权重模型.pt转换成onnx的,请点击以下链接:
yolo的模型转换权重pt文件转onnx(1)

yolo的模型转换权重pt文件转onnx(1)_yolov5 pt转onnx_耳语ai的博客-CSDN博客

参考文章:

检查pytorch是否安装成功、查看torch和cuda的版本

超详细 Ubuntu安装PyTorch步骤

ubuntu18.04安装显卡驱动(四种方式)

Ubuntu20.04 安装tensorRT

参考链接:yolov5部署之环境配置及源码测试_yolov5环境测试_Christo3的博客-CSDN博客

标签: ubuntu linux

本文转载自: https://blog.csdn.net/m0_60657960/article/details/129348540
版权归原作者 耳语ai 所有, 如有侵权,请联系我们删除。

“Ubuntu20.04配置深度学习环境yolov5最简流程”的评论:

还没有评论