ubuntu20.04 配置pytorch深度学习环境 + SSD目标检测

0、准备工作

0.1 gcc降级

因为Ubuntu20.04自带的gcc版本为9(或者不自带gcc),而cuda10不支持gcc-9,因此要手动安装gcc-7,命令如下:

sudo apt-get install gcc-7 g++-7

设置优先使用gcc7

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 9

恢复优先使用gcc9

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 1

查看当前优先使用的版本:

sudo update-alternatives --display g++

在这里插入图片描述

0.2 github克隆太慢问题

https://blog.csdn.net/weixin_44684139/article/details/104541484
上述连接即可完成准备。当然可以先往下看,遇到克隆慢的问题再回来。

===============================================================================

1、配置pytorch深度学习环境

1.1 下载anoconda并设置

1.1.1 下载anoconda

感谢本blog引路:https://blog.csdn.net/qq_42779103/article/details/108754887

Anaconda是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。

推荐在清华源进行下载,我选择的是最新的Anaconda3-2020.07-Linux-x86_64.sh,注意版本。
在这里插入图片描述在上述.sh下载路径下:

sh Anaconda3-2020.07-Linux-x86_64.sh

一直按回车直到下方界面,提示安装路径,这里选择默认路径,直接回车即可
在这里插入图片描述
然后提示是否添加环境变量,这里直接回车
在这里插入图片描述
直至安装完毕,接下来验证是否安装成功:

source ~/.bashrc
python

显示:
在这里插入图片描述

1.1.2 conda换源

gedit ~/.condarc

在文件中加入:

    channels:
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
      - defaults
    show_channel_urls: true

1.1.3 conda创建新环境

我们可以使用conda创建一个新环境,在新环境中安装各种依赖库和使用代码。因此使用如下命令新建一个名称为“nlp”的环境:

conda create --name nlp python=3.8

可以使用source activate nlp来激活环境,可以使用source deactivate来退出环境。

让我们source activate nlp,此后安装pytorch均在此环境中。

在安装pytorch之前,我们先配置显卡。

1.2 ubuntu20.04配置CUDA和CUDNN

1.2.1 分析

深度学习是需要显卡加持的。因此首先处理有关显卡的事项。

对于ubuntu20.04来说,对于英伟达的显卡已经能够很好的兼容。也就是说,电脑装上ubuntu20,04后直接自带英伟达的显卡驱动。因此在“设置”-“关于”中能够显示英伟达的显卡型号:
在这里插入图片描述同样的,在“软件与更新”-“附加驱动”中,也能获取显卡驱动:
在这里插入图片描述
这是个很舒服的事情。如果是18或者16版本的ubuntu,通常无法直接识别英伟达的显卡。本文基于ubuntu20.04,因此默认已经装好显卡驱动。若需要手动安装显卡驱动则参考:https://blog.csdn.net/weixin_44684139/article/details/109063845

此时在终端输入:
nvidia-smi

输出
在这里插入图片描述可以看到,显卡支持CUDA10.2以下的版本。

1.2.2 配置CUDA

这里选择了CUDA10.0。在英伟达官网中寻找10.0的包:

在这里插入图片描述
选择18.04的即可(虽然我们的系统是20.04)
在这里插入图片描述下载最左侧的runfile格式最为方便。

下载后,进入下载目录,在终端中输入:

sudo sh cuda_10.0........_linux.run(刚下载的文件名)

先连续回车看完协议,然后输入accept

接下来会有一系列提示,提示是否安装显卡驱动那里选no。(Graphics Driver)其他的均为yes。默认的东西直接回车。
在这里插入图片描述安装完毕后,配置环境变量:

gedit ~/.bashrc	

加入以下内容:

# add cuda
export PATH=/usr/local/cuda-10.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH

在终端输入:

source ~/.bashrc

刷新一下环境变量。然后检查cuda是否安装成功:

 nvcc -V

在这里插入图片描述
出现信息即安装成功。

然后再编译测试:

cd ~/NVIDIA_CUDA-10.0_Samples/0_Simple/vectorAdd
make
sudo ./vectorAdd

在这里插入图片描述
提示测试通过

1.2.3 配置CUDNN

进入cudnn网址,这里选择了7.4.1版本。注意这里需要注册登陆。

