目标检测算法Yolo(一)—环境配置Pytorch


简介:
  本类博客用于记录目标检测方法yolo的学习,本篇博客介绍了yolo的环境配置—pytorch


参考资料:

PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili

  Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。但由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。作为经典机器学习库 Torch 的端口,PyTorch 为 Python 语言使用者提供了舒适的写代码选择。

一.Pytorch安装及环境配置

1. Pytorch的安装

1.1 Anaconda安装

  此处我选用的是Anaconda3-5.2.0-Windows-x86_64.exe版本
  Ananconda作用是为pytorch提供一个独立的虚拟环境,里面可以独立地配置环境,避免和系统环境等冲突,便于管理环境,同时配置过程中有没法解决的问题都可以删除虚拟环境重来

超详细Anaconda安装教程_极小白的博客-CSDN博客

1.2 pytorch的环境配置及安装

  打开Anaconda Prompt 输入
  conda create -n pytorch python=3.6
  创建了一个新环境,然后使用如下命令进入环境
  conda activate pytorch
  之后需要安装gpu版本的pytorch,按照视频教程去pytorch.org使用官方命令安装pytorch怎么样安装的都是cpu版本,找了很多教程,都没有用,最直接的解决方案是自己下载离线文件,此处按照下面这个教程安装

pytorch gpu版安装(普适稳妥,亲测有效) - 知乎 (zhihu.com)

  在环境里安装torchvision时报错ReadTimeout,可能是安装依赖的问题,解决方法:设置pip全局设置镜像源

1
2
pip3 config --global set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip3 config --global set install.trusted-host

  检验是否安装成功,依次输入

1
2
3
python
import torch
torch.cuda.is_available()

  返回True代表成功
  配置和安装pytorch遇到了很多报错,终于是成功了,如果觉得有问题,可以把环境文件夹删了重来一遍(我的文件夹路径为C:\Users\Frelar\Anaconda3\envs\)

2. python的编辑器及配置

2.1 PyCharm

  此处建议下载新版本
  编译器选择你对应虚拟环境即可

2.2 Jupyter Notebook(可选)

  按照教程下载报错,改为在Anaconda Promot(pytorch环境)里输入conda install jupyter notebook,下载后new选项里没有当前环境,依次输入

1
2
conda install ipykernel
python -m ipykernel install --user --name pytorch --display-name "Python (pytorch)"

成功解决

3. 其它相关库

3.1 opencv

  这里使用pip install opencv-python安装报错Failed building wheel for opencv-python,然后尝试用conda安装,报错找不到库,所以还是采用离线下载方式,进入网址Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)找到你对应的python版本(cp36代表python3.6),使用迅雷下载会快很多,然后在环境下使用pip install your_path\opencv_python-4.4.0-cp36-cp36m-win_amd64.whl安装成功

  import cv2

1
cv2.imread()	#读取图片,返回ndarray类型图片及信息

3.2 os

  import os

1
2
os.listdir(dir_path)	#读取获取目录下所有文件名称
os.path.join(path1,path2) #拼接路径

二.Pytorch使用

1.torch

1.1 torch.utils.data.Dataset

  from torch.utils.data import Dataset
  包含自定义数据集方法的类,用户可以通过继承该类来自定义自己的数据集类,在继承时要求用户重载__len__()和__getitem__()这两个魔法方法

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
from torch.utils.data import Dataset  
from PIL import Image
import os

class MyData(Dataset):

def __init__(self,root_dir,label_dir):
self.root_dir=root_dir #根目录
self.label_dir=label_dir #标签
self.path=os.path.join(root_dir,label_dir) #图片目录
self.image_path=os.listdir(self.path) #所有图片名称

def __getitem__(self, idx):
img_name=self.image_path[idx]
img_idx_path=os.path.join(self.path,img_name)
img=Image.open(img_idx_path)
label=self.label_dir
return img,label #图片信息,标签

def __len__(self):
return len(self.image_path) #图片个数


