compression

GitHub
913 260 中等 1 次阅读 今天Apache-2.0开发框架数据工具
AI 解读 由 AI 自动生成,仅供参考

TensorFlow Compression 是专为 TensorFlow 打造的数据压缩工具库,旨在帮助开发者构建端到端优化的机器学习模型。它核心解决了如何在仅牺牲极小模型性能的前提下,为图像、特征等数据找到高效存储表示的难题,特别适用于对存储空间敏感的应用场景。

该工具主要面向 AI 研究人员和深度学习开发者,尤其是那些需要探索有损数据压缩或模型压缩技术的人群。其独特亮点在于提供了灵活的 C++ 范围编码(Range Coding)实现,支持处理包含所有整数的无限字母表;内置的熵模型类能自动设计编码表,在训练时充当似然模型,推理时则直接将浮点张量转换为优化后的比特流。此外,它还集成了广义除法归一化(GDN)等专为学习式压缩设计的 Keras 层。

需要注意的是,自 2024 年 2 月起,TensorFlow Compression 已进入维护模式,功能不再新增且主要兼容 TensorFlow 2.14 版本。为了支持更新版本的 TensorFlow,官方推出了仅包含 C++ 算子的独立包 tensorflow-compression-ops,但该支持预计将持续至 TF 2.18 版本。如果您正在寻找成熟的学习式压缩方案或希望复现相关研究,这是一个非常专业的选择。

使用场景

某医疗影像初创团队正在构建基于 TensorFlow 的肺部 CT 扫描异常检测系统,面临海量高分辨率图像数据的存储与传输瓶颈。

没有 compression 时

  • 原始浮点型张量直接落盘占用巨大存储空间,导致云存储成本随数据量激增而难以控制。
  • 在边缘设备与云端服务器间传输未压缩模型权重和特征图时,网络带宽成为训练和推理速度的主要瓶颈。
  • 若手动集成传统压缩算法(如 ZIP 或 JPEG),会破坏端到端的梯度传播,无法针对特定任务优化“码率 - 失真”平衡。
  • 缺乏自动化的熵编码支持,开发人员需耗费大量精力编写底层比特流处理逻辑,且难以支持有符号整数等复杂数据类型。

使用 compression 后

  • 利用 entropy model classes 自动设计范围编码表,将浮点张量转换为优化比特序列,在仅牺牲微小检测精度的前提下大幅缩减存储体积。
  • 内置的 C++ Range coding 算子实现了端到端可微的压缩流程,让模型能自动学习如何在低码率下保留对病灶识别最关键的特征信息。
  • 借助广义除法归一化(GDN)等专用层,显著提升了非线性变换编码效率,使得边缘设备上传数据的速度提升数倍。
  • 无需重复造轮子即可处理包含全量有符号整数的复杂数据分布,通过可选的“溢出”功能轻松应对各种医学影像数据格式。

compression 的核心价值在于让开发者能在 TensorFlow 生态内直接构建“感知优化”的压缩系统,以极小的性能代价换取存储与传输效率的数量级提升。

运行环境要求

操作系统
  • Linux
  • macOS
GPU
  • 非必需
  • 若使用 GPU 加速,需安装 CUDA 和 cuDNN(具体版本取决于 TensorFlow 要求),README 未指定具体显存大小或显卡型号
内存

未说明

依赖
notes1. Windows 用户需通过 WSL2 或 Docker 运行 Linux 环境才能使用预编译包。 2. 自 2024 年 2 月 1 日起,该库进入维护模式,完整功能包仅支持 TensorFlow 2.14。 3. 若需使用 TensorFlow 2.15-2.18,需单独安装 'tensorflow-compression-ops' 包(仅含 C++ 算子)。 4. 在 Anaconda 环境中,必须通过 pip 而非 conda 安装 TensorFlow 以避免兼容性问题。 5. 训练默认会使用 CLIC 数据集(自动下载)。
python3.8+ (基于 Docker 镜像 tensorflow/build:latest-python3.10 推断,需配合 TensorFlow 2.x)
tensorflow>=2.14
numpy
scipy
compression hero image

