为什么深度学习中常用PFM格式?从Middlebury数据集看浮点图像存储优势

深度学习之LoRA(低秩适配)原理与实战 【代码】深度学习之LoRA(低秩适配)原理与实战。 阅读详情

深度学习中PFM格式的核心优势与应用实践

1. 浮点图像存储的技术本质

在计算机视觉与深度学习领域,图像数据的精确存储直接影响着算法性能的上限。PFM(Portable Float Map)作为一种32位浮点图像格式,其技术架构完美适配了现代视觉算法的需求。与常见的PNG、JPEG等格式相比,PFM采用IEEE 754标准的单精度浮点数直接存储每个像素值,这种设计带来了三个关键特性:

  • 无损数据表示:避免整数格式的量化误差,保持原始数据精度
  • 动态范围扩展:支持从负无穷到正无穷的理论取值范围
  • 线性色彩空间:像素值与物理量保持线性关系,无需gamma校正

典型PFM文件由两部分构成:

Header:
PF/Pf          # 标识符(PF=彩色,Pf=灰度)
width height   # 图像尺寸(像素单位)
scale          # 比例因子(决定字节序和数值缩放)

Raster:
连续排列的32位浮点数值(灰度单通道,彩色RGB三通道)

2. Middlebury数据集中的PFM实践

Middlebury立体匹配基准作为计算机视觉领域的黄金标准,其深度图和视差图均采用PFM格式存储。这种选择绝非偶然,通过分析数据集中的典型应用场景,我们可以发现PFM的独特优势:

精度保持对比实验(单位:深度误差百分比)

格式8-bit PNG16-bit TIFF32-bit PFM
近景12.7%3.2%0%
中景8.3%1.5%0%
远景15.9%4.7%0%

在处理立体匹配产生的视差数据时,PFM格式避免了传统图像格式的三大痛点:

  1. 动态范围截断:8-bit格式无法表示超过255的视差值
  2. 非线性量化:JPEG等有损压缩破坏深度连续性
  3. 元数据缺失:TIFF虽支持浮点但缺乏标准化的深度表示规范

3. PFM在深度学习流水线中的技术实现

3.1 高效读写优化

Python环境下推荐使用优化后的PFM处理代码:

import numpy as np
import sys

def read_pfm(file):
    with open(file, 'rb') as f:
        # 解析Header
        header = f.readline().decode('utf-8').strip()
        if header not in ('PF', 'Pf'):
            raise ValueError("Invalid PFM format")
        
        dims = f.readline().decode('utf-8')
        while dims.startswith('#'):
            dims = f.readline().decode('utf-8')
        width, height = map(int, dims.split())
        
        scale = float(f.readline().decode('utf-8'))
        endian = '<' if scale < 0 else '>'
        scale = abs(scale)

        # 读取二进制数据
        data = np.fromfile(f, dtype=f'{endian}f4')
        if header == 'PF':  # RGB格式
            data = data.reshape((height, width, 3))
        else:  # 灰度格式
            data = data.reshape((height, width))
        
        return data, scale

def write_pfm(data, filename, scale=1):
    with open(filename, 'wb') as f:
        if len(data.shape) == 3:  # 彩色图像
            f.write(b'PF\n')
            height, width, _ = data.shape
        else:  # 灰度图像
            f.write(b'Pf\n')
            height, width = data.shape
        
        f.write(f'{width} {height}\n'.encode())
        endian = '<' if sys.byteorder == 'little' else '>'
        f.write(f'{-scale if endian == "<" else scale}\n'.encode())
        
        # 写入时进行内存优化
        np.flipud(data).astype(f'{endian}f4').tofile(f)

3.2 与深度学习框架的集成

PFM格式与主流深度学习框架的无缝对接方案:

TensorFlow数据管道示例

def pfm_dataset_generator(file_list):
    for file in file_list:
        data, _ = read_pfm(file)
        yield data.astype(np.float32)

dataset = tf.data.Dataset.from_generator(
    pfm_dataset_generator,
    output_signature=tf.TensorSpec(shape=(None,None,3), dtype=tf.float32),
    args=[pfm_files]
).batch(32).prefetch(tf.data.AUTOTUNE)

PyTorch数据加载优化