root_dir="dataSet/train"
cat_label_dir="cat"
cat_dataSet=MyData(root_dir,cat_label_dir) #实例

1.2 torch.utils.data. DataLoader

  from torch.utils.data import DataLoader

1
2
3
4
train_loader=DataLoader(dataset=train_data,batch_size=64,shuffle=True,num_workers=0,drop_last=True)
#数据集,每次打包的图片数,是否打乱,线程数,是否丢弃不够一组打包的图片
#for data in train_loader
# imgs,target=data #读取图片信息

1.3 torch.nn

  from torch import nn
  一个用于创建神经网络模型的类,可以作为参数、容器、子模块和函数

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
#神经网络骨架
class Name(nn.moudle):
def __init__(self):
super(Name,self).__init__()
self.layer=layerFunc() #激活层
def forward(self,input) #前向传播
output=self.layer(input)
return output

name=Name()
output=name(input)
name.train() #训练模式
name.eval() #验证模式
#卷积
nn.Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0) #二维卷积(输入通道数,输出通道数,卷积核层数...)
#池化
nn.MaxPool2d(kernel_size=3,ceil_mode=True) #最大池化(核大小,步长(默认为核大小),是否填充是否舍弃不足核大小的图片部分)
#非线性激活
nn.sigmoid(inplace=False) #sigmoid激活(是否原地操作)
#线性激活
nn.Liner(input_features,output_features,bias=False) #线性激活(输入特征数,输出特征数,偏置)
#序列
nn.Sequential(fun1,fun2...,funN) #包装操作为序列,可读性更强
#损失函数、反向传播
loss=nn.CrossEntropyLoss()
result_loss=loss(outputs,targets)
result_loss.backword() #反向传播 将梯度记录在每层信息的weight里

1.4 torch.optim

  import torch
  用于参数优化的库(可以说是花式梯度下降)

1
2
3
4
5
optim=torch.optim.SGD(yourClass.parameters(),lr=0.01)	#优化器(参数集,学习速率)
#result.loss=loss(outputs,targets)
#optim.zero_grad() #初始化梯度
#result_loss.backword()
#optim.step()

2.torchvision

  import torchvision
  处理图像的工具集

1
2
3
4
#获取数据集
train_set=torchvision.datasets.dataname(root="./dataset",train=True,transforms=mytransform,download=True)
#train_set.classes 数据集的各种类名(猫、狗...)
#img,target=train_set[0] 图片信息,图片类名编号

2.1 torchvision.transforms

  from torchvision import transforms
  对图片进行操作
  使用方法:

1
2
mytool=transforms.tool(arguments1)	#实例化
mytool(arguments2) #使用

  tool:

1
2
3
4
5
6
7
8
9
10
11
12
myToTensor=transforms.ToTensor()
myImg=myToTensor(img) #将PIL或numpy.ndarry类型图片转为tensor类型并返回
#tensor类型:包装了神经网络的一些参数

myCompose=transforms.Compose(n)
myImg=myCompose(img) #中心裁剪

myNorm=transforms.Normalize([mean1...meanN],[std1...stdN]) #每个通道的均值和方差
myImg=myNorm(img) #归一化

myResize=transforms.Resize((h,w))
myImg=myResize(img) #缩放

3.利用GPU加速

1
2
3
4
5
6
#方法一
if torch.cuda.is_available(): #判断GPU加速是否可用
item=item.cuda() #目标加速(可用于:imgs/targets/yourMoudle/loss)
#方法二
device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
item=item.to(device)

遇到问题
1.pip insall或者conda install很多报错,如找不到库,超时等
2. 安装cuda版本的pytorch总是安装成cpu(大坑)
解决方案
1.采用离线下载方式,手动下载.whl文件 然后pip install yourPath.whl
2.采用离线下载是唯一解决方法


结语:无
  



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 21009200039@stu.xidian.edu.cn

💰

×

Help us with donation