快速开始

TensorFlow 压缩

TensorFlow Compression (TFC) 是一个为 TensorFlow 提供的数据压缩工具库。

您可以使用该库构建自己的机器学习模型,并内置端到端优化的数据压缩功能。这有助于在仅牺牲少量模型性能的情况下,找到数据(如图像、特征、样本等)的高效存储表示。请参阅 有损数据压缩教程模型压缩教程,以开始您的实践。

若想从经典数据压缩的角度深入了解,可以阅读我们的 非线性变换编码论文,或观看 @jonarchists 的 关于学习型图像压缩的演讲。而从机器学习视角介绍有损数据压缩的内容,则可参考 @yiboyang 的 综述论文

该库包含以下内容(详情请参阅 API 文档):

  • 范围编码(又称算术编码)实现,以 C++ 编写的灵活 TF 操作形式提供。这些实现包括可选的“溢出”功能,可在范围编码的比特序列中嵌入 Elias gamma 编码,从而支持对包含所有有符号整数而非有限范围的字符集进行编码。

  • 熵模型类,简化了设计率–失真优化编码的过程。在训练期间,它们充当似然模型;训练完成后,通过自动设计范围编码表并调用底层范围编码实现,将浮点张量编码为优化的比特序列。

  • 其他在学习型数据压缩上下文中非常有用的 TensorFlow 函数和 Keras 层,例如用于数值计算密度函数分位数的方法、基于抖动噪声取期望值的操作、具有更灵活填充选项且支持在傅里叶域中重参数化卷积核和偏置的卷积层,以及广义除法归一化(GDN)的实现。

重要更新: 自 2024 年 2 月 1 日起,TensorFlow Compression 已进入维护模式。具体而言:

  • TFC 的完整功能集已冻结。不会开发新功能,但仓库将继续接收维护性修复。

  • 今后,新的 TFC 包将仅兼容 TensorFlow 2.14。这是由于 TensorFlow 2.15 携带的 Keras 版本引入了不兼容性,需要重写我们的层和熵模型类。

  • 为确保现有模型仍能在 TensorFlow 2.15 及更高版本上运行,我们发布了新的包 tensorflow-compression-ops,其中仅包含 C++ 操作。这些操作将尽可能地更新以支持较新的 TensorFlow 版本。

    • 更新:由于在维护 C++ 自定义操作时面临的技术挑战,TF 2.18 将是 tensorflow-compression-ops 支持的最后一个版本。
  • 在 pypi.org 上同时提供了两种选项的二进制包:TFCTFC 操作

文档与帮助

有关本包所实现的类和函数的完整说明,请参阅 API 文档

请将所有问题或评论发布到 Discussions。仅针对实际的 bug 或功能请求提交 Issues。在 Discussions 上,您可能会更快得到回复,并且有助于其他人日后更轻松地找到相关问题或答案。

安装

注意:目前仅提供适用于 Linux 和 Darwin/Mac OS 的预编译包。若要在 Windows 上使用这些包,建议按照 WSL2 安装指南 安装 TensorFlow,或使用 TensorFlow Docker 镜像,然后再安装 Linux 版本的包。

设置一个可以使用 pip 命令安装预编译 Python 二进制包的环境。有关如何搭建此类 Python 环境的详细信息,请参阅 TensorFlow 安装指南

当前版本的 TensorFlow Compression 需要 TensorFlow 2。对于兼容 TensorFlow 1 的版本,请参阅我们的 历史版本

pip

要通过 pip 安装 TFC,运行以下命令:

python -m pip install tensorflow-compression

为测试安装是否正确,可以运行单元测试:

python -m tensorflow_compression.all_tests

命令执行完毕后,最后一行应显示类似 OK (skipped=29) 的消息。

Colab

您可以在 Colab 中实时试用 TFC。以下命令会安装与当前安装的 TensorFlow 版本兼容的最新 TFC 版本。在执行 Python 代码之前,在单元格中运行它:

%pip install tensorflow-compression~=$(pip show tensorflow | perl -p -0777 -e 's/.*Version: (\d+\.\d+).*/\1.0/sg')