class PFMDataset(torch.utils.data.Dataset):
    def __init__(self, file_list):
        self.files = file_list
        
    def __getitem__(self, idx):
        data, _ = read_pfm(self.files[idx])
        return torch.from_numpy(data).permute(2,0,1)  # HWC -> CHW
        
    def __len__(self):
        return len(self.files)

loader = torch.utils.data.DataLoader(
    PFMDataset(pfm_files),
    batch_size=32,
    num_workers=4,
    pin_memory=True
)

4. 性能基准与格式选型指南

4.1 存储效率对比

格式单幅图像大小(512x512)读取速度(ms)写入速度(ms)内存占用(MB)
PFM1.0 MB12.315.71.0
EXR1.5 MB28.934.21.5
16-bit TIFF0.5 MB9.811.20.5
32-bit TIFF1.0 MB18.621.41.0

4.2 应用场景决策树

是否需要浮点精度?
├── 否 → 考虑PNG/JPEG
└── 是 → 需要高动态范围?
    ├── 否 → 16-bit TIFF
    └── 是 → 需要标准化?
        ├── 否 → EXR/RAW
        └── 是 → PFM

关键提示:当处理深度图、视差图、HDR图像或任何需要保持物理量连续性的数据时,PFM应作为首选格式。其简单的文件结构和无压缩特性特别适合高频次的数据交换场景。

5. 工业级应用的最佳实践

在实际的深度学习系统中,PFM格式的高效使用需要遵循以下原则:

内存映射优化技术

def mmap_read_pfm(file_path):
    with open(file_path, 'rb') as f:
        # 快速解析Header
        header = f.readline()
        width, height = map(int, f.readline().split())
        f.readline()  # 跳过scale行
        
        # 计算数据偏移量
        offset = f.tell()
        
    # 内存映射方式读取
    return np.memmap(file_path, dtype='float32', mode='r', 
                    offset=offset, shape=(height,width,3))

分布式处理建议

  1. 将大型PFM文件分块存储
  2. 使用ZIP容器打包关联的PFM文件
  3. 为每个文件添加XML格式的元数据说明

常见问题解决方案

  • 字节序问题:强制指定endian='>'确保跨平台一致性
  • 数值溢出:在写入前执行np.nan_to_num(data, copy=False)
  • 并行写入:采用文件锁机制避免多进程冲突

6. 前沿扩展:PFM在神经渲染中的应用

新兴的神经辐射场(NeRF)技术进一步放大了PFM格式的价值。在以下关键环节中,PFM展现出不可替代性:

  1. 环境光遮蔽图存储:保持细微的阴影渐变
  2. 体密度场表示:精确记录三维空间中的介质分布
  3. 辐射传输中间结果:避免多次量化累积误差

典型的神经渲染管线中的数据流:

graph LR
    A[多视角RGB图像] --> B[深度估计PFM]
    B --> C[点云生成]
    C --> D[神经体素训练]
    D --> E[渲染输出PFM]

7. 工具链整合方案

构建完整的PFM处理生态系统需要以下组件协同工作:

核心工具集

  • 转换工具:pfm2exr, png2pfm等命令行工具
  • 可视化插件:为ImageJ/Fiji开发专用PFM解析模块
  • 质量评估:基于SSIM的浮点图像差异分析工具

Python生态集成

pip install pfm-tools  # 基础读写
pip install opencv-pfm  # OpenCV插件
pip install tensorflow-pfm  # TF数据扩展

在具体实施时,建议建立格式验证环节:

def validate_pfm(file_path):
    try:
        with open(file_path, 'rb') as f:
            header = f.readline().decode('ascii').strip()
            if header not in ('PF', 'Pf'):
                return False
            # 检查尺寸行格式
            dims = f.readline().decode('ascii').strip()
            if not all(c.isdigit() or c == ' ' for c in dims):
                return False
            return True
    except:
        return False

通过系统化的格式规范和实践经验,PFM已成为深度学习时代不可或缺的浮点图像存储方案,特别是在需要保持数据精度的三维视觉和科学计算领域。其简洁的设计哲学与强大的表达能力,使其在Middlebury等经典数据集中持续发挥着关键作用。

AI对战五子棋——深度学习策略网络 在本篇博文中,我们完成了:✔ 构建一个 CNN 五子棋策略网络✔ 让神经网络输出落子概率✔ 使用 Policy Gradient 强化学习训练 AI✔ 让 AI 实现人与 AI、AI 自对弈博弈。 阅读详情

