SwanLab是一个由国内团队开源的机器学习实验跟踪工具,相比于Tensorboard有更丰富的功能、更友好的UI界面,以及更重要的云端同步、多人协作功能。
安装:pip install swanlab
本教程主要介绍如何用swanlab.Image
记录图像,支持numpy、pytorch tensor、PIL、文件路径、matplotlib等多种输入方式。
Image效果示例:
1. 从numpy array创建
记录单张图像:
import numpy as np
import swanlab
run = swanlab.init()
# 1. 创建一个numpy array
random_image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8)
# 2. 传入swanlab.Image
image = swanlab.Image(random_image, caption="random image")
run.log({"examples": image})
记录多张图像:
import numpy as np
import swanlab
run = swanlab.init()
# 创建一个列表
examples = []
for i in range(3):
random_image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8)
image = swanlab.Image(random_image, caption="random image")
# 列表中添加swanlab.Image类型对象
examples.append(image)
# 记录图列
run.log({"examples": examples})
2. 从PyTorch Tensor创建
swanlab.Image
支持传入尺寸为[B, C, H, W]与[C, H, W]的Tensor。
import torch
import swanlab
run = swanlab.init()
···
for batch, ground_truth in train_dataloader():
# 假设batch是尺寸为[16, 3, 256, 256]的tensor
tensors = swanlab.Image(batch)
run.log({"examples": tensors})
3. 从PIL Image创建
import numpy as np
from PIL import Image
import swanlab
run = swanlab.init()
# 创建一个列表
examples = []
for i in range(3):
random_image = np.random.randint(low=0, high=256, size=(100, 100, 3), dtype=np.uint8)
pil_image = Image.fromarray(random_image)
image = swanlab.Image(pil_image, caption="random image")
examples.append(image)
run.log({"examples": examples})
4. 从文件路径创建
import swanlab
run = swanlab.init()
image = swanlab.Image("path/to/file", caption="random image")
run.log({"examples": image})
swanlab.Image
在默认情况下,是以png
的格式做图像转换与存储。
如果想要用jpg
格式:
image = swanlab.Image("path/to/file",
caption="random image",
file_type="jpg")
5. 对传入图像做Resize
在默认情况,swanlab.Image
不对图像做任何尺寸缩放。
如果需要放缩图像,我们可以通过设置size
参数,来调节图像尺寸。
放缩规则为:
-
默认: 不对图像做任何缩放
-
size
为int类型: 如果最长边超过size
, 则将最长边设为size
, 另一边等比例缩放; 否则不缩放 -
size
为list/tuple类型:- (int, int): 将图像缩放到宽为size[0], 高为size[1]
- (int, None): 将图像缩放到宽为size[0], 高等比例缩放
- (None, int): 将缩放缩放到高为size[1], 宽等比例缩放
print(im_array.shape)
# [1024, 512, 3]
im1 = swanlab.Image(im_array, size=512)
# [512, 256, 3]
im2 = swanlab.Image(im_array, size=(512, 512))
# [512, 512, 3]
im3 = swanlab.Image(im_array, size=(None, 1024))
# [2048, 1024, 3]
im4 = swanlab.Image(im_array, size=(256, None))
# [256, 128, 3]
6. 记录Matplotlib图表
import swanlab
import matplotlib.pyplot as plt
# 定义横纵坐标的数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# plt创建折线图
plt.plot(x, y)
# 添加标题和标签
plt.title("Examples")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
swanlab.init()
# 记录plt
swanlab.log({"example": swanlab.Image(plt)})