PS:基于小土堆视频学习
1、add_image()的使用
读取样本集中的数据`
image_path = "data/train/ants_image/0013035.jpg"
from PIL import Image
img = Image.open(image_path)
在pycharm的控制台中运行该代码,运行后可以发现:
数据格式是JPRG,不满足add_image()函数的要求
writer.add_image()
add_image(),在pycharm中通过ctrl单击后可以获取详细要求。代码定义要求如下
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 (str): Data identifier
img_tensor (torch.Tensor, numpy.ndarray, 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
dataformats (str): Image data format specification of the form
CHW, HWC, HW, WH, etc.
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 suitable 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 %
"""
torch._C._log_api_usage_once("tensorboard.logging.add_image")
self._get_file_writer().add_summary(
image(tag, img_tensor, dataformats=dataformats), global_step, walltime
)
``
方法签名
- add_image(self, tag, img_tensor, global_step=None, walltime=None,
dataformats=“CHW”)
参数说明
- tag (str): 数据的标识符,用于在TensorBoard中区分不同的图像。
- –img_tensor (torch.Tensor, numpy.ndarray, or string/blobname):
图像数据,可以是PyTorch张量、NumPy数组或字符串/blob名称。 - global_step (int):
记录的全局步长值,用于在TensorBoard中按时间顺序排序事件。 - walltime (float):
可选,用于覆盖默认的时间戳(自epoch以来的秒数)。 - dataformats (str):
图像数据格式的规范,“CHW”、“HWC”、“HW”、"WH"等。
图像数据格式
-
默认情况下,图像张量的形状应为(3, H, W),表示3个颜色通道,高度和宽度。
-
也可以使用torchvision.utils.make_grid()将一批张量转换为3xHxW格式。
-
张量形状为(1, H, W)、(H, W)、(H, W, 3)也是合适的,只要相应地传递dataformats参数,如"CHW"、“HWC”、“HW”。
示例
示例中展示了如何使用SummaryWriter添加图像数据。首先创建一个图像数组,然后使用add_image方法将其添加到TensorBoard的摘要中。如果图像数据的维度不是默认的,需要设置dataformats参数。
预期结果
在TensorBoard中,应该能够看到添加的图像,图像会以指定的标签显示。
注意事项
- 这个方法需要pillow包。
- 使用add_image方法之前,需要创建一个SummaryWriter实例。
- 在添加完所有需要的数据后,应调用close方法来关闭SummaryWriter实例,确保所有数据都被写入磁盘。
也可直接在代码基础上:
image_path = "data/train/ants_image/0013035.jpg"
from PIL import Image
img = Image.open(image_path)
print(type(img))
数据结果为:
<class 'PIL.JpegImagePlugin.JpegImageFile'>
该类型无法满足add_image的要求,所以可以直接用OpenCV,opencv打开的类型基本为numpy类型。
因此需要再环境中安装openCV
在终端环境中,新增,然后输入
pip install opencv-python
安装完成后,可以通过下述代码:将PIL类型的JpegImage变量转换为numpy类型
image_path = "data/train/ants_image/0013035.jpg"
from PIL import Image
img = Image.open(image_path)
print(type(img))
import numpy as np
img_array = np.array(img)
print(img_array)
#将PIL类型的JpegImage变量转换为numpy类型
在控制台中调试,可以看到,当前数据的格式如下:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image #需要注意区分大小写
writer =SummaryWriter("logs")
img_path = "data/train/bees_image/21399619_3e61e5bb6f.jpg"
#修改后再运行,然后单击 http://localhost:6007/,刷新后就可以拖动查看
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image("test",img_array,2,dataformats="HWC")
# writer.add_image()
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
如果需要单独显示,对title进行重新命名
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image #需要注意区分大小写
writer =SummaryWriter("logs")
img_path = "data/train/bees_image/95238259_98470c5b10.jpg"
#修改后再运行,然后单击 http://localhost:6007/,刷新后就可以拖动查看
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image("train",img_array,2,dataformats="HWC")
# writer.add_image()
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()