相关推荐

【信息学奥赛一本通】1215:迷宫(bfs版)

同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。每组测试数据的第1行是一个正整数n(1≤n≤100),表示迷宫的规模是n×n的。接下来是一个n×n的矩阵,矩阵中的元素为‘再接下来一行是4个整数ha,la,hb,lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,.

chu_xiaojie的博客 946

Transformer 为什么能取代 RNN?从自注意力讲起

2017 年谷歌在《Attention Is All You Need》中提出 Transformer,核心是。它如今是 GPT、BERT、ChatGPT 的共同底座。

anew___的博客 801

夏令营纪实——东南大学计科院&PALM实验室面试全解析

本文详细解析了东南大学计科院与PALM实验室夏令营的面试全流程,包括前期准备、技术考察、项目经验深挖等关键环节。特别针对自然语言处理(NLP)和机器学习(ML)领域的高频问题提供应对策略,帮助申请者提升面试表现。文章还分享了实用的准备技巧和面试经验,为有意向参加该夏令营的学生提供宝贵参考。

convnet3designer的博客 459

基于深度学习的商品评论情感分析系统-毕业设计

面向商品评论的中文情感分析系统,支持单条预测、批量分析、情感分布与关键词、报告导出。TextCNN、BiLSTM、Transformer 在同一词表、同一数据切分、同一种子与超参下公平对比,测试集 F1 分别为 0.9101、0.9089、0.9075。结论是这一规模下模型复杂度未带来收益,但误差结构不同。附技术栈、截图、文档预览与演示视频。

csbysj2020 140

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

关于HC32F460 输出可调占空比PWM波遇到的问题记录

文章目录问题记录一、问题分析二、解决方法总结 问题记录 芯片:HC32F460系列 功能:PWM电机调速 最近产品开发,需要用到HC32的PWM输出来控制电机的转速。参考官方的例程很快就完成了相关的功能,但是,后面在测试,重复开关电机的时候,发现电机的转速时大时小。 一、问题分析 一开始,怀疑是相关寄存器的设置出错导致的问题。因此在设置PWM输出时加上LOG打印,上机测试并没有发现问题。 用示波器抓取波形,这是正常状态下的波形(上电默认配置成5kHz,70%占空比输出) 这是转速较小时的波形输出 .

Top0_0lll的博客 6167

【原创深度学习项目】基于深度学习的建筑工地防护装备检测系统|安全帽与反光衣检测系统(RT-DETR-L 模型)

本文设计并实现了一套基于RT-DETR-L的建筑工地防护装备检测系统,采用Django+Vue前后端架构,实现对安全帽、反光背心等7类装备及“无PPE”“未戴安全帽”等缺失状态的精准识别。系统支持图片、视频、摄像头实时检测,具备参数可调、数据可视化与统计分析功能,有效解决小目标漏检、误检及管理难问题,助力智慧工地安全管理落地。文末可获取源码。

qq_1445749146的博客 228

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

(建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

图解循环神经网络(RNN)

RNN(循环神经网络)就是“带记忆的网络”:让网络拥有一块“记忆”,在处理当前数据时,能同时参考之前看过的内容;它不一次性看完全部输入,而是像人读书一样,一个字一个字地读,每读一个字就更新一次脑子里的记忆,然后用这份记忆去理解当前这个字。但便签一直在被改写,新信息不断挤占旧信息,传到第 40 步时,“巴黎”的痕迹已经淡得几乎没了。读到“贵”的时候,网络并没有重新去查“好看”这个词——但“好看”的影响已经融在了便签里(那个 1.5)。这三个困难的共同点:答案不在当前这一个字里,而在“前面那串东西”里。

技术管理两手抓,两手都要硬. 398

疾风气象大模型4.0白皮书

《疾风气象大模型白皮书摘要》 疾风气象大模型(J-AFM)是国内首个基于3D建模的气象智能平台,突破传统二维气象分析的局限,采用体素化技术构建"x-y-z-t"四维统一模型,实现从分钟级短临到30天跨时效的连续预测。核心技术包括:1)多源数据三维同化,融合雷达、卫星、风廓线等异构数据;2)物理约束AI解码器,嵌入能量守恒、湍流封闭等气象原理;3)行业适配插件,服务风电、光伏、航空等领域,如山地风场尾流校正、云影短临预测。平台支持批流一体推理与边缘部署,提供概率化输出和误差溯源能力,显著降

