主页

当前位置: 主页 > 学术动态 > 正文
姓名 位置
时间

耿耿不寐,如有隐忧——计算成像的实时性问题|邵晓鹏专栏第三季

柏舟(先秦诗)

汎彼柏舟,亦汎其流。

耿耿不寐,如有隐忧。

微我无酒,以敖以游。

我心匪鉴,不可以茹。

亦有兄弟,不可以据。

薄言往愬,逢彼之怒。

我心匪石,不可转也。

我心匪席,不可卷也。

威仪棣棣,不可选也。

忧心悄悄,愠于群小。

觏闵既多,受侮不少。

静言思之,寤辟有摽。

日居月诸,胡迭而微?

心之忧矣,如匪澣衣。

静言思之,不能奋飞。

争论

1、悲观者

“计算成像不好用!尤其是在机载的航空装备中,实时性跟不上去,没法用。”两三年前的一次小型交流会上,一位大佬当众直言,瞥了瞥众人后继续道:“你看看,那些压缩感知算法,运算量太大,太慢,航空要的是实时,所以,计算成像根本不可能用在机载装备中!”

大佬见众人点头状,继续说:“等你重建出图像后,目标早就飞出了视场外,压根就跟不上!”

2、乐观者

“你的这个极简光学成像方法实时性如何?需要匹配什么样的算力?未来是否可以用在光电经纬仪上?”一位总师看到了单透镜成像的结果后,殷切地关注,说:“我一直关心计算成像的发展,只要能满足每秒25到50帧的图像重建速度,那么在很多场合就能用得上。”当得知在算力中等的情况下,帧频可以轻松达到100 Hz以上时,他表现得更加迫切,因为在他的眼里,这就是低成本、轻量化的根本,未来的光电测量将会发生范式变革。

3、信心(芯)者

“计算光学的算法必须要走芯片化的道路,在探测器的后面加一个专用算法的芯片,解决应用的实时性问题。甚至在计算探测器时代,我们可以把运算单元直接设计到探测器的电路中,于是,SWaP的问题也解决了不少。”教授捋了捋头皮上那几根珍贵无比的头发,一脸自信地说。

诚然,计算成像与传统的光电成像不同的是需要“计算”,而计算的耗时是无疑的。我们亲历过傅里叶变换算法由x86时代的光标转圈漫长等待,到后来的瞬间完成,其实不到10年。所以,我们需要用发展的眼光来看问题,然后看在应用中该如何平衡“计算”效率和效果的关系、如何解决计算成像的实时性需求,这才是我们该正确面对的问题。

Oops:TOPS和算法复杂度

算法运行时,需要消耗时间资源和空间资源。衡量一个算法的好坏经常会用算法时间复杂度和算法空间复杂度来描述。

在计算机科学中,算法的时间复杂度是一个函数,其定量地描述该算法的运行时间。因为算法的真正运行时间取决于具体的计算机,而且,不同指令的运行时间也不同,为了统一规范,算法的时间复杂度经常用算法中基本操作的执行次数表示,而不是绝对的运行时间。通常,我们会看到O(lg(n))、O(n)、O(nlg(n))、O(n2)、O(en)等时间复杂度函数的表示形式,代表的是循环次数与数据规模n的关系。

在内存“惜如金”的时代,程序设计需要高超的技巧,甚至历史上还存在着一段16位机“分段寻址”的编程技术,算法的空间复杂度显得尤其重要;而到了32位、64位系统时代,那些巧匠的活不再有存在的市场,内存也变得越来越廉价,于是,算法空间复杂度也变得没那么重要了。

当GPU登场时,我们突然发现一堆诸如FLOP、TOPS、TFLOPS等等名词,让人着实看不太明白。不过,你看看这些名词是哪些单词的缩写,马上就明白了。首先,我们看最多出现的OPS,它的全称是Operation Per Second,也就是每秒处理的次数;在它前面加上表示1012数量级的Tera,就得到TOPS,即每秒处理的万亿次数,更大数量级的描述还有Peta(1015)、Exa(1018)和Zetta(1021)等等;在OPS之前加上表示浮点数(Floating Point)的FL,可以得到FLOPS,也就是每秒处理的浮点次数;把TOPS和FLOPS合并起来,得到的是TFLOPS,也就是每秒处理浮点数的万亿次数。Oops,看不懂的缩写,查一查原文什么都清楚了。

