Img-ZIP

19 downloads 2 likes on ModelScope updated

Model card

芥象(Img-ZIP)图像超压缩模型

⚠️ 重要提示:  
由于本模型的任务类型特殊(特征压缩表征),不支持ModelScope Pipeline调用。  
请通过官方库进行调用:`pip install xiaothink`

模型描述

芥象(Img-ZIP)是基于深度学习的分块式图像超压缩模型,可将任意分辨率图像智能分割为80×80区块,将每块像素压缩为固定长度的整数序列(范围:-40~40)。在保持重建质量(PSNR>=30dB)的前提下:

对于100维版本:

  • 基础压缩率:约1%(100维整数版本)
  • 7z二次压缩后:可达0.41%(100维版本)
  • 极限压缩率:16维版本压缩率≈0.15%(色彩还原能力减弱)

技术本质:将视觉信息转换为为离散符号表征,实现"芥子纳须弥"级压缩效果


模型测评结果

** 经过测试,JPG与WEBP压缩算法经过7z二次压缩后文件无法再次缩小,所以对比中不添加 JPG+7z与WEBP+7z **

结果1 结果2 结果3

模型命名规范

best_{结构版本}_{压缩出的数值个数}c.keras
  • 版本说明:
    • pro2/pro2.1/pro2.2:漫画优化(9万张漫画训练)
    • pro2.2_all:通用优化(9万张漫画预训练+7k真实图像微调)
  • 数值个数:
    • 每80×80×3区块输出的整数数量
    • 值↑ → 质量↑ → 压缩率↓

可用模型列表

模型文件 区块维度 适用领域 特性
best_pro2.2_16c.keras 16维 极低网络的黑白图像传输 极限压缩,输出接近黑白图像
best_pro2.2_36c.keras 36维 粗略漫画/简单图像的传输 平衡压缩率与质量
best_pro2.2_100c.keras 100维 漫画/插画的较高质量传输和用于微调纯语言模型添加视觉能力 相对较高保真漫画还原
best_pro2.2_all_100c.keras 100维 通用图像的传输和用于微调纯语言模型添加视觉能力 真实场景色彩增强
best_pro2_64c.keras 64维 漫画 Pro2架构基础版
best_pro2_96c.keras 96维 漫画 Pro2架构高质量版

色彩还原能力:pro2.2_all_100c > pro2.2_100c > pro2_96c


使用限制

  1. 仅支持Xiaothink库调用(不兼容Transformers/HuggingFace)
  2. 输出为整数数组(无Token映射接口)
  3. 二次压缩需手动进行:.npy → .7z

调用方法

1. 基础图像压缩

# 注意,ImgZip的位置为:xiaothink.llm.img_zip.img_zip
from xiaothink.llm.img_zip.img_zip import ImgZip


# 初始化(选择100维通用版)
model = ImgZip(model_path="best_pro2.2_all_100c.keras")

# 兼容的旧版接口:压缩图像(自动分块)
compressed = model.compress_image(
    img_path="input.jpg",
    save_path="compressed_data"  # 生成.npy+.shape
)


# 新版接口:压缩图像
compressed = model.compress_image(
    img_path='input.jpg',
    patch=True,  # 是否使用分块处理
    save_path='result/compressed_img'  # 保存路径前缀(如果不传入该参数则默认直接返回压缩结果)
    ability=0.02,# v1.2.5新特性:设置自定义压缩率为0.02(当ability为0时代表不使用自定义压缩率),算法将计算并压缩至接近的大小(理论计算与实际大小存在误差)
)



# 解压图像
model.decompress_image(
    compressed_input="compressed_data",
    save_path="restored.jpg"
)

2. 赋能纯文本LLM实现思路(伪代码)

# 步骤1:压缩图像问答数据集
qa_pairs = []
for img_path, answer in dataset:
    # 获取整数数组 [a1, a2, ..., a100]
    tokens = model.compress_image(img_path)
    qa_pairs.append(f"IMAGE[{','.join(map(str, tokens))}] {answer}")

# 步骤2:映射为唯一Token(示例)
token_mapping = {f"IMG{i}": i for i in range(-40, 41)}
for tokens in qa_pairs:
    # 将数字序列替换为映射Token
    processed = re.sub(r"-?\d+", lambda m: token_mapping[int(float(m.group()))], tokens)

# 步骤3:微调文本LLM
train_llm_on_custom_dataset(processed_data)

3. 视频流压缩(即将停止支持)

# 压缩视频(1分钟1080P→约3MB)
model.compress_video(
    video_path="input.mp4",
    output_dir="compressed_video"
)

# 解压视频(保留原分辨率/帧率)
model.decompress_video(
    compressed_dir="compressed_video",
    output_path="restored.mp4"
)

最佳实践指南

场景 推荐模型 预期效果
边缘设备传输 pro2.2_36c 压缩为极少数据
多模态扩展 pro2.2_all_100c 最佳色彩还原
漫画资源库 pro2_96c 原画级细节
安防监控 pro2.2_all_100c且较高自定义压缩率 人脸/车牌可识别

补充

  1. 压缩率计算方法:
    原始体积 = 80*80*3 = 19,200字节
    100维压缩 = 100*4 = 400字节(32位整型)
    → 压缩率 = 400/19200 ≈ 2.08%
    → +7z压缩 → 可达0.41%
    
  2. 色彩警告:
    • 16维版本≈黑白
    • 36维以上基本支持全彩

注:"芥象"名称取自佛典"芥子纳须弥",喻小数据容大千图像

本算法目前存在 压缩率 和 质量不能自由设定 等缺陷,我们将在未来进一步优化改进。 -> 本算法目前已支持自定义压缩率(xiaothink库1.2.6版本及以上)!