第268章 极端挑战与算法进化(2/2)
周峰在跑模拟。
他按了回车。屏幕黑了一下,然后跳出实时渲染的画面。虚拟的水珠在虚拟的镜头上生成、积聚、滑动。滑落的瞬间,画面边缘的确出现了预测中的扭曲。
但还不够快。
帧率显示在角落:每秒七帧。离实时处理还差得远。
“优化。”沈清澜说,声音里听不出情绪,“把浮点运算改成定点。不需要那么高精度,够用就行。”
周峰又开始敲键盘。
这次敲得更快,更急。删掉大段代码,重写,编译。错误提示弹出来,他看都不看就关掉,继续改。
陈默走到窗边。
窗外已经完全黑了。远处写字楼的灯还亮着,一格一格的,像巨大的蜂巢。有车流在楼下经过,红色的尾灯拖成长线。
他想起父亲论文里那张图。
动态平衡。不是静止,是在扰动中维持某种稳定的轨迹。星海在挖人,是扰动。国家队给项目,是锚点。现在算法要面对的湿度、粉尘、震动,也是扰动。
而他们要做的,是在所有这些扰动里,让识别框稳稳地锁住目标。
像在飓风里穿针。
手机又震了。这次是王薇:“陈总,晚饭到了。大家吃点?”
陈默回头。
办公区里没人动。所有人都盯着屏幕,像屏幕里有什么东西会跑掉。只有沈清澜站起来,走向茶水间。她走得很慢,背有点僵。
“拿过来吧。”陈默回消息,“在工位上吃。”
王薇推着小车进来。车上摞着快餐盒,塑料盖子上凝着水汽。有炒饭,有面条,有盖浇饭。味道混在一起,闻起来有点腻。
她一份一份发。
发到周峰时,周峰没接。他盯着屏幕,眼睛一眨不眨。王薇把饭盒放在他手边,他过了五秒才反应过来,哦了一声,打开,扒了一口。
嚼得很慢,像在嚼木头。
沈清澜回来了。她手里拿着杯咖啡,黑咖啡,没加糖也没加奶。杯子是公司的马克杯,印着“默视科技”的logo,边缘有个小缺口。
她喝了一口,眉头皱了皱。
“凉了。”她说,但还是又喝了一口。
陈默接过自己的饭盒。是鱼香肉丝盖饭,肉丝切得很细,胡萝卜丝和青椒丝混在一起,酱汁把米饭染成褐色。他吃了一口,咸,甜,辣,味道很重。
他吃了半盒,吃不下了。
胃里像塞了团东西,沉甸甸的。他放下筷子,塑料筷和饭盒碰撞,发出清脆的咔哒声。
周峰忽然站起来。
他动作太猛,椅子往后滑,轮子撞在隔断板上,砰的一声。所有人都抬头看他。
“定点运算搞定了。”他说,声音有点抖,“帧率上到二十五了。”
沈清澜放下咖啡杯。她走到周峰工位,俯身看屏幕。画面里,虚拟水珠滑落的模拟已经流畅了,帧率数字稳定在二十五,偶尔跳到二十六。
“跑真实数据。”她说。
周峰点头。他导入下午那个掘进机视频,拖到水雾最浓的那一段。按下播放键。
画面还是那么暗,那么晃。水珠砸在镜头上,炸开,滑落。但这次,屏幕边缘多了个小窗口,实时显示水珠的预测轨迹。绿色的虚线,随着震动微微颤抖。
然后,就在水珠滑落的瞬间,主画面的扭曲区域被标记出来了。
红色的半透明蒙版,盖住被水膜严重影响的像素。算法没有尝试去“看透”这些像素,而是直接把它们标记为“不可信”。
然后从前后帧借信息。
借来的像素碎片像拼图,一块一块填进红色区域。有些碎片对不上,边缘有锯齿。但大部分能拼出轮廓,岩壁的轮廓,钢筋的轮廓。
虽然不是高清,但能认出来。
能认出来,就够了。
办公室里安静极了。
只有散热风扇的嗡嗡声,还有周峰因为激动而略显粗重的呼吸声。他盯着屏幕,盯了十秒,二十秒。然后他猛地转身,看向沈清澜。
沈清澜没说话。
她伸出手,在周峰肩膀上按了一下。按得很轻,但周峰整个人都僵住了,像被那一下按进了地里。
然后她转身,走回自己工位。
她没坐下,而是拉开抽屉,拿出一板巧克力。掰了两块,递给周峰一块,自己塞了一块进嘴里。嚼得很慢,像在品尝什么珍贵的东西。
陈默感到胸口有什么东西松开了。
不是完全的轻松,是绷紧的弦稍微松了一扣。他深吸口气,空气里有咖啡的苦,有快餐的油,有电子设备发热的塑料味。
他走回自己办公室。
关上门,外面的声音被隔开,只剩模糊的背景音。他坐在椅子上,椅子因为他的重量发出轻微的吱呀。
打开邮箱。
收件箱里又堆了十几封新邮件。有供应商的报价更新,有客户的咨询,有行业会议的邀请函。他全选,标记为未读。
然后点开和顾维钧的聊天窗口。
打字:“动力学模型有突破了。用FPGA做实时水珠轨迹预测。”
发送。
过了大概三分钟,顾维钧回了两个字:“不错。”
就两个字,没有表情,没有标点。但陈默盯着那两个字,看了很久。
他知道顾维钧的风格。能说“不错”,已经是很好的评价。
窗外有车按喇叭。声音很远,闷闷的,像从水底传上来。陈默看向玻璃,玻璃映出他自己的脸,还有身后办公室的景象。
沈清澜已经回到白板前,又在画新的东西。
周峰和其他人围着她,指指点点,争论着什么。声音透过门缝传进来,听不清内容,但能听出那股劲。
那股非要把它做成的劲。
陈默靠在椅背上,闭上眼睛。
系统推演没有出现。这次没有碎片,没有画面,只有一种感觉。像站在黑暗的隧道里,远处有光,光还很远,但你知道它在那个方向。
而你已经迈开了腿。
他睁开眼,重新看向屏幕。顾维钧的消息还停在“不错”两个字上。他想了想,又打字:“但粉尘模拟还没开始。震动台也要后天才能搭好。”
这次顾维钧回得快了:“一步步来。赵主任要的不是神仙,是能解决问题的工程师。”
陈默盯着这句话。
能解决问题的工程师。不是发明完美技术的神,是挽起袖子,跳进泥坑,一点一点把问题啃下来的人。
他忽然笑了。
笑得很轻,几乎没发出声音。但嘴角扬起来了,脸上的肌肉松弛了。他感到眼眶有点热,用力眨了眨。
然后他站起来,推门出去。
沈清澜听见脚步声,转头看他。她脸上有倦色,但眼睛很亮,像擦了把雪。
“粉尘模型我有个想法。”陈默说,“不把它当噪声,把它当介质。”
沈清澜挑眉。
“光在粉尘里会散射。”陈默走到白板前,拿起笔,“散射不是完全随机。它遵循某种分布。如果我们能建模这个分布……”
“就能从散射光里反推原始图像。”沈清澜接上。她语速很快,像子弹射出枪膛,“像CT。用多个角度的散射数据,重建。”
她抢过笔,在粉尘模拟区画了个示意图。光源,粉尘云,摄像头。光线不是直线,是弯弯曲曲的路径,像蛛网。
“但这需要多摄像头阵列。”周峰插嘴,“掘进机上没那么多位置。”
“用时间代替空间。”陈默说,“摄像头在震动,位置在变。每一帧,摄像头都在新的位置。把这些位置连起来,就是虚拟的阵列。”
办公室里又安静了。
这次安静得更久。所有人都盯着白板,盯着那些弯曲的光路,盯着那个用时间换空间的想法。
沈清澜第一个动。
她回到工位,开始敲代码。不是写完整程序,是写验证脚本。一百行,两百行,三百行。屏幕上的字符瀑布一样往下滚。
然后她按了运行。
进度条走得很慢。百分之十,百分之二十。机器风扇转得更响了,发出呜呜的声音,像在抗议。
百分之百。
结果跳出来。是一张对比图。左边是原始粉尘图像,灰蒙蒙一片。右边是重建后的,虽然还有噪点,但岩壁的纹理已经能看见了。
能看见纹理,就能做特征匹配。
就能锁定目标。
周峰张大了嘴。他看看屏幕,看看沈清澜,看看陈默。然后他猛地转身,冲向自己电脑。“我来写正式版!”
声音因为激动而破了音。
陈默和沈清澜对视一眼。
沈清澜嘴角弯了一下。很浅的弧度,几乎看不见,但陈默看见了。他也笑了笑,这次笑出了声,很短促,像叹息。
然后他看向窗外。
天还是黑的,但远处天际线那里,开始透出一点深蓝。很淡,像水彩画的第一层底色。夜晚正在过去,早晨正在到来。
而他们的算法,也正在从混乱的极端环境里,一点一点长出自己的眼睛。
不是完美的眼睛。是会在水雾里模糊、在粉尘里迷路、在震动里发抖的眼睛。但它会认路。会在迷路后找回来,会在模糊后努力看清,会在发抖后重新站稳。
这就够了。
陈默走回自己办公室。他重新打开邮箱,点开那封“深地项目技术攻坚”的邮件。看了一遍,又看了一遍。
然后他在末尾加了一句。
“我们不是在创造奇迹。我们是在用所有已知的工具,去够那个未知的目标。而工具不够时,我们就发明新的工具。”
他敲下回车。
句子发送出去,成了这封邮件的一部分,也成了这个夜晚的一部分。窗外,深蓝正在变浅,变成鱼肚白。
实验室里,振动台的钢架在灯光下泛着冷光。
粉尘模拟器的玻璃房静静立着,等待被充满。
而算法,正在进化。