值得一提的是,还有个FLOPs,它是Floating point operations(小写s表示复数)的缩写,用来评价深度学习模型计算量的,类似的还有MACs,它是Multiply-accumulate operations(s同样表示复数)的缩写,表示乘加累积操作数。1MACs包含一个乘法操作和一个加法操作,所以MACs与FLOPs之间通常是2倍的关系。一个直观的例子是英伟达A100显卡的算力是312TFLOPS(FP16),而对于有100万亿个参数的GPT-4模型来说,其单日访问算力需求就高达6万台A100显卡,这就是为什么现在一卡难求了。

随着计算机硬件的廉价化和性能的日益提升,软件设计师这类历史上曾经辉煌过的名字,变成了大家戏谑的称呼:“码农”。

从软件设计师到“码农”(据说人社部给的官方定义,详见人社部网站),由高薪白领到工薪族,编程从汇编语言发展到高级语言的Basic、C、Fortran,到面向对象的Java、C++,再到现在的解释型语言MATLAB,曾经辉煌的编程工具C++也变得不再像20年前那么闪耀,尽管很多领域都需要它,但你从MATLAB转C++工具、MATLAB转FPGA专用的Verilog语言,你就能感叹到:世界变化快,宛如当年的BP机到了手机时代一夜消失一般。计算机也在悄然发生变化,除了配置多核的CPU外,还会有GPU显卡的配置,连手机这种移动设备也都配备了CPU和GPU,内存更是从当年的MB单位发展到了GB单位,运算能力几乎不再是问题。

然而,随着AI时代的到来,算力竟然再次出现了危机。 

二、算力危机

算力的解决一般都是摩尔定律在发挥作用,随着CPU的多核多线程出现,微电子的制备工艺从几十纳米到5 nm、3 nm,CPU的运算能力越来越强;而且,GPU这个本来只为图形加速的专用显卡单元,竟然在并行算法上具有独特优势,于是,原先只用串行处理的算法经过并行改造之后,速度提升超乎想象,以CUDA为首的GPU编程语言一度流行,“码农”似乎看到了春天。

然而,硬件提升的速度依然抵不过人类“No Zuo No Die”的速度,随着人工智能的深度学习之兴起,GPU再度登上榜首,因为拥有GPU的多少、算力如何,是评价人工智能大基建的基本参数,甚至有一种论调说:“谁拥有了算力,谁就拥有了世界!”

一个例子就是在自动驾驶方面,传统的自动驾驶系统性能主要依赖于规则代码的质量。智能驾驶能力差异实际上反映了各家在人工规则代码方面的差距。然而,无论规则代码多么详尽,都无法应对无限多样的实际道路场景,因此许多自动驾驶系统在遇到新状况时不得不不断增加新的规则来“打补丁”。相比之下,端到端自动驾驶系统性能依赖于大量数据和计算资源,通过海量训练数据,模型可以模拟人类的思考方式并“学会”驾驶。特斯拉的大规模计算集群拥有近100EFLOPS的计算能力,支持端对端自动驾驶训练和实时AI分析计算。特斯拉的辅助驾驶方案采用纯视觉,相应地对车载硬件性能要求很高。它配置了AMD锐龙V1000系列芯片,集成了Zen架构CPU和Vega架构GPU,总GPU算力是高通骁龙8155的十倍。受益于端对端模型,在最新的FSDV12版本中,人工编程的C++规则控制代码从原来的1130万行减少至3000行,系统的响应速度和灵活性也极大提高。

在大模型时代,模型的更新速度似乎也有着其自身的摩尔定律一般,版本升级很快。同时,每一次模型的更新都对算力提出新的要求,而算力消耗的能源也越来越高,有文章夸张地说:AI将消耗整个太阳的能量!

至少,我们看到一种现象:GPU作为一种通用的图形加速板卡,竟然登上了禁售榜,成为全球竞相抢夺的资源。NVIDIA从一个差点濒临退市的公司迅速市值飙至三甲,成为全球最成功的公司之一。

在大模型时代,人类已然进入了全新的计算机时代,编程语言将不再拥有它曾经的荣耀地位,“码农”的工作能不能保住似乎也难说。NVIDIA总裁黄仁勋就多次表示:“人类将不再需要编程语言,人类的自然语言在人工智能时代,本身就是编程语言。”

