021、自动对焦AF:CDAF、PDAF、双像素对焦与深度学习AF的精度与速度权衡

📅 2026/7/13 15:59:28
021、自动对焦AF:CDAF、PDAF、双像素对焦与深度学习AF的精度与速度权衡
021、自动对焦AFCDAF、PDAF、双像素对焦与深度学习AF的精度与速度权衡一个让我熬夜三天的案子2019年某款旗舰机暗光下对焦拉风箱用户投诉视频里人脸一直是虚的。我盯着log看了三天发现PDAF在低照度下信噪比崩了相位差计算全是噪声AF直接切回CDAF然后CDAF在低对比度场景下反复搜索马达来回跑功耗飙升温度上来后镜头热漂移更严重——死循环。这个案子让我彻底明白AF不是算法问题是系统问题。今天这篇笔记我把这些年踩过的坑、调过的参数、撕过的架构全倒出来。CDAF老黄牛但别让它干细活对比度检测AF原理简单到令人发指马达走一步ISP算一次对比度找到峰值。但简单意味着粗暴。坑1搜索策略决定生死全行程扫描别这样写。我见过某方案从无穷远到微距扫一遍花了2.3秒用户早把手机摔了。实际工程中必须用爬山算法但爬山算法有个致命缺陷——遇到局部峰值就停了。比如拍树叶缝隙对比度峰值可能在背景墙上前景树叶反而虚了。我的经验爬山算法里加一个“抖动检测”当连续三次对比度变化小于阈值时强制回退两步重新搜索。这个阈值怎么设看镜头MTF曲线通常取MTF50对应的对比度值的80%。别问我为什么是80%试出来的。坑2窗口选择是玄学全图算对比度功耗爆炸。只算中心拍边缘物体就废。我见过最蠢的实现是固定9宫格结果用户拍左上角物体AF永远对在中心。正确做法结合人脸检测或物体跟踪动态分配权重窗口。但注意窗口不能太小——至少32x32像素否则噪声会淹没对比度信号。这个尺寸我调了两年才定下来。CDAF的硬伤速度慢精度受限于镜头步进分辨率。但优点也明显——不受光源频谱影响激光投影下也能工作。所以CDAF永远不会被淘汰它应该作为PDAF的兜底方案。PDAF快但别信它相位检测AF原理是sensor上做掩膜左右像素看相位差。听起来很美实际工程里全是坑。坑3掩膜像素的校准是噩梦每个sensor出厂都有相位差偏移因为掩膜工艺不可能完美。这个偏移量需要标定但温度变化、镜头位置变化都会改变偏移量。我见过某方案在-10°C下相位差偏移了3个像素AF直接对到无穷远。解决方案在sensor的OPB光学黑区里埋参考像素实时校准偏移。但注意参考像素必须和有效像素同工艺否则热漂移不一致。这个细节很多sensor厂商不会告诉你。坑4低照度下PDAF就是废物当光照低于10 luxPDAF像素的信噪比急剧下降。为什么因为掩膜像素只接收一半的光信号量减半噪声不变。这时候算出来的相位差全是随机数。我的做法当AE检测到照度低于阈值时强制关闭PDAF切回CDAF。但这个阈值不能固定——高增益下噪声更大阈值要动态调整。我写过一个查表函数根据ISO值和曝光时间查PDAF置信度低于0.6就禁用。这个表是实测出来的每个sensor都不一样。PDAF的精度陷阱相位差计算的是“模糊程度”不是“对焦位置”。镜头在不同位置相位差和实际离焦量的关系是非线性的。我见过有人用线性拟合结果近摄时误差0.5mm拍微距全糊。必须用多项式拟合至少3阶。双像素对焦折中方案但别神话它双像素Dual Pixel本质是每个像素都做相位检测解决了PDAF像素稀疏的问题。但工程实现上它把每个像素劈成两个半像素牺牲了满阱容量。坑5双像素的串扰问题两个半像素之间的隔离不可能完美电荷会串扰。串扰导致相位差计算偏小表现为“对焦偏近”。我调过一款sensor串扰系数高达15%必须做软件补偿。补偿方法在暗场下拍均匀光源记录左右半像素的差值建立串扰矩阵。这个矩阵是2x2的但不同颜色通道的串扰不同所以实际上是6x6RGGB四个通道加上两个半像素方向。别嫌麻烦不做补偿双像素的精度还不如传统PDAF。双像素的功耗代价每个像素都要读出两个值数据量翻倍MIPI带宽压力大。我见过某方案为了省带宽把双像素数据压缩成8bit结果相位差精度损失30%。正确做法双像素数据走独立MIPI lane不压缩但只在AF阶段开启预览和拍照时合并回正常像素。深度学习AF未来已来但别急着用用CNN预测离焦量听起来很酷。我试过几个方案说说真实体验。坑6训练数据是最大的坑你以为拍几万张图就够了错。深度学习AF需要覆盖不同光照10 lux到10000 lux、不同场景人脸、文字、风景、不同镜头位置近摄到无穷远、不同温度-20°C到60°C。我团队花了三个月采集数据最后发现数据分布不均匀——近摄数据太少模型在微距下完全失效。解决方案用仿真数据增强。把真实场景的模糊核提取出来叠加到清晰图上生成不同离焦量的训练样本。但注意模糊核必须和镜头PSF一致否则模型学的是假特征。深度学习的速度问题推理时间必须小于5ms否则跟不上马达响应。我见过用MobileNet的推理10msAF滞后明显。正确做法用轻量级网络比如SqueezeNet或定制的小模型量化到INT8部署在NPU上。但NPU的精度问题——量化误差会导致预测偏移必须做后训练量化校准。深度学习AF的真正价值不是替代PDAF而是解决PDAF解决不了的问题——比如透过玻璃拍摄、拍摄高光反射物体。这些场景下传统相位差计算会受干扰但深度学习可以学习到“模糊模式”和“离焦量”的映射关系。系统级权衡没有银弹说了这么多到底怎么选我的经验场景1旗舰手机主摄双像素 深度学习AF辅助长焦PDAF CDAF兜底超广角CDAF就够了别浪费成本场景2车载摄像头必须用PDAF因为CDAF在高速运动下跟不上但PDAF要加温度补偿车载温度范围-40°C到85°C深度学习AF用于识别障碍物距离但只能辅助不能做主控场景3安防摄像头CDAF 红外辅助因为安防场景光照变化大不要用PDAF安防sensor通常没有相位检测像素深度学习AF可以用于夜间模式下的对焦但推理功耗要控制在50mW以内个人经验性建议永远不要相信sensor厂商的AF参数。他们给的相位差曲线、对比度曲线都是在理想环境下测的。拿到样片后第一件事就是自己做标定温度箱、积分球、分辨率卡一个都不能少。AF算法要分层底层是马达驱动开环/闭环中间层是AF算法CDAF/PDAF/深度学习上层是策略层场景识别、优先级管理。不要把所有逻辑揉在一起否则调试时你会疯。留好调试接口log要能输出每个AF步骤的相位差、对比度、马达位置、置信度。我见过太多方案出了问题连log都没有只能猜。用户感知比客观指标重要AF速度0.1秒和0.2秒用户可能感觉不出来。但拉风箱一次用户就记住了。所以宁可慢一点也要保证一次到位。最后也是最重要的AF不是孤立的它和AE、AWB、防抖、HDR都有耦合。比如HDR多帧合成时AF必须锁定否则帧间模糊。这些系统级问题比AF算法本身难十倍。这篇笔记写到这里我看了眼窗外天快亮了。AF这个领域我调了十几年每次以为懂了下一个案子就会打脸。但这就是Camera工程的魅力——永远有坑永远在填坑。