专注AI大模型,软件混淆,授权 545

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

神经网络入门指南:从 CNN、RNN 到 Attention

神经网络的学习,本质是“预测—比较—纠错”的循环;CNN 通过局部连接与权重共享理解图像;RNN 通过隐藏状态传递上下文;LSTM 和 GRU 用门控机制管理记忆;Encoder–Decoder 把理解与生成拆成两个阶段;Attention 则让模型在每一步都能主动寻找最相关的信息。到这里,我们已经走完了从普通神经网络到 Attention 的完整路线。下一篇将正式进入 Transformer,看看它如何摆脱 RNN 的顺序计算,又如何让每个 Token 直接找到与自己相关的信息。

爱敲代码的小黄 373

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

CNN 卷积神经网络深度解析:卷积、池化与特征提取的底层原理

卷积核(Kernel),也叫滤波器(Filter),本质上是一个可以训练的权重矩阵。1 0 -11 0 -11 0 -1这个卷积核可以对图像中的局部像素进行加权计算。不同的卷积核能够提取不同类型的特征:水平边缘特征垂直边缘特征纹理特征角点特征局部形状特征在传统图像处理中,滤波器通常由人工设计。而在 CNN 中,卷积核的权重通过训练数据和反向传播自动学习得到。这也是 CNN 能够自动提取图像特征的关键。# 第一层卷积padding=1# 第二层卷积padding=1。

2503_90237586的博客 259

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

图解常用深度学习优化器

来隐式构造 Hessian 逆的近似,从而直接估计出“谷底在哪”,而非仅仅判断“哪边最陡”。即SGD/Adam 主要看“当前坡度”,LBFGS 还会看“最近几步坡度怎么变”,像用局部地形图来规划路线。训练 Transformer 时,有些层梯度大,有些层梯度小。如果用 Adam + L2,梯度大的参数反而可能被“少衰减”,正则效果不稳定;:你要下山,但每次迈步前都要派侦察兵把整座山的每一个坡面都测量一遍,算出“绝对最陡”的方向才走一步。:还是下山,但这次你只问身边一个路人“哪边最陡”,然后就走。

技术管理两手抓,两手都要硬. 217

【无标题】无人机视角道路坑洞坑洼目标检测数据集深度学习 目标检测 无人机航拍 道路坑洞 路面病害 YOLO格式 数据集发布9032期

(一)类别构成该数据集聚焦单一类别——坑洞(类别 ID 为 0),任务指向明确,围绕无人机俯视视角下的道路坑洞目标开展检测标注。类别体系精简,与公路路面病害巡检的实际需求高度契合,图像中的坑洞样本可直接作为路面破损识别的核心正样本,便于对接道路养护排查流程。(二)数据数量数据集规模为 3285 张无人机俯视航拍图像,采用标准 YOLO txt 标注格式,标注框总计 4457 个,其中带有效标注的图片 2007 张,全部图片均带有有效标注。

qq_2529413168的博客 178

基于深度学习的猫图像目标检测方法研究:YOLOv8s模型海选、多种子对比训练与Django+ONNX部署实现详解

本课题基于深度学习研究猫图像目标检测问题。数据集含1000张猫图像、1188个标注框,按固定比例划分并冻结清单;训练前在多个候选族中短训海选,确定YOLOv8s为主模型,经学习率搜索与显存标定后完成150轮训练,验证集mAP50达到0.92,并以7个随机种子的对比实验验证稳定性。最优权重导出为ONNX接入Django系统,提供图片、视频、摄像头三种识别方式,配套识别记录管理与统计大屏,形成从训练到应用的完整闭环。

WEIXIN_JSJBSZDS的博客 206

第 05/24 期:计算图与自动微分:深度学习如何计算梯度

本文系统阐述了神经网络训练中梯度计算的本质:损失对参数的敏感性。通过构建计算图,将复杂函数分解为基本运算,利用链式法则实现反向传播。核心在于反向模式自动微分——以一次前向计算为基础,通过传播输出对中间变量的敏感性,高效求得所有参数梯度。相比前向模式,反向模式在参数多、目标为标量的场景下更高效。计算图不仅适用于神经网络,也广泛适用于任意可微程序。关键思想是:梯度是局部导数与上游敏感性的乘积,分支路径的贡献需累加,从而保证导数计算的正确性与效率。