当然,目前,我们的计算成像大部分还不会用到大模型,算力的危机主要体现在硬件平台资源的限制,无法运行算法复杂度太高的算法。这种危机其实一直存在,比如在机载平台,运算资源本身就很有限,而图像的实时处理要求却很高,运行复杂的算法几乎不可能;卫星平台也是如此,受限于星地通信带宽的限制,星上在轨处理已呼唤多年,但到现在应用也不多,更没有形成规模。

计算成像离不开计算。在很多应用中,我们可以用计算机和GPU的资源做计算,此时,几乎无需忧虑算力资源的问题;而作为独立工作的相机系统,在没有大规模算力的情况下,甚至是计算资源受限的情况下,我们必须要面对算法的优化问题,解决应用的实际需求。

三、算法的优化——效果与效率的平衡

算法的优化准则是要达到效果与效率的平衡,也就是说在效率的约束条件下,只要满足应用需求即可,而不是一个劲儿地去追求效果。这其实是一种平衡。光电成像当然需要更高的成像品质,在传统成像时代,提升成像品质的主要工作是光学系统设计,而到了计算成像时代,“像”是经过计算之后重建获得的,它的品质由光学成像系统硬件自身和重建算法共同决定的。重建算法本身是一种优化过程,收敛条件的设置既与算法架构有关,也与成像品质要求有关。这当然不是说你想获得什么样的成像品质就能通过算法实现,因为每个算法都有自己的天花板,这个天花板就是决定着最优成像品质,而要摸到这个天花板需要付出更高的代价。优化过程当然需要快速收敛的迭代算法,但大多数重建优化算法都是在迭代一定次数后收敛越来越慢,也就是说要达到最优成像品质的代价很高。这其实与传统成像很类似,你看看摄影圈里那些被厂商打上“红圈”、“大师”等标志的镜头,比所谓的“狗头”的MTF曲线看起来好一些,但付出的金钱代价远超那点MTF曲线性能提升,性价比很低,于是有了江湖上那句流行的话:“摄影穷三代”。

计算成像的主要目的不是为了简单的好看,更多是去更好地“干活”。能干好活的人不一定要长得帅,甚至很多时候干活好的那人根本与“帅”字绝缘。计算成像也是如此,为了“干好活”的目的,图像重建出来的结果与传统成像过程的图像相差多少关系不大,关键是看能不能达到应用的要求,比如说检测出目标,整个图像并不需要层次有多么丰富,能提取出其几何形状,往往就能达到检测的目的。于是,图像重建算法的约束条件就可以按照这个要求去设置,优化算法就能很快迭代出此类重建图像的结果,节省时间是肯定的。

看到这里,细心的读者就会产生这样的疑问:计算成像的灵魂不是光场吗?为啥不直接从灵魂入手?光场不是拥有多维度信息的吗?这些多维度信息都怎么用啊?

其实,这个问题我在之前的“未来‘图像’数据长什么样——计算光学成像带来的数据革命”一文中已经讲过,到了计算成像时代,数据已经不再是我们常见图像的那种样子,处理也不再是常规的图像处理模式了。

这恰恰也是计算成像的魅力所在,它明确地告诉我们:在计算成像时代,为了更高效率地干好活,我们没有必要一定要把图像重建出来,再按照传统图像处理的模式去解决问题,而是直接从光场入手,而且是从多维度光场信息入手,探索基于光场处理的全新算法,于是,就拉开了发掘光场直接处理的帷幕。

四、金矿:光场的算法发掘

思维惯性是创新路上的拦路虎,是导致思想保守的主要力量。

其实,计算成像的数据并不是传统意义上的“图像”数据,而是光场数据。显然,光场数据的直接计算本来就应该是计算成像数据处理的第一选择,只是因为受到传统光电成像和人类视觉的影响,把图像中的强度信息和空间位置信息当成了数据处理的重点,而在光电成像已经升级为计算成像时,这种巨大的思维惯性拖曳着他们的思维,不能自拔。

这其实就像攀登高峰,一提起来,大家马上想的就是爬山,然后分析上山的几条路径,根据自己的喜好选择。后来,在一些名山大川上修建了缆车,在时间和劳苦的权衡下,很多人会选择这条“捷径”,能够在有限的时间约束下完成登峰之愿。其实,顺着这个思路我们还可以继续扩展下去,为什么不可以用直升机呢?当然,你的理由是贵,但这可能也只是时间问题。未来还会有什么样的攀登高峰的形式,那还得看技术的发展。

