徕卡一瞬 M9:三个模型权重全部解出,以及我为什么放弃手机端移植
项目地址:查看链接
徕卡一瞬 M9 的三个神经网络模型——ColorFix、StyleTrans High 和 StyleTrans Low,权重已经全部解出,网络结构也已成功还原。整个网络只使用了卷积、ReLU、Pixel Unshuffle、Depth-to-Space、Nearest 上采样、MaxPool、Concat 和 Clamp 等基础运算,均可通过 ONNX 标准算子实现。这意味着模型本身并不依赖特定硬件,理论上可以迁移到各种计算平台,以 ONNX、PyTorch 等不同形式运行。至于实际运行效率和硬件加速支持,则取决于具体设备和推理后端。
这里提供了一个基于 PyTorch 的运行示例,接受 RAW 图像作为输入,尽最大努力复现徕卡一瞬原厂管线中能够离线实现的部分,包括白平衡、部分曝光控制、模型选择与推理,以及后处理中的暗角、滤镜等。样片位于第一行。需要说明的是,模型本身采用 RGB-to-RGB 的处理形式,RAW 需要经过前处理才能进入模型。这套示例中的大量算法和参数都直接来自原厂实现,能够还原的部分已经尽可能在数值和机制上做到一致,只有少数缺乏完整运行条件的环节需要近似处理。其中部分算法已经完成了与原厂实现的直接对照验证,例如 TMC202 色调映射算法在四组不同照度和 DRC 条件下,与原厂库的计算误差不超过 1.2×10⁻⁶;Ultra HDR 的 ISO 21496-1 元数据也实现了与原厂输出逐字节一致。这些环节已经超出了单纯的效果模拟,能够在数值层面验证复现的准确性。具体的逆向过程、实现细节和已知限制均记录在 GitHub 仓库查看链接中。事实上,离线处理 RAW 反而比将整套算法移植进其他小米手机的相机更加方便,因为前者只需要复现算法,后者还需要将算法插入甚至替换现有的相机管线,并解决一系列兼容性问题。
经过这段时间的研究,我基本决定不再继续推进徕卡一瞬 M9 的手机移植了。我确实有些无能为力,也认为继续投入的意义已经不大。原因主要有四个。
首先,模型其实是整条计算摄影管线中最容易移植的部分之一。 很多人觉得模型难以移植,很大程度上只是因为小米采用了与特定平台绑定的部署格式,给提取和运行设置了很高的门槛。但当网络结构和权重被还原后,就会发现它使用的都是非常基础的运算,跨平台运行并不存在难以逾越的理论障碍。真正困难的是模型之外的整套影像算法栈。小米 17 Ultra 的管线相当特殊,许多原本由平台提供的算法节点都被替换成了小米自己的实现。这些节点并非无法逆向,实际上相关实现已经解出来了,但它们的参数和运行条件高度绑定 17 Ultra 的硬件。离线执行这些算法相对容易,要让它们在其他手机的相机框架中接管原有节点,并与整套 ISP 流程正确协同,就困难得多。
而且,经过实际测试,可以确认这套模型对输入极其敏感,会非线性地放大前处理中的偏差。 模型接收的是经过前处理的 RGB 数据,曝光、白平衡、色彩和动态范围映射都需要尽可能符合原厂预期。即使输入只有看似很小的偏差,经过网络后也可能产生严重的色彩和影调异常,极端情况下甚至会让整个画面一塌糊涂。这意味着仅仅让模型成功运行远远不够,前处理的准确性同样重要。倘若 Tuning 不到位,即使使用完全相同的模型权重,输出结果也可能与原版相去甚远。我在实验中复现了
其次,徕卡一瞬的 Tuning 具有很强的镜头相关性。 原厂文件中存在大量针对不同镜头分别配置的参数,包括曝光、ADRC 等。不同镜头的实际透光率、光谱透过特性、暗角和边缘色偏,以及它们与传感器组成的整个光学系统,都会影响后续算法的输入。针对 17 Ultra 某颗镜头调校好的参数,直接搬到另一台设备上,显然无法保证正常工作。这些问题当然可以通过重新标定和调试来解决,但如果要尽可能还原原厂效果,就意味着针对每一台目标设备、每一颗镜头重新进行大量标定工作。这已经接近于从头为目标机型开发和调校一套影像管线了。 小米能够依靠完整的软硬件开发体系,花费数月甚至更长时间打磨一套方案,但对于缺少专业设备、原厂工具和底层开发条件的个人开发者而言,这样的工程量很难承受。
第三,也是很多人容易忽略的一点:不同传感器的光谱响应差异,决定了跨设备色彩复现存在难以彻底消除的误差。 稍微了解相机色彩管理的人可能会说,用灯箱和色卡重新标定一次不就好了?但现实远比这复杂。光谱是连续的,物体的反射光谱和环境光源的光谱功率分布都千差万别。传感器最终得到的 RGB 信号,是光谱经过镜头、滤光片和传感器各通道的光谱响应加权积分后的结果。不同传感器的响应曲线不同,即使在特定光源下通过颜色矩阵将色卡拟合得非常准确,也无法保证面对其他光源和材质时依然一致。更麻烦的是,两种光谱可能在一台相机上产生相同的 RGB 响应,却在另一台相机上表现出明显差异。这与色彩科学中的同色异谱问题密切相关,单靠一套颜色矩阵无法彻底解决。
举个例子,小米 17 Ultra 使用了特殊设计的红外截止滤光片,而不同设备对近红外光的抑制程度并不相同。植物叶片在近红外波段具有很高的反射率,如果红外截止性能不足,部分近红外光可能泄漏到传感器的颜色通道中,造成绿色偏移(测试来自@LOVELYLULU ),具体表现取决于传感器和滤光片的光谱特性。即使我们在灯箱里将两台设备的绿色标定得非常接近,到了真实的户外环境,面对不同植物和光照条件,依然可能出现明显差异。这种问题深入到了传感器和光学系统的物理层面,进一步改善需要多光源标定、更复杂的色彩映射以及大量实际场景调试。不同传感器可以通过调校获得相近的视觉效果,却很难在所有真实场景中表现得完全一致。 对于输入分布如此敏感的神经网络,这种差异尤其棘手。
最后一点,也是最终让我决定停止移植的原因:徕卡一瞬 M9 究竟有多“徕卡”?或者说,它对真实徕卡 M9 的还原程度,值得我们为此付出如此巨大的工程成本吗?
我实际观察和测试了徕卡一瞬、传奇一瞬,以及 OPPO 大师模式搭配 M9 LUT 的效果,也拿它们与 M9 原机样片进行了比较。(第二行为OPPO大师模式搭配M9 LUT,来自@色彩逆向工程 拆解M9相机固件)结果多少有些令人失望:这几种方案都能呈现出大致相似的色彩倾向,照片也确实很有质感,但与真实 M9 之间仍然有相当明显的距离。至少从我的观察来看,很难说其中哪一套方案显著更加接近 M9,甚至一套调校得当的 LUT,有时也能取得与复杂神经网络相近的主观观感。当然,这些观察并非严格控制变量的同场景实验,不能代替客观的色彩还原测试,但已经足以让我重新考虑继续移植的价值。如果几套技术路线截然不同的方案,最终都只是“差不多一个调调”,那么为了其中某一套方案的完整移植而大动干戈,究竟有多大必要?
而且,我认为这里存在两个值得分开讨论的问题:人们为什么喜欢徕卡一瞬,以及人们为什么认为徕卡一瞬很有“M9 风味”。
首先,很多人喜欢徕卡一瞬,也许根本没有那么在意它的徕卡色彩,真正吸引他们的可能是更自然、更接近传统相机的成像质感。徕卡一瞬关闭了 LTM(局部色调映射),只保留 GTM(全局色调映射),同时没有 AI 超分。这与小米此前的徕卡经典、徕卡生动有明显区别,后两者依然使用了相当激进的 LTM 等局部处理。LTM 能够分别调整不同区域的明暗,提亮阴影、压制高光,让画面显得更加通透,但过度使用也容易破坏自然的明暗关系,产生局部反差异常、光晕和明显的“HDR 味”。AI 超分同样能够改善主观清晰度,却也可能引入不真实的纹理。徕卡一瞬减少了这些干预,照片或许没有普通模式那么亮、那么锐、那么追求每个角落都清清楚楚,但影调和细节反而更加自然。
这种体验恰恰是小米此前长期欠缺的。 手机计算摄影越来越倾向于让暗部足够明亮、高光足够清楚、细节足够丰富,但并非所有人都喜欢这种高度处理过的观感。很多用户愿意接受更深的阴影、更自然的反差和没有经过过度重建的细节。换句话说,很多人或许只是需要一个更“相机”的模式,类似 OPPO 的大师模式,而没有那么强烈地需要一个更“徕卡”的模式。 徕卡一瞬恰好提供了这种体验,而 M9 色彩模拟又为它增添了鲜明的风格标签。因此,用户喜欢这套模式,未必有多少功劳真正属于 M9 神经网络模型。
其次,人们印象中的“徕卡一瞬风格”,可能很大程度上来自锁定日光白平衡。这也是一个相当有“M9 风味”的设计。现代手机普遍依赖自动白平衡,尽可能消除环境光造成的色偏,而固定日光白平衡会保留更多环境光本身的颜色:晴天和高色温环境下容易发青,室内暖光下又会明显发黄。这种强烈的色彩倾向,很容易让人联想到早期数码相机的成像风格。我在使用 OPPO 大师模式搭配 M9 LUT 进行模拟时,同样锁定了日光白平衡。还有个挺有意思的细节:界面上标称锁定 5200K,实际算法中使用的数值却是 5003K。
但固定日光白平衡也是一把双刃剑,甚至可能是徕卡一瞬整条管线中风格化最激进的环节之一。 它能够保留环境光的氛围,也会在某些条件下带来相当夸张的色偏,晴天发青、室内发黄,效果甚至可能比 M9 色彩模型本身的处理还要强烈。用户所感受到的“M9 味道”,很可能有相当一部分来自这种白平衡策略。而真实 M9 的成像同样受到白平衡设置、镜头、光照、曝光和 RAW 解码方式等因素影响,并不存在一套唯一确定的标准色彩。徕卡一瞬呈现出的,是经过选择和强化的 M9 风格,不能直接等同于真实 M9 在各种场景中的成像表现。
于是,一个很有意思的现象就出现了:徕卡一瞬受到欢迎,可能主要得益于减少局部影调处理和细节重建后更加自然的质感;而它被认为“很有徕卡味”,又可能很大程度上来自固定日光白平衡带来的强烈色彩倾向。 前者改变影调和纹理,后者改变色彩氛围,两者叠加,便形成了与普通手机模式截然不同的视觉体验。但这两部分都无法简单归功于 M9 神经网络模型。模型当然有它的价值,复杂的非线性色彩映射以及对不同颜色关系的处理,可能包含简单 LUT 难以准确复现的内容,只是模型的复杂程度与最终对真实 M9 的还原程度,并不存在必然联系。
这就让继续移植面临一个尴尬的问题:如果追求的是主观上“有那个味道”,完整移植原厂管线未必有必要;如果追求的是尽可能接近真实 M9,那么即使完整移植了徕卡一瞬,也未必能够实现。 毕竟,徕卡一瞬本身也是一套经过设计和调校的现代计算摄影方案,它呈现的是对 M9 风格的一种模拟。我们完全可以欣赏这种风格,但也应该客观看待它与真实 M9 的关系。
说到这里,我也想谈谈最近酷安上的相机移植。最近有不少新的移植开发者雨后春笋般涌现,我认为这是件好事。无论是研究相机包、修改配置、解锁功能,还是尝试移植底层算法,都需要投入大量时间和精力。作为同样从事逆向研究的人,我很清楚其中的困难,也对所有愿意钻研这些东西的开发者抱有敬意。不过,对于最近出现的一些“免 ROOT 徕卡一瞬版相机包”,我认为有必要说明一个根本性的技术限制:在没有系统级权限、也不修改底层影像组件的情况下,仅靠安装或替换相机 APK,几乎不可能将 17 Ultra 的徕卡一瞬完整移植到其他设备。 相机 APK 能够提供界面、修改部分参数以及调用系统已经开放的拍摄能力,但真正的成像流程涉及相机 HAL、厂商算法库和底层 ISP 管线。17 Ultra 特有的算法节点、处理顺序和硬件 Tuning,都无法仅靠一个普通应用直接插入或替换。更何况,徕卡一瞬的神经网络还需要特定的 RGB 输入,必须与前后处理环节正确衔接。即使相机包包含原厂模型,也仍然受到原始部署格式、推理后端和硬件兼容性的限制,通常只能在特定机型上正常运行。独立开发应用来运行这些模型当然可行,但这与将原厂算法无缝接入其他手机的相机管线仍有很大区别。当然,这并不影响现有相机包通过修改配置、开放功能或者调整参数来改善拍摄体验。这些工作同样具有价值,只是从技术上讲,功能移植、风格模拟和完整管线移植之间,确实存在难以跨越的距离。
我也完全理解,很多移植者本来就没有追求严格的一比一复现。能够让更多设备获得新的影像功能,本身就有价值。我个人决定停止移植,也不意味着这条路没有继续探索的意义。如果有开发者认为完整移植徕卡一瞬值得投入,非常欢迎使用这次解出的三个模型权重和网络结构继续开发。 至少模型这一环已经摆脱了原厂部署格式的限制,可以通过 PyTorch、ONNX 等通用框架重新部署。后续的相机管线集成、硬件适配和 Tuning 调整依然需要大量工作,但已经不必再从头逆向模型本身。希望这次公开的成果能够降低后来者的开发门槛,也期待有人能够在此基础上走得更远。
至于我自己,这次研究到这里已经基本达成目标。三个模型的权重和结构成功还原,也提供了尽可能忠实于原厂处理机制的离线运行示例。我依然认为徕卡一瞬是一套值得研究的计算摄影方案,也理解大家对它的喜爱。只是经过这次逆向,我越来越觉得,一套算法在工程上的复杂程度、一种影像风格在审美上的吸引力,以及它对某台真实相机的还原程度,应该分别评价。
模型已经解出来了,剩下的路可以交给愿意继续探索的人。至于我们费尽心思想要复现的那种“徕卡味道”,究竟有多少来自 M9 本身,又有多少来自那些被我们长期忽略的成像策略?我觉得这个问题同样值得思考。#小米17ProMax# #HyperOS4# #小米15Ultra#
酷安热榜
徕卡一瞬 M9:三个模型权重全部解出,以及我为什么放弃手机端移植项目地址:查看链接徕卡一瞬 M9 的三个神经网络模型——ColorFix、StyleTrans High 和 StyleTra...
AI 总结
提炼文章概述与要点,快速了解主要内容。
预计阅读 14 分钟
同来源文章
- 我只想说.不是duo机主不要给苹果洗地.体验垃圾不让我说?特么的 #iOS27# #iPhone18ProMax#
- 在这里为全体X100系列,iqoo12机主发声!这次相机界面(UI)准备下放,却只给300/200系机型,这是何意味。。老机主不配拥有新UI吗?不给是老了吗。况且昧着良心说...
- 关于iPhone duo镀膜,其实,我一开始是不相信傻子共振的,现在… 任何设计都有要设计的目标的,别人大费周章的设计一张弱化折痕的膜,被降级解读为磨砂膜。一般...
- #酷安夜话# 在交友软件聊了一个菲律宾女孩 一个星期了 让我去找她 目前聊的爱很深 ,他的老家房子地址 爸妈多大 在哪里上班 电话号码都告诉我了 身份证也看到了 ...