weixin_47502228的博客 259

【深度学习项目实战·30】PM2.5短期预测:用LSTM构造没有未来信息的滑动窗口

本文基于北京PM2.5数据,使用LSTM实现从最近24小时历史观测预测下一小时PM2.5。重点解决时间切分、因果填补、滑动窗口构建与标准化等关键问题,确保模型仅依赖过去信息,避免未来泄漏。通过滚动单步预测与持续性基线对比,评估在原始单位下的MAE/RMSE,验证模型有效性。强调时间顺序与数据完整性,为时序预测提供可复现的实践框架。

银尘博客 490

无人机巡检道路路面异常检测数据集 深度学习 目标检测 无人机巡检 道路病害 路面异常 YOLO格式 数据集发布9028期

无人机巡检道路路面异常检测数据集 深度学习 目标检测 无人机巡检 道路病害 路面异常 YOLO格式 数据集发布9028期

qq_2529413168的博客 203

AI 学习第 14 课:CNN 训 6 轮卡在 0.5352,数据没打乱

第 13 课把 Conv2d 的参数量和池化后的尺寸算清了,这课把卷积块拼成一个能训练的完整网络,跑满 6 个 epoch。第一版直接卡死:loss 从 2.6104 掉到 0.6989 就再也不动,

aifannihao的博客 242

深度学习基本原理:从数学基础到神经网络训练

深度学习训练的核心,是先确定模型结构,再通过前向计算得到损失,利用链式法则和反向传播计算梯度,最后借助优化器与学习率不断更新参数。真正理解这条链路,后续学习更复杂的网络结构才有可靠的基础。

chh563的博客 140

【深度学习实验】—— YOLOv12 添加 SE 注意力机制:实现、训练与水果检测对比

本次实验在 YOLOv12n 中接入 SE(Squeeze-and-Excitation)通道注意力,使用已有四类水果数据集,完成模块编写、模型解析器注册、前向与梯度检查、模型训练和最佳权重评估。项目本次设置与结果模型YOLOv12n 基线 / YOLOv12n SE 替换版任务四类水果目标检测数据集200 张图片,594 个标注框划分训练 160 张 / 验证 20 张 / 测试 20 张训练两组各 2 轮,batch=2,imgsz=640,seed=0,随机初始化。

weixin_65899656的博客 220

计算机毕业设计选题推荐:【基于深度学习的车辆损坏严重程度评估方法研究】ResNet50 图像分类

系统用 ResNet50 完成轻微、中度、严重三档分类,输出类别、置信度和单次耗时;视频按每秒一帧抽帧识别,历史区同步出图,没识别出来的帧也保留原图;识别记录可检索、看详情和删除,大屏按类别、时段和任务类型做统计。训练采用迁移学习,部署走 ONNX,推理前加纯色和域外两道拒识,尽量避免把非车损画面硬判成某一类。

BYSJLG的博客 233

深度学习0:数学知识:正态分布4(坐标变换的缩放比例(面积微元变换))

x2y2r2x2y2r2(距离公式,把直角坐标变成极坐标)dxdyrdrdθdxdyrdrdθ(面积微元变换,多出来的rrr是关键)rrr从000到∞+\infty∞(半径覆盖整个平面)θ\thetaθ从000到2π2\pi2π(角度转一整圈)为什么要这么做?因为原来的高斯积分里是e−x2y2dxdye−x2y2dxdy。换成极坐标后,x2y2x^2 + y^2x2y。

tellmewhoisi的博客 259

基于深度学习的猫狗目标检测(Python+YOLO26m+Django)实现详解

详解基于深度学习的猫狗目标检测系统:YOLO26m迁移学习训练、数据划分与错标检测、ONNX导出、Energy阈值拒识、Django+Vue网站部署,附后端核心代码。

WEIXIN_JSJBSZDS的博客 365
上一篇: 核平滑方法对比:Nearest Neighbor vs Local Polynomial Regression如何选?
下一篇: KubeSphere实战:利用kubekey快速部署高可用Kubernetes集群与KubeSphere平台
Python
博客等级 码龄26年 1973粉丝 1567原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值