相比于光场数据处理,爬山的模式就像是先把数据变成我们熟悉的图像形式,然后再根据路径进行各种处理,最终达到山顶。而有了缆车、直升机之后,你发现,爬山的中间过程直接省略掉了,照样达到了登峰的目的。

对,光场数据的直接处理其实就是“架设缆车”、“驾驶直升机”的过程,当然也是数据处理的模式创新。

我还是举几个例子来说明问题吧。

首先,我们来看一个运动目标透过散射介质后的跟踪问题。散射成像大家都已经很熟悉了,无论是依靠散斑自相关还是传输矩阵方法,都可以把运动目标的图像一帧一帧地重建出来,然后再设计目标跟踪算法,把运动目标一帧一帧地检测出来,完成运动目标的检测任务。如果按这样的思路去做,算法复杂度一定不会小,运算量当然也是问题。那有没有“捷径”呢?当然有!当我们将运动前后帧的散斑图像做相关运算时,你会发现运动轨迹竟然与相关运算有直接关系,那也就是说,我们根本不需要“一步一步”地艰苦爬山,把图像数据逐帧还原出来再做检测的思维惯性必然会消耗更多的算力!我们用一个具体的例子来解释这种思路。假设一个运动目标,数字“5”,被散射介质所遮挡,如下图所示。当我们想要获得目标随时间变化的运动轨迹时,可以直接从散斑相关计算中得到,而无需恢复目标。下图中我们列举了目标不同时刻下多种状态的变化情况,包括二维平面上的横向位移(左边两幅图)、深度方向上的轴向位移(中间两幅图)以及目标旋转(右边两幅图)等。

针对上述三种情况,我们分别采集了不同时刻的两帧散斑进行处理与比较。首先,对于横向位移以及旋转,我们可以通过比较第一时刻散斑的自相关与两个时刻散斑的互相关进行判断。结合相关计算的峰值位移以及互相关的旋转态,能够分别定量分析横向位移量和旋转角度。其次,对于目标在轴向位置的定位,则可以通过比较散斑自相关在不同时刻的大小来实现。这是由于自相关图像大小的变化能够间接给出系统放大率的变化,进而利用放大率、物距、像距之间的关系可以对目标在轴向位置进行定位。

然后,我们再来看一个偏振成像的案例。偏振是光的自然属性,偏振信息自然也成了辨识物质的利器。不过,偏振是一个由偏振度和偏振角构成的数组,而且是通过偏振产生的强度差异获得的。尽管,我们可以把偏振度和偏振角用图像的形式表达出来,可是,我们心里应该知道这种做法其实意义不大,它其实就像在看图像傅里叶变换后的频谱图和幅角图一样,因为人眼压根“看不到”频谱空间,理解起来也困难;对偏振信息也是如此。那偏振在做物质识别时,该怎么用呢?

图 (a)乳腺癌活检样本的Mueller矩阵频率直方图;(b)Mueller矩阵极分解参数均值盒须图,依次为退偏,相位延迟和双向衰减;(c)正常皮肤与色素痣的退偏、相位延迟和双向衰减曲线

其实对于我们来说,由于图像对信息的视觉直观表征方式,我们经常会忽略数据的坐标表示方式。而偏振由于能够反映物质本质物理特性而被称作物质的“身份证”,其实我们知道对于物质本质特性的反演和表征,一维曲线图的坐标表示方式就够用了,而对于图像的运算只是因为我们人类对视觉的真实性依赖,认为图像视觉的体现方式才是最直观和真实的。但是随着海量数据的爆炸性出现,这种表征方式却着实有点适得其反了。这个时候我们就可以将物质的本质属性与“身份证”信息建立直观联系,以计算光学中对数据处理的思路为核心,通过偏振度和偏振角这样简单直观的点对点表征模式来实现“查表式”的物质材质区分和识别。除此之外,通过对偏振信息进行多次运算而得到的近亲——Mueller矩阵的利用与“身份证”信息的利用具有异曲同工之妙,对Mueller矩阵施加以“加减乘除”之运算魔法、并结合数据的排列组合就能得到表征物质退偏、相位变化以及二向色性的新型数据判别组,而生命科学中肿瘤细胞中纤维组织、结构变化会导致光场信息产生退偏及相位延迟等效应。因此,联动数据判别组中的三大数据,以小搏大能够有效解决对肿瘤发展阶段的准确定位,实现早筛。

