• TensorBoard的使用2(add_image函数)


    一、add_image函数

    1.1 通过源码学习函数

    def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats=‘CHW’):

    Add image data to summary.
    
            Note that this requires the ``pillow`` package.
    
            Args:
                tag (string): Data identifier
                img_tensor (torch.Tensor, numpy.array, or string/blobname): Image data
                global_step (int): Global step value to record
                walltime (float): Optional override default walltime (time.time())
                  seconds after epoch of event
            Shape:
                img_tensor: Default is :math:`(3, H, W)`. You can use ``torchvision.utils.make_grid()`` to
                convert a batch of tensor into 3xHxW format or call ``add_images`` and let us do the job.
                Tensor with :math:`(1, H, W)`, :math:`(H, W)`, :math:`(H, W, 3)` is also suitible as long as
                corresponding ``dataformats`` argument is passed. e.g. CHW, HWC, HW.
    
            Examples::
    
                from torch.utils.tensorboard import SummaryWriter
                import numpy as np
                img = np.zeros((3, 100, 100))
                img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
                img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
    
                img_HWC = np.zeros((100, 100, 3))
                img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
                img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
    
                writer = SummaryWriter()
                writer.add_image('my_image', img, 0)
    
                # If you have non-default dimension setting, set the dataformats argument.
                writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')
                writer.close()
    
            Expected result:
    
            .. image:: _static/img/tensorboard/add_image.png
               :scale: 50 %
    
    • 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
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    1.2 代码存在的问题

    函数参数需要的是tensor类型的数据,如何把pil,jpegimage类型的数据要转换成为能用的数据类型

    • 我们这里采用numpy型的数据类型进行使用,完成操作

    二、numpy型数据(进行输入图片数据类型的转换)

    2.1 读取方式

    • 使用opencv进行读取图片
    • 将PIL这种数据类型转换成为numpy数据类型
      请添加图片描述

    数据类型转换成功

    print(type(img_array))
    <class 'numpy.ndarray'>
    
    • 1
    • 2

    通过这样的方式获得函数所需要的数据类型

    2.2 安装opencv

    pip install opencv-python

    (pytorch) C:\Users\Administrator\Desktop\Code\learn_pytorch>pip ins
    tall opencv-python
    Requirement already satisfied: opencv-python in d:\anaconda\envs\py
    torch\lib\site-packages (4.6.0.66)
    Requirement already satisfied: numpy>=1.13.3 in d:\anaconda\envs\py
    torch\lib\site-packages (from opencv-python) (1.19.2)

    出现上面内容证明已经安装好了

    三、出现错误

    3.1 查看一下变量的数据类型

    确实是3通道的

    writer.add_image('test', img_array, 2, dataformats='HWC')
    
    
    • 1
    • 2

    排除错误
    请添加图片描述

    请添加图片描述

    在该页面中可以拖动step来查看不同的step对应的图片

    • 可以用来观察不同阶段训练的结果
    • 进行不同类型的数据显示
      请添加图片描述
      请添加图片描述

    四、其他

    4.1 导包的时候起一个别名

    import numpy as np

    4.2 写程序过程中的一种思路

    传递参数的过程中参数不要写死。

    • 创建一个变量来活的接收参数
    • 再将这个变量的值赋值到另一个参数中

    一定要通过变量还传递参数
    通过变量来接收参数

    4.3 什么是HWC?

    • 宽度
    • 高度
    • 通道
      请添加图片描述

    4.4 本练习源码

    from torch.utils.tensorboard import SummaryWriter
    import numpy as np
    from PIL import Image
    
    writer = SummaryWriter("logs")
    # 拿到图片的相对地址
    img_path = 'data/train/bees_image/17209602_fe5a5a746f.jpg'
    # 使用Image打开图片
    img_PIL = Image.open(img_path)
    # 将打开图片的数据类型完成转换成numpyt型
    img_array = np.array(img_PIL)
    
    # 对程序运行过程中出现的问题进行debug调试
    print(type(img_array))
    print(img_array.shape)
    
    # 使用新方法
    writer.add_image('train', img_array, 1, dataformats='HWC')
    
    # 使用tensorboard输出函数任意函数的图像
    for i in range(100):
        writer.add_scalar("y=2x", 3 * i, i)
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    猿创征文|Python学习工具千千万,我心中的TOP10
    案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
    全面认识redux应用
    【单片机仿真】(四)寻址方式 — 寄存器寻址与直接寻址
    【C语言】快速排序__拓展
    【手撕STL】AVL树
    python基础语法(五)
    用 VS Code 搞 Qt6:信号、槽,以及QObject
    「HarmonyOS」下拉刷新组件使用详情
    聚观早报|苹果默认不再接受隔空投送;Mete被裁员工将获薪水补偿
  • 原文地址:https://blog.csdn.net/weixin_44943389/article/details/127718563