在这里插入图片描述
下载下来后,解压。在文件夹中有cuda/include和cuda/lib64两个文件夹。将其中的文件拷贝到/usr/local/cuda/lib64/和/usr/local/cuda/include/之下:

cd cuda
sudo cp lib64/* /usr/local/cuda/lib64/
sudo cp include/* /usr/local/cuda/include/

CUDNN配置完毕。

1.3 安装pytorch

可以在官网下载。但是这里直接命令行下载:

注意首先激活nlp环境:

source activate nlp

安装:

conda install pytorch torchvision cudatoolkit=10.0

由于更换了conda源,因此下载会很快。但是注意,正是因为换源了,所以命令末尾没有-c pytorch。这一点和官网有差

注意,上述命令默认安装pytorch1.4

接下来测试以下:

在终端:

python

然后

>>> import torch
>>> 
>>> import torchvision
>>> 
>>> torch.cuda.is_available()
True

显示true,证明pytorch成功识别cuda

或:

Python 3.8.5 (default, Sep  4 2020, 07:30:14) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> a = torch.cuda.is_available()
>>> print(a)
True
>>> 
>>> ngpu= 1
>>> # Decide which device we want to run on
>>> device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
>>> print(device)
cuda:0
>>> print(torch.cuda.get_device_name(0))
GeForce RTX 2070
>>> print(torch.rand(3,3).cuda()) 
tensor([[0.5773, 0.6857, 0.2050],
        [0.6136, 0.4209, 0.6294],
        [0.0319, 0.5956, 0.8974]], device='cuda:0')

以上,准备工作已经完毕。感谢博客:https://blog.csdn.net/qq_42779103/article/details/108754887

================================================================================

2、SSD目标检测

2.1 克隆并修改源码

首先克隆源码:

git clone https://github.com/amdegroot/ssd.pytorch.git

下载数据集:

sh data/scripts/VOC2007.sh
sh data/scripts/VOC2012.sh

下载预训练模型:

mkdir weights
cd weights
wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
wget https://s3.amazonaws.com/amdegroot-models/ssd300_mAP_77.43_v2.pth
wget https://s3.amazonaws.com/amdegroot-models/ssd_300_VOC0712.pth

修改源码:

  1. 在multibox_loss.py:中调换第97,98行:
loss_c = loss_c.view(num, -1) 
loss_c[pos] = 0 # filter out pos boxes for now
  1. 修改第114行为:
N = num_pos.data.sum().double() 
loss_l = loss_l.double() 
loss_c = loss_c.double()
  1. tain.py中的183和184行的data[0]改为item():
loc_loss += loss_l.item()    # 修改语句,原先语句 为:loc_loss += loss_l.data[0]
conf_loss += loss_c.item()  # 修改语句,原先语句 为:conf_loss += loss_c.data[0]
  1. 188行的data[0]改为item()
print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.item()), end=' ')  # 类似修改
  1. demo/live.py中第十行用…/找到上一级目录
parser.add_argument('--weights', default='../weights/ssd_300_VOC0712.pth',

2.2 运行代码

可以train一下,也可以eval一下。直接在终端的nlp环境中:

python train.py
python eval.py

也可以运行demo/live.py进行摄像头识别:

python live.py

在这里插入图片描述
感谢:
https://blog.csdn.net/qq_40903958/article/details/104553199
https://blog.csdn.net/qq_39571318/article/details/89788687?utm_source=distribute.pc_relevant.none-task

2.3 使用pytorch1.6运行SSD需要修改的地方:

上述使用1.4运行,不会产生报错。但如果使用1.6运行,会产生如下报错:

RuntimeError: Legacy autograd function with non-static forward method
is deprecated. Please use new-style autograd function with static
forward method. (Example:
https://pytorch.org/docs/stable/autograd.html#torch.autograd.Function)

则需要修改的地方:
(1)layers/functions/detection.py修改为如下:


"""
Copyright (c) 2017 Max deGroot, Ellis Brown
https://github.com/amdegroot/ssd.pytorch
Updated by: Sayak Banerjee
"""

import torch
import torch.nn as nn
import torch.backends.cudnn as cudnn
from torch.autograd import Function
from torch.autograd import Variable
from ..box_utils import decode, nms
from data import voc as cfg


class Detect(Function):
    @staticmethod
    def forward(self, num_classes, bkg_label, top_k, conf_thresh, nms_thresh, loc_data, conf_data, prior_data):
        self.num_classes = num_classes
        self.background_label = bkg_label
        self.top_k = top_k
        # Parameters used in nms.
        self.nms_thresh = nms_thresh
        if nms_thresh <= 0:
            raise ValueError('nms_threshold must be non negative.')
        self.conf_thresh = conf_thresh
        self.variance = cfg['variance']
        num = loc_data.size(0)  # batch size
        num_priors = prior_data.size(0)
        output = torch.zeros(num, self.num_classes, self.top_k, 5)
        conf_preds = conf_data.view(num, num_priors,
                                    self.num_classes).transpose(2, 1)
        
        # Decode predictions into bboxes.
        for i in range(num):
            decoded_boxes = decode(loc_data[i], prior_data, self.variance)
            # For each class, perform nms
            conf_scores = conf_preds[i].clone()
            #num_det = 0
            for cl in range(1, self.num_classes):
                c_mask = conf_scores[cl].gt(self.conf_thresh)
                scores = conf_scores[cl][c_mask]
                if scores.size(0) == 0:
                    continue
                l_mask = c_mask.unsqueeze(1).expand_as(decoded_boxes)
                boxes = decoded_boxes[l_mask].view(-1, 4)
                # idx of highest scoring and non-overlapping boxes per class
                ids, count = nms(boxes, scores, self.nms_thresh, self.top_k)
                output[i, cl, :count] = \
                    torch.cat((scores[ids[:count]].unsqueeze(1),
                               boxes[ids[:count]]), 1)
        flt = output.contiguous().view(num, -1, 5)
        _, idx = flt[:, :, 0].sort(1, descending=True)
        _, rank = idx.sort(1)
        flt[(rank < self.top_k).unsqueeze(-1).expand_as(flt)].fill_(0)
        return output

(2)ssd.py中

if phase == 'test':
            self.softmax = nn.Softmax(dim=-1)
            self.detect = Detect(num_classes, 0, 200, 0.01, 0.45)

修改为



 if phase == 'test':
            self.softmax = nn.Softmax()
            self.detect = Detect()

(2)ssd.py中def forward函数中

if self.phase == "test":
            output = self.detect(
                loc.view(loc.size(0), -1, 4),                   # loc preds
                self.softmax(conf.view(conf.size(0), -1,
                             self.num_classes)),                # conf preds
                self.priors.type(type(x.data))                  # default boxes
            )

修改为

if self.phase == "test":
            output = self.detect.apply(21, 0, 200, 0.01, 0.45,
                loc.view(loc.size(0), -1, 4),                   # loc preds
                self.softmax(conf.view(-1,
                             21)),                # conf preds
                self.priors.type(type(x.data))                  # default boxes
            )

3、YOLOV5目标检测

3.1 测试代码

先克隆下载:

https://github.com/ultralytics/yolov5

在yolov5文件夹中:

conda activate nlp
python detect.py --source ./inference/images/ --weights yolov5s.pt --conf 0.4

在这里插入图片描述

3.2 问题

yolov5是基于pytorch1.6训练的模型。因此必须使用pytorch1.6进行加载,版本错误则会报错:

yolov5 RuntimeError: version_ <= kMaxSupportedFileFormatVersion INTERNAL ASS ........

所以可以新建环境后,安装pytorch1.6

4、补充

在环境中安装包:conda install …

也可以使用pip工具。首先在电脑中下载pip:

sudo apt-get install python3-pip

使用pip下载,比如下载cv2和yaml:

pip3 install opencv-python
pip3 install pyyaml

pip换源
https://blog.csdn.net/sss_369/article/details/99177432

  • 5
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,以下是在Ubuntu 20.04配置PyTorch的步骤: 1. 安装Anaconda:在Anaconda官网上下载适用于Linux的Anaconda安装包(.sh文件),然后在终端中输入以下命令进行安装: ``` bash ~/Downloads/Anaconda3-2021.05-Linux-x86_64.sh ``` 按照提示完成安装,注意要将Anaconda添加到环境变量中。 2. 创建新的Conda环境:在终端中输入以下命令创建一个新的Conda环境: ``` conda create -n pytorch_env python=3.8 ``` 这里我们将环境命名为“pytorch_env”,并指定Python版本为3.8。 3. 激活新的Conda环境:在终端中输入以下命令激活新创建的环境: ``` conda activate pytorch_env ``` 4. 安装PyTorch:在PyTorch官网上选择适用于Linux的版本、Python版本和CUDA版本,并将安装命令复制到终端中执行。例如,如果你的机器上没有安装CUDA,可以执行以下命令安装CPU版本的PyTorch: ``` pip install torch torchvision torchaudio ``` 如果你的机器上安装了CUDA,可以执行以下命令安装GPU版本的PyTorch: ``` pip install torch torchvision torchaudio -f https://download.pytorch.org/whl/cu111/torch_stable.html ``` 这里我们使用pip命令来安装PyTorch,如果你更喜欢使用conda命令,也可以使用以下命令来安装: ``` conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c nvidia ``` 5. 验证PyTorch是否安装成功:在Python环境中输入以下代码验证PyTorch是否安装成功: ``` import torch print(torch.__version__) ``` 如果成功安装,将会打印出PyTorch的版本号。 希望这些步骤可以帮助你在Ubuntu 20.04上成功配置PyTorch环境。 ### 回答2: 在Ubuntu 20.04上,要配置PyTorch环境,需要经过以下步骤: 1. 安装Anaconda 首先需要在官网下载Anaconda安装包(https://www.anaconda.com/products/individual#Downloads),选择适合自己系统的版本。下载完毕后,执行以下命令进行安装: ``` $ sudo sh Anaconda3-2021.05-Linux-x86_64.sh ``` 安装完成后,需要将Anaconda添加到系统环境变量中: ``` $ echo "export PATH=$PATH:/home/username/anaconda3/bin" >> ~/.bashrc $ source ~/.bashrc ``` 2. 创建虚拟环境 接下来需要创建一个虚拟环境,以便在其中安装PyTorch和其他相关的Python包。执行以下命令创建一个名为“torch”的虚拟环境: ``` $ conda create --name torch python=3.8 ``` 创建成功后,激活虚拟环境: ``` $ conda activate torch ``` 3. 安装PyTorch 在激活的虚拟环境下,使用conda命令安装PyTorch: ``` $ conda install pytorch torchvision torchaudio -c pytorch ``` 这条命令同时安装了PyTorch、torchvision和torchaudio这三个包。如果只需要安装PyTorch,可以执行以下命令: ``` $ conda install pytorch -c pytorch ``` 4. 测试PyTorch 安装成功后,可以通过Python脚本测试PyTorch是否正常工作。执行以下命令,进入Python交互界面: ``` $ python ``` 然后输入以下代码: ``` import torch print(torch.__version__) ``` 如果输出了PyTorch的版本号,说明安装成功。 以上就是在Ubuntu 20.04配置PyTorch环境的步骤。如果需要安装其他的Python包,可以通过conda命令进行安装。在开始开发项目前,需要确保虚拟环境中所安装的所有包都与项目所需的版本兼容。 ### 回答3: Ubuntu20.04配置PyTorch环境 PyTorch是一个开源的深度学习框架,与其他深度学习框架相比,它的优势是便于调试和使用,而且支持动态计算图。 在配置PyTorch环境前,需要先安装并配置好Python环境。 安装Python3 sudo apt install python3 安装pip sudo apt install python3-pip 首先,我们需要安装PyTorch的运行环境。打开终端,在终端中输入: pip3 install torch torchvision torchaudio 注意:在安装PyTorch时,需要根据自己的系统环境和Python版本来选择正确的安装指令和安装文件。 安装完成后,我们可以在Python解释器中导入torch模块来验证是否成功安装: python3 >>> import torch >>> print(torch.__version__) 1.9.0 然后,我们需要安装一些常用的Python库,如NumPy、matplotlib等,这些库可以用于常规数据处理、图形化展示和科学计算。 pip3 install numpy matplotlib jupyter notebook 安装完成后,我们可以使用下面的指令来测试: jupyter notebook 若运行成功,则可以在浏览器中看到Jupyter笔记本界面。 至此,我们成功安装并配置好了PyTorch环境。通过学习PyTorch的相关API,我们可以更轻松地实现各类人工智能应用,包括自然语言处理、计算机视觉、深度学习训练等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值