1. Prompt
是否可以请您参考PyTorch的文档格式和文档风格,使用Markdown格式为
`model/BrownianBridge/base/modules/encoders/modules.py` 文件编写
一段相应的文档说明呢?
2. Config
2.1 LBBDM: Latent BBDM [readme]
2.2 Attributes
1.2.1 runner: str
指定使用的Runner类的名称。
Runner功能:
- 模型的构建与初始化
- 数据集的加载与预处理
- 优化器和学习率调度器的配置
- 训练/验证/测试/采样循环逻辑
- 日志记录与检查点保存
注册名称:@Registers.runners.register_with_name
可用的 Runner 包括:
BBDMRunner
:用于 Brownian Bridge Diffusion Model(BBDM)及 Latent BBDM
3. Function
3.1 calculate_psnr
calculate_psnr(img1, img2, border=0)
计算两张图像之间的峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)。
该函数遵循通用实现:对于彩色图像,会先将其从RGB转换到YCbCr色彩空间,然后仅在亮度(Y)通道上计算PSNR。对于灰度图像,则直接进行计算。
PSNR 的计算公式如下:
PSNR
=
20
⋅
log
10
(
MAX
I
MSE
)
\text{PSNR} = 20 \cdot \log_{10} \left( \frac{\text{MAX}_I}{\sqrt{\text{MSE}}} \right)
PSNR=20⋅log10(MSEMAXI)
其中 MAX I \text{MAX}_I MAXI是图像数据类型的最大值(在此函数中为 255),MSE 是两张图像之间的均方误差(Mean Squared Error)。
参数(Parameters)
- img1 (
numpy.ndarray
): 第一张输入图像。应为一个H x W
(灰度) 或H x W x C
(彩色) 的 NumPy 数组,数据类型为uint8
,数值范围在[0, 255]
。 - img2 (
numpy.ndarray
): 第二张输入图像。必须与img1
具有相同的维度和数据类型。 - border (
int
, 可选): 在计算 PSNR 之前,从图像四周裁剪掉的像素宽度。默认值为0
,即不裁剪。
返回(Returns)
float
: 计算得到的 PSNR 值。如果两张图像完全相同(MSE为0),则返回float('inf')
。
异常(Raises)
ValueError
: 如果img1
和img2
的尺寸不完全相同。
3.2 calculate_ssim
calculate_ssim(img1, img2, border=0)
计算两张图像之间的结构相似性指数(Structural Similarity Index Measure, SSIM)。
与逐像素比较差异的 PSNR 不同,SSIM 是一种更先进的、更符合人类视觉感知系统的图像质量评估指标。它从三个维度综合比较两张图像的相似度:
- 亮度 (Luminance): 比较图像的平均亮度是否相似。
- 对比度 (Contrast): 比较图像的对比度(或标准差)是否相似。
- 结构 (Structure): 比较图像的结构信息(或协方差)是否相似。
对于彩色图像,该函数会先将其从RGB转换到YCbCr色彩空间,然后仅在亮度(Y)通道上计算 SSIM 值。
参数(Parameters)
- img1 (
numpy.ndarray
): 第一张输入图像(通常被视为“真实”或“参考”图像)。应为一个H x W
(灰度) 或H x W x C
(彩色) 的 NumPy 数组,数据类型为uint8
,数值范围在[0, 255]
。 - img2 (
numpy.ndarray
): 第二张输入图像(通常被视为“预测”或“失真”图像)。必须与img1
具有相同的维度和数据类型。 - border (
int
, 可选): 在计算 SSIM 之前,从图像四周裁剪掉的像素宽度。这有助于忽略因卷积等操作产生的边缘效应。默认值为0
。
返回(Returns)
float
: 计算得到的 SSIM 值。这个值通常在[0, 1]
的范围内。值越接近1
,表示两张图像越相似。如果两张图像完全相同,则返回1.0
。
2. model/BrownianBridge/base/modules/encoders/modules.py
此文件提供 BrownianBridge 模型中常用的编码器组件,包括抽象编码器基类、类别嵌入、基于 Transformer 的文本嵌入、BERT 分词器/嵌入器,以及SpatialRescaler等;
类概览
- AbstractEncoder – 编码器抽象基类
- ClassEmbedder – 类标签嵌入器
- TransformerEmbedder – 基于 Transformer 的嵌入器
- BERTTokenizer – 使用预训练 BERT 分词器
- BERTEmbedder – BERT + Transformer 嵌入器
- SpatialRescaler – 空间维度重缩放器