注意:TFC 的二进制包与 TensorFlow 的次版本号绑定(例如,TFC 2.9.1 需要 TensorFlow 2.9.x),而 Colab 在部署最新版 TensorFlow 方面有时会滞后几天。因此,如果直接使用 pip install tensorflow-compression,可能会尝试升级 TensorFlow,从而引发问题。

Docker

若要在 Docker 容器中使用(例如在 Windows 上),请确保已安装 Docker(如 Docker Desktop),并使用 TensorFlow Docker 镜像。然后在 Docker 容器内运行 pip install 命令,而不是在主机上。例如,可以使用如下命令:

docker run tensorflow/tensorflow:latest bash -c \
    "python -m pip install tensorflow-compression &&
     python -m tensorflow_compression.all_tests"

此命令将拉取 TensorFlow Docker 镜像(如果尚未缓存),安装 pip 包,并运行单元测试以确认其正常工作。

Anaconda

似乎 Anaconda 自带的 TensorFlow 二进制版本与我们通过 pip 发布的包不兼容。为了解决这个问题,请始终使用 pip 而不是 conda 来安装 TensorFlow。例如,以下命令会创建一个包含 CUDA 库的 Anaconda 环境,然后安装 TensorFlow 和 TensorFlow Compression:

conda create --name ENV_NAME python cudatoolkit cudnn
conda activate ENV_NAME
python -m pip install tensorflow-compression

根据 tensorflow pip 包的具体要求,你可能需要将 CUDA 库固定到特定版本。如果你不使用 GPU,则当然不需要 CUDA。

使用方法

我们建议在 Python 代码中按如下方式导入该库:

import tensorflow as tf
import tensorflow_compression as tfc

使用预训练模型压缩图像

models 目录 中,你会找到一个名为 tfci.py 的 Python 脚本。下载该文件并运行:

python tfci.py -h

这将列出所有可用选项。简而言之,使用以下命令:

python tfci.py compress <model> <PNG 文件>

即可利用预训练模型对图像进行压缩,并生成一个以 .tfci 结尾的文件。执行 python tfci.py models 可查看支持的预训练模型列表。而以下命令:

python tfci.py decompress <TFCI 文件>

则可以解压缩 TFCI 文件并生成一个 PNG 文件。默认情况下,输出文件名与输入文件相同,仅添加相应的文件扩展名(现有扩展名不会被移除)。

训练自己的模型

models 目录 中包含了多个已发表的图像压缩模型实现,方便用户进行实验。需要注意的是,要复现已发表的结果,可能还需要对代码和训练数据集进行更多调优。你可以使用上述 tfci.py 脚本来访问这些公开模型。

以下说明介绍了一种对以下论文中提出的模型的重新实现:

“端到端优化的图像压缩”
J. Ballé, V. Laparra, E. P. Simoncelli
https://arxiv.org/abs/1611.01704

请注意,models 目录并不包含在 pip 包中。这些模型需要单独下载。下载 bls2017.py 文件并运行:

python bls2017.py -h

这将列出该实现的所有可用命令行选项。训练过程可以非常简单,例如:

python bls2017.py -V train

此命令将使用默认设置。请注意,除非通过 --train_glob 提供自定义训练数据集,否则将会使用 TensorFlow Datasets 下载 CLIC 数据集

最重要的训练参数是 --lambda,它控制着模型在比特率和失真之间的权衡。每层的通道数也很重要:针对较高比特率(或等价地,较低失真)优化的模型通常需要具有更高逼近能力的变换(即更多的通道)。因此,为了优化性能,你需要确保通道数足够多(或更多)。这一点在以下文献中也有详细描述:

“用于有损图像压缩的有效非线性变换”
J. Ballé
https://arxiv.org/abs/1802.00847

如果需要,你可以使用 TensorBoard 监控训练进度。为此,在开始训练之前先在后台启动一个 TensorBoard 实例,然后在浏览器中访问你机器上的 6006 端口

tensorboard --logdir=/tmp/train_bls2017 &

