目标检测基础篇-Pytorch

目标检测基础篇-Pytorch

本篇学习视频链接:bilibili-小土堆:Pytorch深度学习快速入门教程
https://www.bilibili.com/video/BV1hE411t7RN/?spm_id_from=333.337.search-card.all.click


文章目录

  • 目标检测基础篇-Pytorch
  • 环境安装
  • 一、Pytorch的数据类Dataset
    • 1.功能
    • 2.代码
      • 2.1数据集链接
      • 2.2自定义dataset类
  • 二、TensorBoard的使用
    • 1.tensorboard简介
    • 2.SummaryWriter()类
      • 2.1 SummaryWriter()类的add_scalar()函数
      • 2.2 SummaryWriter()类的add_image()函数
  • 三、Transforms介绍
  • 总结


环境安装

建议安装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
(请注意上述命令是一行而不是两行,同时==后面改成自己需要的版本号就可以)


一、Pytorch的数据类Dataset

Dataset是Pytorch用来保存数据的基类,在构建自己的数据集时需要调用Dataset类

1.功能

目标检测基础篇-Pytorch_第1张图片
Dataset可以让我们从不同种类的数据中(jpg,png,txt)选择相同属性的数据并添加索引

2.代码

2.1数据集链接

蚂蚁蜜蜂分类数据集和下载链接:https://download.pytorch.org/tutorial/hymenoptera_data.zip
此数据集无labels文件夹

2.2自定义dataset类

代码如下:

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的使用

1.tensorboard简介

tensorboard是PyTorch框架下的可视化工具,可以监视网络训练中的各项参数
tensorboard安装教程链接:https://zhuanlan.zhihu.com/p/103630393
详细版的tensorboard文字教程链接: https://blog.csdn.net/qq_45488242/article/details/122787702

2.SummaryWriter()类

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()

2.1 SummaryWriter()类的add_scalar()函数

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文件夹下会生成一个事件文件
目标检测基础篇-Pytorch_第2张图片
此文件就是tensorboard用来解析的文件,在编译器(我用的是vscode)的终端里进入到logs文件夹的父目录(在上图中就是pytorch_object_detection)

cd /home/zhangxue/CV_code/pytorch_object_detection
tensorboard --logdir=logs

命令行会输入以下结果
目标检测基础篇-Pytorch_第3张图片
打开浏览器,输入链接 http://localhost:6009/(图中最后一行)
就能看到add_scalar()函数绘制的图像
目标检测基础篇-Pytorch_第4张图片在服务器上运行代码可能会遇到相同端口被其他人占用的情况,使用–port参数可以指定端口

tensorboard --logdir=logs --port=6007

2.2 SummaryWriter()类的add_image()函数

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

目标检测基础篇-Pytorch_第5张图片
滑动图中黄色按钮就可以切换图片
修改函数中的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')

目标检测基础篇-Pytorch_第6张图片

三、Transforms介绍

可以看成是一个工具箱,里面有对图片的各种操作,例如totensor,resize等

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(目标检测,pytorch,目标检测,深度学习)