接下来,我来举一个反例,那就是光谱图像的处理算法。光谱图像处理着实是一个巨大工程,光谱数据立方体动辄数以GB量级都是小case,GPU加速处理很早就进入了这个领域,但不幸的是,到现在为止,光谱数据处理还多是按照图谱分离方式进行,也就是图像是图像,光谱是光谱,至于能不能图谱一体处理,目前看,可能只有一些人工智能算法才能实现。再进一步,如果是偏振光谱数据呢,又增加了一维偏振数据,按照“惯性思维”,处理的方法就是图、谱和偏振分离,分别单独处理,再做一些看起来高大上的所谓的融合算法,得到了一些超乎光谱图像或者偏振图像的非同寻常结果,然后下一个结论:偏振光谱图像前景广阔云云。其实,这就像把骨头与肌肉、肌腱解构分离一样,各自分析一遍,系统性如何,可想而知。这种做法的本质就是只会用直角坐标系干活,连柱坐标和极坐标都不敢涉及,何况是我在计算成像范式设计中讲的更高级的投影变换!

所以,在这里,我要告诉大家:这里有矿,而且是储藏量特丰富的金矿,那就是光场数据的算法!在内卷越来越严重的时代,同质化研究的生存压力很大,如果没有人工智能的发展,你可以想象图像处理的生存空间有多大,因为很多期刊都不收录单纯图像处理算法的论文了。

可是,即使有了更优秀的光场数据算法,也并不意味着实时性的问题就能解决,而解决这些问题的钥匙是算法的硬件化——设计专用芯片。

五、算法硬件化——专用芯片之路

一般来讲,一个算法首先是在通用计算机上实现的,甚至编程语言选择的是MATLAB这种更高级的语言,典型属于功能优先、效率不计的那种。当我们为了效率想尽办法做优化时,除了资源和算力的斤斤计较之外,我们还想寻求更好的解决方案。随着微电子技术和集成电路技术的发展,专用芯片走向市场已经可以从高不可攀的贵族走入了寻常百姓家,芯片的设计门槛和流片的费用已不再成为瓶颈,于是,当一项计算成像技术发展到成熟阶段时,尤其是可以进入民用市场时,专用芯片设计立马登上舞台。

专用算法芯片的发展之路,我想应该是这样的:1、计算成像范式确立:建立起了光场数据的数学映射关系;2、专用功能的光场数据处理方法:这当然指的是“金矿”挖掘,设计专门的、光场直接运算的高效算法;3、算法优化设计:这一步当然就会简单很多,基本上属于常规操作,多是从存储资源和算力资源上考虑,以效率与效果的相互平衡为约束条件优化算法,然后转成FPGA懂的Verilog语言,在FPGA上运行、测试;当然,现在有很多算法离不开神经网络,采用神经网络架构的硬件也得兼顾,不多述;4、专用芯片设计与流片:芯片设计比较简单,按照集成电路流程设计即可,需要考虑的无非是成本与现有工艺限制的平衡,当然,现在你想设计成5 nm、3 nm还不太可能,其实也没有必要,通常几十纳米的工艺做出来的芯片,运算性能都超越你在一个大板子上设计一个复杂的电路,而且功耗很低。

你可以想象:计算光学成像的方法那么多,各种方法中又有那么多算法,当一个成熟的方法要大规模应用的话,缺了“效果佳、性能高效、成本低廉”这几个因素肯定不行,那么,计算成像的专用芯片之路将势在必行。

六、未来

我对计算成像的发展一直持乐观态度,成像效果和运算性能随着科技的发展,你认为的问题都不再是问题。计算成像难以在实时性高的场合中应用的言论,多是对计算成像技术不够了解,也没有用“向前看”的眼光来看问题,让思维惯性再次登台,左右他们的思想,让他们趋向于保守而失去机会。

计算成像的专用芯片就是瞄着实时性的目的去解决问题,而且小型化、低功耗的特点,可以让你的系统变得更加小巧,甚至我们还可以在芯片中设置不同参数,集成更多算法,实现一“芯”多用。

胆子再大一点,将成像探测器与计算成像算法集成化设计,把算法的“芯”嵌入到探测器中,这颗探测器甚至不用驱动电路,不用复杂的电路板,就能独立工作,这样的好东西你要不要?


上一篇:我们为什么“视而不见”?论成像与光场的关系|邵晓鹏专栏第三季

下一篇:低成本,那是模式的创新!|邵晓鹏专栏第三季

【关闭】