训练完成后,Python 脚本会将训练好的模型保存到由 --model_path 指定的目录中(默认为当前目录下的 bls2017),格式为 TensorFlow 的 SavedModel。之后,你可以使用该脚本进行图像的压缩和解压缩操作。两个命令必须能够访问同一个保存的模型。

python bls2017.py [options] compress original.png compressed.tfci
python bls2017.py [options] decompress compressed.tfci reconstruction.png

构建 pip 包

本节介绍了构建你自己的 TensorFlow Compression pip 包所需的步骤。这可能对于在我们尚未提供预编译二进制文件的平台上安装该库的情况是必要的(目前仅支持 Linux 和 Darwin)。

为了与官方 TensorFlow pip 包兼容,TFC 的 pip 包必须链接到匹配版本的 C 库。因此,在构建官方的 Linux 版本时,我们使用 这些 Docker 镜像,并采用与 TensorFlow 相同的工具链。

在 Docker 容器内,需要执行以下步骤:

  1. 从 GitHub 克隆 tensorflow/compression 仓库。
  2. 在克隆的仓库中运行 tools/build_pip_pkg.sh

例如:

git clone https://github.com/tensorflow/compression.git /tensorflow_compression
docker run -i --rm \
    -v /tmp/tensorflow_compression:/tmp/tensorflow_compression\
    -v /tensorflow_compression:/tensorflow_compression \
    -w /tensorflow_compression \
    -e "BAZEL_OPT=--config=manylinux_2_24_x86_64" \
    tensorflow/build:latest-python3.10 \
    bash tools/build_pip_pkg.sh /tmp/tensorflow_compression <custom-version>

对于 Darwin 系统,无需使用 Docker 镜像或指定工具链。我们可以直接构建包,如下所示(建议先创建一个干净的 Python 虚拟环境来完成此操作):

git clone https://github.com/tensorflow/compression.git /tensorflow_compression
cd /tensorflow_compression
BAZEL_OPT="--macos_minimum_os=10.14" bash \
  tools/build_pip_pkg.sh \
  /tmp/tensorflow_compression <custom-version>

在这两种情况下,wheel 文件都会在 /tmp/tensorflow_compression 目录下生成。

要测试生成的包,首先安装生成的 wheel 文件:

python -m pip install /tmp/tensorflow_compression/tensorflow_compression-*.whl

然后运行单元测试(请勿在包含 WORKSPACE 文件的工作目录中运行测试。否则,Python 解释器会尝试从源代码树中导入 tensorflow_compression 包,而不是从已安装的包系统目录中导入):

pushd /tmp
python -m tensorflow_compression.all_tests
popd

测试完成后,你可以再次卸载该 pip 包:

python -m pip uninstall tensorflow-compression

评估

我们提供了多种图像压缩方法在不同色彩空间下、基于不同指标的评估结果。更多信息请参阅 results 子目录

引用

如果您将本库用于研究目的,请引用以下文献:

@software{tfc_github,
  author = {Ballé, Jona 和 Hwang, Sung Jin 和 Agustsson, Eirikur},
  title = {{T}ensor{F}low {C}ompression: Learned Data Compression},
  url = {http://github.com/tensorflow/compression},
  version = {2.14.1},
  year = {2024},
}

在上述 BibTeX 条目中,作者按提交次数排序,列出了主要贡献者。请根据实际使用的版本号和年份进行相应调整。

请注意,本项目并非 Google 官方支持的产品。

版本历史

v2.11.02022/11/23
v2.10.02022/09/07
v2.9.22022/08/13
v2.9.12022/05/30
v2.9.02022/05/16
v2.8.12022/03/02
v2.8.02022/02/09
v2.17.02024/08/07
v2.16.02024/03/27
v2.15.02024/02/02
v2.14.12024/02/02
v2.14.02023/10/13
v2.13.02023/07/26
v2.12.02023/03/23
v2.7.02022/01/26
v2.22021/05/14
v2.12021/03/11
v2.02021/03/06
v2.0b22021/01/06
v2.0b12020/12/04

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架