本篇学习视频链接:bilibili-小土堆:Pytorch深度学习快速入门教程
https://www.bilibili.com/video/BV1hE411t7RN/?spm_id_from=333.337.search-card.all.click
建议安装anaconda,在conda环境内安装pytorch(安装太过久远就不再重装anaconda)
pip torch 的命令如下:
pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
(请注意上述命令是一行而不是两行,同时==后面改成自己需要的版本号就可以)
Dataset是Pytorch用来保存数据的基类,在构建自己的数据集时需要调用Dataset类
Dataset可以让我们从不同种类的数据中(jpg,png,txt)选择相同属性的数据并添加索引
蚂蚁蜜蜂分类数据集和下载链接:https://download.pytorch.org/tutorial/hymenoptera_data.zip
此数据集无labels文件夹
代码如下:
from torch.utils.data import Dataset
import cv2
import os
class MyData(Dataset):
def __init__(self,root_dir,label_dir):
# 对MyData类进行初始化
self.root_dir = root_dir
self.label_dir = label_dir
self.path = os.path.join(self.root_dir,self.label_dir)
self.image_path = os.listdir(self.path)
def __getitem__(self, index):
# 此处对应着使用下标获取的返回值
img_name = self.image_path[index]
img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)
img = cv2.imread(img_item_path)
label = self.label_dir
return img,label
root_dir = '/home/zhangxue/CV_code/pytorch_object_detection/datasets/hymenoptera_data/train'
# 实例化一个MyData类,ants
ants_label_dir = 'ants'
ants_dataset = MyData(root_dir,ants_label_dir)
# 获取下标索引的返回值,img1对应的是矩阵,label对应的是ants
img1,label1 = ants_dataset[0]
# 实例化一个MyData类,bees
bees_label_dir = 'bees'
bees_dataset = MyData(root_dir,bees_label_dir)
# dataset类支持加法
train_dataset = ants_dataset + bees_dataset
tensorboard是PyTorch框架下的可视化工具,可以监视网络训练中的各项参数
tensorboard安装教程链接:https://zhuanlan.zhihu.com/p/103630393
详细版的tensorboard文字教程链接: https://blog.csdn.net/qq_45488242/article/details/122787702
SummaryWriter类主要功能是向log_dir写入事件文件,这个事件文件能被tensorboard解析。
这里只介绍SummaryWriter()类的实例化方法
SummartWriter类的__init__()方法自带的例子
# create a summary writer with automatically generated folder name.
writer = SummaryWriter() # 未设置参数,默认的事件文件存储路径
# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/
# create a summary writer using the specified folder name.
writer = SummaryWriter("my_experiment") # 传入log_dir参数,log_dir为事件文件保存的路径
# folder location: my_experiment
# create a summary writer with comment appended.
writer = SummaryWriter(comment="LR_0.1_BATCH_16") # 在文件夹后面增加的后缀
# folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/
需要注意的一点是实例化一个SummaryWriter类之后,要记得关闭该对象
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
writer.close()
add_scalar()函数功能是为坐标轴添加一个标量数据
这里介绍add_scalar()函数的参数以及部分参数含义
tag
: 标识符,可以理解为每个图像的title
scalar_value
:标量的值,也就是要保存的值,可以理解为y坐标
global_step
:全局步长,可以理解为x坐标
··
def add_scalar(
self,
tag,
scalar_value,
global_step=None,
walltime=None,
new_style=False,
double_precision=False,
):
"""Add scalar data to summary.
为summary添加一个标量数据
Args:
tag (string): Data identifier # 数据标识符,可以理解为每个图片的title
scalar_value (float or string/blobname): Value to save # 标量的值,也就是要保存的值,可以理解为y坐标
global_step (int): Global step value to record # 全局步长,可以理解为x坐标
walltime (float): Optional override default walltime (time.time())
with seconds after epoch of event
new_style (boolean): Whether to use new style (tensor field) or old
style (simple_value field). New style could lead to faster data loading.
快速记忆 add_scalar(图像名称,x坐标,y坐标)
使用add_scalar函数进行绘图
from torch.utils.tensorboard import SummaryWriter
# 此处SummaryWriter类的参数是生成的log文件夹的位置,见SummaryWriter类的实例化例子2
writer = SummaryWriter("/home/zhangxue/CV_code/pytorch_object_detection//logs//")
for i in range(100):
writer.add_scalar("y=x",i,i)
writer.close()
运行代码后会生成logs文件夹,在logs文件夹下会生成一个事件文件
此文件就是tensorboard用来解析的文件,在编译器(我用的是vscode)的终端里进入到logs文件夹的父目录(在上图中就是pytorch_object_detection)
cd /home/zhangxue/CV_code/pytorch_object_detection
tensorboard --logdir=logs
命令行会输入以下结果
打开浏览器,输入链接 http://localhost:6009/(图中最后一行)
就能看到add_scalar()函数绘制的图像
在服务器上运行代码可能会遇到相同端口被其他人占用的情况,使用–port参数可以指定端口
tensorboard --logdir=logs --port=6007
add_image()函数是向summary中添加图片
tag
:图像title
img_tensor
:图片的数据类型,允许的数据类型有tensor/ndarray/string/blobname
global_step
:可以理解为x坐标,这里没有y坐标,只有与x坐标对应的每个图片
dataformats
:图片的格式,C表示通道channel,H表示高度Height,W表示宽度Weight,可以自定义输入图片的格式,比如CHW,HWC,HW等等
def add_image(
self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"
):
"""Add image data to summary.
把图像数据添加到summary中
Note that this requires the ``pillow`` package.
Args:
tag (str): Data identifier # 图像title
img_tensor (torch.Tensor, numpy.ndarray, or string/blobname): Image data # 图片数据,要求类型是tensor/ndarray/string/blobname中的一种
global_step (int): Global step value to record # x坐标
walltime (float): Optional override default walltime (time.time())
seconds after epoch of event
dataformats (str): Image data format specification of the form
CHW, HWC, HW, WH, etc.
使用add_image()函数添加图片
from torch.utils.tensorboard import SummaryWriter
import cv2
import numpy as np
writer = SummaryWriter("/home/zhangxue/CV_code/pytorch_object_detection/logs//")
img = cv2.imread('/home/zhangxue/CV_code/pytorch_object_detection/datasets/test_datasets/train/ants_image/0013035.jpg')
# img不符合add_image的data类型要求,要改成nparray的
img_array = np.array(img)
print(img_array.shape) # (512, 768, 3) = HWC
writer.add_image("test",img_array,1,dataformats='HWC')
img2 = cv2.imread('/home/zhangxue/CV_code/pytorch_object_detection/datasets/test_datasets/train/ants_image/5650366_e22b7e1065.jpg')
img2_array = np.array(img2)
writer.add_image("test",img2_array,2,dataformats='HWC')
同样打开vscode的终端,输入以下命令
cd /home/zhangxue/CV_code/pytorch_object_detection
tensorboard --logdir=logs
滑动图中黄色按钮就可以切换图片
修改函数中的tag参数就可以生成新的画布
from torch.utils.tensorboard import SummaryWriter
import cv2
import numpy as np
writer = SummaryWriter("/home/zhangxue/CV_code/pytorch_object_detection/logs//")
img = cv2.imread('/home/zhangxue/CV_code/pytorch_object_detection/datasets/test_datasets/train/ants_image/0013035.jpg')
# img不符合add_image的data类型要求,要改成nparray的
img_array = np.array(img)
print(img_array.shape) # (512, 768, 3) = HWC
writer.add_image("test",img_array,1,dataformats='HWC')
img2 = cv2.imread('/home/zhangxue/CV_code/pytorch_object_detection/datasets/test_datasets/train/ants_image/5650366_e22b7e1065.jpg')
# img不符合add_image的data类型要求,要改成nparray的
img2_array = np.array(img2)
writer.add_image("test2",img2_array,1,dataformats='HWC')
可以看成是一个工具箱,里面有对图片的各种操作,例如totensor,resize等
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。