目录
-
- [1. `L1Loss` (平均绝对误差 Mean Absolute Error,MAE)](#1.
L1Loss(平均绝对误差 Mean Absolute Error,MAE)) - [2. `MSELoss` / `L2Loss`(均方误差 MSE )与 `Log_MSE_Loss`](#2.
MSELoss/L2Loss(均方误差 MSE )与Log_MSE_Loss) - [3. `CharbonnierLoss` (可微鲁棒 L1 损失)](#3.
CharbonnierLoss(可微鲁棒 L1 损失)) - [4. `PSNRLoss` (峰值信噪比损失)](#4.
PSNRLoss(峰值信噪比损失)) - [5. `FrequencyLoss`(频域幅度谱损失)](#5.
FrequencyLoss(频域幅度谱损失)) - [6. `SSIMloss`](#6.
SSIMloss) - [7. `EdgeLoss`(边缘损失/拉普拉斯金字塔残差损失)](#7.
EdgeLoss(边缘损失/拉普拉斯金字塔残差损失)) - [8. `LPIPSloss`(学习型感知相似度损失)](#8.
LPIPSloss(学习型感知相似度损失)) - 9.`PerceptualLoss`
-
- [9.1 `PerceptualLoss`(多层感知特征损失)](#9.1
PerceptualLoss(多层感知特征损失)) - [9.2 `PerceptualLoss`(带 Style/Gram 矩阵损失的感知损失)](#9.2
PerceptualLoss(带 Style/Gram 矩阵损失的感知损失))
- [9.1 `PerceptualLoss`(多层感知特征损失)](#9.1
- [1. `L1Loss` (平均绝对误差 Mean Absolute Error,MAE)](#1.
1. L1Loss (平均绝对误差 Mean Absolute Error,MAE)
- 数学公式 :
L L 1 = 1 N ∑ i = 1 N ∣ x i − y i ∣ \mathcal{L}{L1} = \frac{1}{N} \sum{i=1}^N |x_i - y_i| LL1=N1i=1∑N∣xi−yi∣ - 原理与特点 :
- 计算预测值与真实值差值的绝对值均值。
- 对异常值(Outliers)的惩罚是线性的,相比 L2 损失更具有鲁棒性(Robustness)。
- 在图像超分和去模糊中,相比 L2 损失能生成更锐利、边缘更清晰的图像,是底层视觉中最常用的主干损失之一。
2. MSELoss / L2Loss(均方误差 MSE )与 Log_MSE_Loss
- 数学公式 :
L M S E = 1 N ∑ i = 1 N ( x i − y i ) 2 , L L o g M S E = ln ( L M S E ) \mathcal{L}{MSE} = \frac{1}{N} \sum{i=1}^N (x_i - y_i)^2, \quad \mathcal{L}{LogMSE} = \ln(\mathcal{L}{MSE}) LMSE=N1i=1∑N(xi−yi)2,LLogMSE=ln(LMSE) - 原理与特点 :
- MSELoss :对大误差施加二次方惩罚。由于其假设噪声服从高斯分布,优化 MSE 相当于寻找所有可能清晰解的"均值",容易导致恢复出的图像过于平滑、缺乏高频纹理(过度平滑/发糊)。
- Log_MSE_Loss:对 MSE 取对数。在训练后期当误差很小时,取对数后梯度的绝对量不会像纯 MSE 那样极速衰减,能够维持对微小残差的更新动力。
3. CharbonnierLoss (可微鲁棒 L1 损失)
- 数学公式 :
L C h a r b o n n i e r = 1 N ∑ i = 1 N ( x i − y i ) 2 + ϵ 2 \mathcal{L}{Charbonnier} = \frac{1}{N} \sum{i=1}^N \sqrt{(x_i - y_i)^2 + \epsilon^2} LCharbonnier=N1i=1∑N(xi−yi)2+ϵ2 - 原理与特点 :
- 经典的 L 1 L_1 L1 损失在差值为 0 处是不可导的。Charbonnier 损失引入平滑项 ϵ \epsilon ϵ(如
1e-12或1e-6),使损失函数在 0 处连续可微。 - 它在大误差时逼近 L 1 L_1 L1 损失(保持鲁棒),在微小误差时保持平滑可导,是当前顶会图像恢复网络(如 Restormer, NAFNet, MPRNet)中最标准的替代 L 1 L_1 L1 的损失。
- 经典的 L 1 L_1 L1 损失在差值为 0 处是不可导的。Charbonnier 损失引入平滑项 ϵ \epsilon ϵ(如
4. PSNRLoss (峰值信噪比损失)
- 数学公式 :
PSNR = 10 ⋅ log 10 ( MAX 2 MSE ) , L P S N R = − PSNR \text{PSNR} = 10 \cdot \log_{10}\left(\frac{\text{MAX}^2}{\text{MSE}}\right), \quad \mathcal{L}_{PSNR} = - \text{PSNR} PSNR=10⋅log10(MSEMAX2),LPSNR=−PSNR - 原理与特点 :
- PSNR 是图像恢复最主流的评估指标(越大越好),将其取负数即可作为最小化损失。
5. FrequencyLoss(频域幅度谱损失)
原理与特点:
- 图像的模糊本质上是高频分量(纹理、边缘)的衰减与丢失。
- 该损失使用二维实数傅里叶变换
torch.fft.rfft2将空间域图像转换到频域,提取幅度谱(Amplitude Spectrum): A ( u , v ) = ∣ F ( x ) ∣ = R ( u , v ) 2 + I ( u , v ) 2 A(u,v) = |\mathcal{F}(x)| = \sqrt{R(u,v)^2 + I(u,v)^2} A(u,v)=∣F(x)∣=R(u,v)2+I(u,v)2 - 然后在频域上直接计算
预测pred与真实gt的$L_1/L_2$差距。
作用:强制网络在全频段(尤其是高频段)与清晰图像对齐,有效抑制伪影并恢复丰富的高频纹理。
平时我们看到的图像都是在空间域(Spatial Domain) ,即图像是由一个个带有坐标 ( x , y ) (x, y) (x,y) 和 RGB 值的像素点组成的。
但傅里叶变换告诉我们:任何一张二维图像,都可以拆解为无数个不同方向、不同波长(频率)的正弦波/余弦波叠加而成。 这就是频域(Frequency Domain)。
在图像中:
低频分量(Low Frequency) :对应图像中变化平缓的大面积区域 (如蓝天、平整的墙壁、整体光照、大体颜色基调)。
高频分量(High Frequency) :对应图像中剧烈变化的边缘和细节 (如物体的轮廓、发丝、布料微小纹理、文字边缘)。
通过傅里叶变换,图像上的每个像素点变成了频域上的一个复数:
F ( u , v ) = R ( u , v ) + i ⋅ I ( u , v ) F(u, v) = R(u, v) + i \cdot I(u, v) F(u,v)=R(u,v)+i⋅I(u,v)
其中:
幅度谱(Amplitude Spectrum, ∣ F ( u , v ) ∣ |F(u, v)| ∣F(u,v)∣) :表示该频率的正弦波能量有多大(强度/丰富程度) 。
∣ F ( u , v ) ∣ = R ( u , v ) 2 + I ( u , v ) 2 |F(u, v)| = \sqrt{R(u, v)^2 + I(u, v)^2} ∣F(u,v)∣=R(u,v)2+I(u,v)2
相位谱(Phase Spectrum) :表示该频率的波在空间中的位置分布(结构和位置信息) 。
FrequencyLoss关注的就是幅度谱 ------即检查预测图在各个频率上的能量分布是否和清晰原图一致。在传统的图像去模糊、超分辨率任务中,我们通常只用像素级损失( L 1 L_1 L1 或 L 2 L_2 L2 损失)。但这会导致一个严重问题:图像过度平滑(发糊) 。在频域中,高频和低频被物理隔离开 在不同的频段坐标点上。通过计算幅度谱损失,网络能够清清楚楚地看到:"虽然低频颜色对上了,但高频频段的能量严重不足!",从而强迫网络去生成锐利的边缘和细致的纹理。
6. SSIMloss
- 数学公式 :
L S S I M = 1 − SSIM ( x , y ) \mathcal{L}_{SSIM} = 1 - \text{SSIM}(x, y) LSSIM=1−SSIM(x,y) - 原理与特点 :
- 传统像素级损失将每个像素视作相互独立的,忽略了局部结构。
- SSIM 从**亮度(Luminance)、对比度(Contrast)、结构(Structure)**三个维度评估图像局部块的相似度(取值 − 1 , 1 -1, 1 −1,1,越接近 1 越好)。
- 优化 1 − SSIM 1 - \text{SSIM} 1−SSIM 可以让生成的图像在人眼感知结构上更加协调,避免局部结构畸变。
7. EdgeLoss(边缘损失/拉普拉斯金字塔残差损失)
-
原理与特点:
- 专门针对Deblurring任务设计。
- 实现细节:
- 构建了一个可分离的高斯低通滤波核( 5 × 5 5\times 5 5×5 的近似高斯核)。
- 对图像进行高斯平滑滤波。
- 下采样后放大并再次滤波,得到低频图像。
- 用原图减去低频图像,提取出纯高频边缘图(Laplacian 残差) : D i f f = C u r r e n t − F i l t e r e d Diff = Current - Filtered Diff=Current−Filtered。
作用:直接计算预测与真实图像在"边缘图"上的差异,促使模糊的边缘迅速恢复锐利。
8. LPIPSloss(学习型感知相似度损失)
LPIPS 衡量两张图像 x x x 和 x 0 x_0 x0 之间的距离,整体计算流程分为 4 个关键步骤:
图像 x ──> 预训练网络 (AlexNet/VGG) ──> 提取多层特征 ──> 通道 L2 归一化 ──> 乘以学习权重 w ──>
图像 x0 ──> 预训练网络 (AlexNet/VGG) ──> 提取多层特征 ──> 通道 L2 归一化 ──> 乘以学习权重 w──>
计算 L2 距离 ──> 空间平均 & 多层求和
数学公式 : d ( x , x 0 ) = ∑ l 1 H l W l ∑ h , w ∥ w l ⊙ ( y ^ h w l − y ^ 0 , h w l ) ∥ 2 2 d(x, x_0) = \sum_{l} \frac{1}{H_l W_l} \sum_{h, w} \left\| w_l \odot \left( \hat{y}^l_{hw} - \hat{y}_{0, hw}^l \right) \right\|_2^2 d(x,x0)=∑lHlWl1∑h,w wl⊙(y^hwl−y^0,hwl) 22
步骤拆解:
- 多尺度特征提取(Feature Extraction) :
将图像 x x x 和 x 0 x_0 x0 输入到预训练网络中,提取第 l l l 层的特征图 y l , y 0 l ∈ R H l × W l × C l y^l, y_0^l \in \mathbb{R}^{H_l \times W_l \times C_l} yl,y0l∈RHl×Wl×Cl。 - 通道维度单位归一化(Unit-length Normalization) :
这是 LPIPS 最关键的设计之一。它将每个像素位置 ( h , w ) (h, w) (h,w) 上的通道特征向量归一化为单位长度(Unit Vector):
y ^ h w l = y h w l ∥ y h w l ∥ 2 \hat{y}{hw}^l = \frac{y{hw}^l}{\| y_{hw}^l \|_2} y^hwl=∥yhwl∥2yhwl
这一步消除了特征幅度的绝对量影响,只保留特征激活的相对模式。 - 学习到的通道权重缩放(Linear Scaling with w l w_l wl) :
引入一个可学习的向量 w l ∈ R C l w_l \in \mathbb{R}^{C_l} wl∈RCl(在真实人类主观评测数据集上训练拟合得到),对归一化后的特征按通道进行加权 ⊙ \odot ⊙。它代表了哪些通道的特征对人类主观感知更重要。 - 计算空间距离并加和(Spatial Averaging & Layer Summing) :
计算加权后的 L 2 L_2 L2 范数平方,并在空间宽高 ( H l , W l ) (H_l, W_l) (Hl,Wl) 上求平均,最后把所有选取的卷积层 l l l 的距离累加起来,得到最终的标量距离 d d d。
数值含义 :LPIPS 越小(越接近 0),说明两张图片在人类感知上越相似;数值越大,感知差异越大 1。
注 :论文中发现,在作为感知指标时,结构最简单的 AlexNet 反而比更深更复杂的 VGG / ResNet 表现更好且计算最快 1,因此代码中通常默认
net_type='alex'1。
| 特性 | 普通 VGGLoss(Perceptual Loss) | LPIPS Loss |
|---|---|---|
| 特征归一化 | ❌ 无通道归一化,直接计算原始特征值差异 | ✅ 强制进行通道维度的 Unit-length 归一化 |
| 层/通道权重 | 凭经验手工设定(如 1 / 32 , 1 / 16 1/32, 1/16 1/32,1/16 等固定衰减系数) | ✅ 基于人类主观实验数据(BAPPS)严格学习拟合出各通道权重 w w w 1 |
| 骨干网络选择 | 主要是 VGG-16 / VGG-19 | 支持 AlexNet(官方推荐首选,效果最好)、VGG、SqueezeNet 1 |
| 主要定位 | 训练时的感知损失函数 | 既可作为训练 Loss,也是目前超分辨率/图像生成领域公认的客观质量评测 Benchmark 1 |
| 对人类感知的贴合度 | 较好 | 极高(目前公认最贴近人眼主观评价的指标之一) 1 |
9.PerceptualLoss
9.1 PerceptualLoss(多层感知特征损失)
- 数学公式 :
L V G G = ∑ l = 1 5 w l ⋅ L c r i t ( ϕ l ( x ) , ϕ l ( y ) ) \mathcal{L}{VGG} = \sum{l=1}^5 w_l \cdot \mathcal{L}_{crit}(\phi_l(x), \phi_l(y)) LVGG=l=1∑5wl⋅Lcrit(ϕl(x),ϕl(y)) - 原理与特点 :
- 利用在 ImageNet 上预训练好的 VGG-19 网络提取图像的多层次语义特征(
slice1到slice5对应不同深度的 ReLU 输出)。 - 浅层特征包含低级纹理/边缘信息,深层特征包含高级语义信息。
- 分别赋予不同层衰减权重(如
$1/32, 1/16, 1/8, 1/4, 1.0$)后计算特征间的 L 1 L_1 L1 或 L 2 L_2 L2 距离。 - 作用:弥补像素损失只关注数值近似的缺陷,使生成图在"视觉认知"层面更加自然逼真。
- 利用在 ImageNet 上预训练好的 VGG-19 网络提取图像的多层次语义特征(
9.2 PerceptualLoss(带 Style/Gram 矩阵损失的感知损失)
- 原理与特点 :
- 包含两部分:
- Content Loss(内容损失):约束特征图的直接差异。
- Style Loss(风格损失) :通过计算特征图的 Gram 矩阵 ( G = F ⋅ F T G = F \cdot F^T G=F⋅FT),捕捉特征通道之间的相关性(即图像的风格、光照和统计纹理分布)。
- 包含两部分: