
第三章:异状
张大爷走的时候,脚步都飘着,手里攥着打印好的照片,布包抱得紧紧的,一个劲儿跟陈野说谢谢,说晚上就让儿子过来送锦旗。陈野把他送到巷口,看着他佝偻着背,沿着青石板路一步步走远,鸟笼子里的画眉又开始叫,声音脆生生的,撞在两侧的老墙上,溅起一点点回声。
回到店里,陈野关上门,靠着门板站了半天,后背上的冷汗早就干了,紧绷的肌肉却还是松不下来。他走到电脑前,盯着屏幕上那张修复好的照片,那行“俺叫狗蛋,张傻子别想俺”清清楚楚躺在领口位置,就像是本来就印在那里一样。
他坐下来,点开模型的日志文件,一行一行往上翻。训练模型的时候,他加了详细的日志记录,每一次输入输出,每一个参数调整都会存下来。他找到了刚才两次修复的日志,输入文件的哈希值没问题,输出文件的生成过程也没问题,模型没有调用任何外部接口,所有运算都是在本地完成的。
“奇怪了。”陈野挠了挠头,调出训练数据集看了看。他的训练数据是从公开数据集爬的几百万张老照片,还有一些网上收集的标注,哪里会有什么“狗蛋”“张傻子”,八竿子打不着。他又检查了一遍模型结构,卷积层、残差块、生成器,都没问题,代码是他一行一行敲的,不可能藏着这种奇怪的彩蛋。
“难道是扫描的时候,纸背面的字透过来了?”陈野忽然想到这个可能性。他赶紧把张大爷留下的扫描件放大,仔仔细细看领口位置,原图上干干净净,连个污渍都没有,更别说字了。他又调了对比度,把亮度拉到最高,还是什么都没有。
他不信邪,把自己带来的那张奶奶和他的合影再导进去修一遍。点击运行,几十秒后结果出来,画面比之前更清晰了,但是除了本来就有的内容,什么多余的东西都没有。他又找了一张自己大学毕业照,扫进去修复,结果也正常,边缘修得整整齐齐,肤色也自然,没有多出来一个字。
“邪门了。”陈野点了根烟,是临走前同事给的,一直放在包里没抽。烟雾飘起来,绕着显示器打了个转,慢慢散开来。他盯着张大爷那张照片,反复想,刚才张大爷说,只有战友自己知道他的乳名叫狗蛋,也只有狗蛋知道他小时候叫张傻子。这事儿,连张大爷的儿子都不知道,更别说远在千里之外训练数据集的陌生人了。
总不能是鬼吧?这个念头冒出来,陈野自己都笑了。他一个顶尖大学计算机博士,写了七年算法,发了三篇顶会论文,能信这个?肯定是哪里出了bug,模型在生成的时候,把某些隐含特征错误地解码成了文字,赶巧了,就碰上张大爷这事儿了。对,肯定是巧合,小概率事件,让他撞上了。
他这么安慰自己,把那张照片存进文件夹,清空了缓存,准备接着调试模型。刚改了两行代码,外面传来脚步声,咚咚咚,有人敲门。陈野掐了烟,开门一看,是奶奶,拄着拐杖,站在门口,手里端着一碗西瓜,刚从井里捞出来,凉丝丝的,冒着汽。
“野娃,张大爷刚才从我门口过,高兴得嘴都合不上,说你给他修好了,还说……还说照片上多出字来了?”奶奶走进来,把西瓜放在柜台上,眼神有点奇怪,看着电脑屏幕,“真有这事儿啊?”
陈野赶紧把屏幕关上一点,笑着说:“奶,就是模型出了点小问题,巧合,巧合。”
奶奶哦了一声,拿起勺子挖了一块西瓜,递给他:“我倒觉得不是巧合。你爷爷当年开照相馆,就遇见过好几件邪乎事儿。有一回,一个女人来洗照片,洗出来她男人肩膀上搭着一只手,那时候她男人还活着呢,没过三个月,就出车祸走了。还有一回,一个学生拿毕业照来放大,洗出来后排多了一个人,大家都说那是几十年前掉进化粪池淹死的那个学生,长得一模一样。”
陈野啃着西瓜,冰凉的甜汁顺着喉咙往下流,听得后背又有点发毛。“奶,这都是老辈人瞎传的,哪能真信啊。”
“我也没说真信,就是跟你念叨念叨。”奶奶笑了笑,用拐杖指着外面,“你看这老巷,几百年了,什么故事没有啊。老照片这东西,最养灵性,每一张都装着人的念想,念想多了,说不定就真能出点啥事儿。”
奶奶坐了一会儿,拄着拐杖走了。陈野吃完西瓜,把碗放在一边,又盯着电脑发起呆来。他想起自己做这个模型的初衷,当时公司要做一个老照片修复APP,让他带队开发,要求是把模糊的人脸变清晰,给老照片自动上色,能赚用户的会员费。他那时候天天泡在实验室,改模型,调参数,就是想做一个最好的修复效果。
后来公司换了方向,要转去做大模型聊天机器人,这个项目就砍了。他偷偷把模型参数拷出来,就是觉得可惜,花了两年功夫,就这么扔了,太心疼。可现在,模型居然出了这种怪事,他心里反倒有点发怵了。
他想了想,决定再做个测试。他从自己手机里找了一张爷爷年轻时的照片,是翻拍存在手机里的,黑白的,有点模糊。他导进电脑,拖进模型,点击修复。这一次,结果出来,画面清晰了,爷爷穿着中山装,站在一棵树下,笑得很精神,什么多余的东西都没有。
他又试了一张,是邻居家老太太老伴的照片,昨天老太太路过,放在这儿让他有空修的。他导进去,修复完,也正常,老太太老伴缺了的一颗牙都显示出来了,没多字,没多图案。
“真就是巧合?”陈野松了口气,靠在椅背上,觉得自己可能太紧张了,失业加上换环境,有点神经过敏。他伸了个懒腰,准备关门,今天就这样吧,明天再说。刚要起身,手机响了,是张大爷的儿子打来的。
“陈野啊,我爸刚才回家,跟我讲了照片的事儿,他哭得饭都吃不下。我就是想问问,你能不能把那张修复好的照片发给我,我去做个大相框,挂在客厅里。我爸说了,这是狗蛋叔自己显灵了,要好好供起来。”
陈野心里动了一下,说:“行,我加你微信,发给你。对了,我问你个事儿,你爸跟你说过,他小时候叫张傻子吗?狗蛋叔叫狗蛋,这名字你以前听过吗?”
那边沉默了一下,说:“我也是今天才听说啊。我爸这辈子从来没跟我提过,说这是他小时候的丑名,只有狗蛋叔敢这么叫他。当年俩人一块儿逃荒,我爸饿得快死了,是狗蛋叔把最后一块窝窝头分给了他,俩人就结拜了,说以后一块儿发财,一块儿养老。谁知道后来打战,狗蛋叔就没回来……”
陈野挂了电话,心里那股异样又冒出来了。巧合?哪有这么巧的巧合?模型生成一行字,正好就是只有两个死去快八十年的人才知道的秘密?这概率,比买彩票中头奖还低吧。
他坐回椅子上,重新打开张大爷那张照片,把那行字截下来,放大。字是歪歪扭扭的,铅笔字,笔触很轻,就像是写的时候怕被别人看见。笔划里还带着一点纸的纹理,跟整张照片的质感完全融合在一起,不仔细看,根本发现不了,根本不像是AI乱生成的。
他想起奶奶说的话,“老照片这东西,最养灵性,每一张都装着人的念想。”他看着那行字,忽然觉得,这字好像就是狗蛋自己写的。张大爷想了他八十年,念想太沉了,沉得透过照片,透过几十年的时光,顺着这个AI模型,把话带回来了。
这个想法太离谱了,陈野甩了甩头,想把它甩掉,可它就像是生了根,在脑子里扎下来。他盯着模型的输入框,忽然想,要不然,我自己写句话试试?看看能不能传过去?
他咬了咬牙,把张大爷的照片重新导进去,然后在模型的“附加文本”框里,输入了一行字:“张大爷现在挺好的,今年八十八了,天天拎着鸟笼子遛弯,他一直想着你。”
输入完,他深吸一口气,点击了运行。屏幕上进度条一点点往前走,他的心也跟着一点点提起来,嗓子眼发紧,能听见自己的心跳声,咚咚咚,撞得胸腔疼。
几十秒后,修复好的照片跳了出来。
陈野一下子屏住了呼吸。
照片上,原来那行“俺叫狗蛋,张傻子别想俺”下面,又多了一行字,字迹一模一样,歪歪扭扭的:“俺知道,俺一直看着他呢。”
陈野“唰”地一下从椅子上站起来,椅子腿撞到身后的墙,发出“咚”的一声巨响。他盯着屏幕,手脚冰凉,浑身的汗毛都竖起来了。
风吹过窗户,吹得桌上的纸哗哗响,门口挂着的红牌子晃来晃去,影子投在墙上,像个活物一样动。
他花了两年时间训练出来的AI模型,从来没有添加过任何文本交互的功能,更别说能这样一问一答了。
可现在,屏幕上那两行字,清清楚楚,就像是有人隔着几十年的时光,坐在他对面,跟他聊天一样。
陈野咽了口唾沫,喉咙干得发疼。他忽然意识到,奶奶说对了,这个老铺子,这个模型,好像真的有点不一样。他不是开了个照相馆,他好像打开了一扇门,一扇连通过去和现在的门。
而门后面,不知道还有多少等着被说出来的故事,等着被圆上的梦。