事故来得猝不及防。
有天,女友问我:“你还记得有一年去海边玩的那个夜晚吗?我们一起牵着手,吹着海⻛……”
“记得,还拍了照呢,等我找找。”半个小时过去了,任凭我怎么翻手机相册,也没找到那张照片。
“算了,找不到就别找了。”她这句话让流动的空气瞬间凝固。原本甜蜜腻歪的“故事”就这样,演变成一场“事故”。
我只有发散思路,一心想着补救。
我(以及大多数人)遇到的问题
手机上照片太多,自带相册的分类、搜索功能又过于简单,不够智能。
我的脑洞
就像《钢铁侠》里呈现的那般,主⻆利用 AI 助手“贾维斯”搜索资料并瞬间得到结果。
AI 助手“贾维斯”丨GIPHY
冷静后的想法
这两年,高高在上的 AI“下凡”了,人们拿画画 AI 批量生成二次元形象,沉迷和 ChatGPT 对话,甚至还怀疑它是不是真有意识……既然 AI 如此强大,检索个相册应该不难吧?
一番搜索后,我惊奇地发现竟没人做过这类应用。要么在互联网哭嚎诉苦“在线等”,要么……干脆自己写一个 app?
AI 那么行,有啥能帮上忙?
在苹果的 iOS 相册里,我们有这么一张照片:
示例照片“一条穿⻩色衣服的狗”丨编辑提供
如果直接搜“一条穿⻩色衣服的狗”,一般会显示“无结果”,你只能在“狗”这个大类里一张张滑,直到看到目标;要么只能努力回想拍摄照片的时间、地点,然后以此为线索,缩小范围,再一张张滑……
我现在的诉求很简单,搜“一条穿⻩色衣服的狗”等有具体细节的文字描述,系统能瞬间帮我找到图片。
不妨一想,Midjourney、DALL·E 等画画 AI 仅凭用户的几个提示词,就能生成不可思议的画作,它们是如何接收并“理解”人们指定啥的呢?
这要归功于 OpenAI 2021 年年初推出的一个叫 CLIP 的模型。(对,就是发布 ChatGPT 和 DALL·E 2 的那家公司。)
用 DALL·E 2 生成的 AI 画作丨维基百科
它能实现的功能很关键:人们给 CLIP 任何一张照片,它返回对应的文本描述,反过来,你给它一段具体的文本描述,CLIP 也能给你返回一张对应的照片。请注意,这里 CLIP 返回的文本和照片都是相关性最高的。
CLIP 将 4 亿组从互联网上收集的“文本-图片对”抓来训练,从而实现文本和图片的映射(mapping)。但 4 亿对哪里够!你永远不知道人类会往 AI 里输入什么奇怪的东⻄!所以这里就不得不提 CLIP 的另一强大之处了,它会模仿人的“推理”能力,对从没⻅过的输入样本分类。
CLIP 的训练过程图解丨OpenAI
举个例子,就算 CLIP 并不知道斑⻢⻓啥样,但它会依靠之前所学,拆解这个没⻅过的物种,比如“外观像⻢” + “毛发如老⻁” + “颜色似熊猫”,然后在海量图片中推测出斑⻢。
以上能力让 CLIP 非常会找图,具体到相册找图场景里,CLIP 在收到文字描述后,就会把关联度最高的照片推到面前,这非常符合我们找照片的逻辑:先想到具体细节,而非确切的时间、地点。
到时候我再搜索“和女朋友牵手的夜晚”,岂不是非常轻松?
说干就干,我在 Linux 上先做了试验,传了七十多张手机上的照片,通过 CLIP 进行批处理……果然,在英文搜索后发现得到的结果排序中,文本和图像距离更短的,确实就是相关度更高的,且丝滑程度堪比“热刀切⻩油”,我无比自信地认为这在手机上也能有类似效果。
搜图过程演示
如果将 CLIP 封装成一个 app,就能让更多人用上这个更智能,也更符合直觉的工具了,甚至,直接用它接管手机相册。
人人都怕相册隐私被偷窥
开发一款 app 的过程有点枯燥,我更想和大家讲讲产品设计的“取舍”——我最终让它不联网运行,只在手机本地计算。
实际上,很多第三方相册提供的服务都是联网的,这样做有很多好处,app 得以压缩体积,安装包可以做到十几兆或者几十兆,对用户友好;还能在免费提供基础功能的同时,向有进阶需求的用户提供“内购解锁”选项……
但联网会多多少少让用户感觉他们的隐私不安全。我自己就是个“隐私洁癖”,注册账号时尽量用假名,不暴露自己的信息。
大数据盯着你呢丨Unsplash
当我和其他团队聊天,他们认为像我这类用户在国内只是少数,主动选择“离线”的 app 也只能吸引和服务一小部分受众。对此我非常不认同,如果能够保护隐私,谁愿意暴露信息给别人? 这一定不是小众用户的需求,大部分人不是不在乎隐私,而是没得选择,我希望市面上能有不暴露隐私的选择。
还有一点,如果 app 做成联网,它会在用户开启联网服务时自动弹窗。我讨厌一切弹窗,坚定地把它做成离线 app。
要把 CLIP 做成离线 app,并不是直接在手机上调用这个模型的 API 就可以了。因为存储格式不同,我用 Swift 语言把它重写了一遍。
做一个工具类 app,两三百兆的占用空间基本上是极限,所以我用的是精简后的 CLIP 模型。以后如果条件允许,我会尝试用 2.5G 的模型,能够同时支持 90 种语言的输入。
就这样一番捣鼓,大功告成。当用户打开后,app 会加载相册内容并构建索引,加载时间取决于手机处理器以及照片数量。根据我的测试,在我的 iPhone 12 mini 上,构建索引的速度大概是 2000 张 / 分钟,在最新的 iPhone 上,30000 张照片 3 分多钟就能构建完成。
接着,你就可以愉快地搜图了!例如这样搜索小猫:
这样搜索瓶子:
如果你想提升搜索效果,最好用有细节的描述,可以是颜色,可以是具体的某个物品,也可以是特色鲜明的时间。
你也可以凭“和女朋友牵手的夜晚”、“头上有朵花的狗”等等好玩的描述,找到目标照片。
至于搜索速度,你感受不到什么延迟。
AI 工具之间在连接,人和 AI 也是
也有一些朋友反馈搜“奥特曼”、“史努比”这些形象时,往往得不到想要的结果,因为 CLIP 未必学习到了这些专有名词,同时我选取的模型也是精简版。
图源:Tenor
你可以换个思路,搜索“身穿蓝色和红色相间皮套的人”,这句话把奥特曼换成了一个具体的描述。你搜“黑色耳朵的狗”,没准就能找到“史努比”。
如果模型足够强大,并且能够不断更新,你未来没准就能搜到你相册里的“悲伤⻘蛙”。
图源:Tenor
我了解到,很多大科技公司内部拿 CLIP 当服务器上数据库中的图片、文字检索工具,但如果想把它装到手机上,还是不够直接,手机不是电脑,两者之间差别很明显。
当然,我认为这次开发能够成功,如今手机软硬件的强大是前提之一。在 iOS 16 上,苹果就对 Core ML 的性能做了优化,让跑 CLIP 模型变得更容易了。
“这次开发能够成功,如今手机软硬件的强大是前提之一”丨Unsplash
加上最近一两年,iPhone 的性能也有不小的提升,特别是普通消费者感知不强的 AI 计算能力,这些都让 app 只在本地计算成为可能。
榨干 CLIP 能力的下一步,也许就是用文字来搜索视频。其实,视频搜索和图像搜索没有本质区别,视频就是图像的连续帧,可以通过抽帧来进行搜索。
不过,假如 1 个视频抽出 10 个关键帧,那么,100 个视频就有 1000 个关键帧。这样下来,搜索 100 个视频的结果,会比搜 100 个图片的结果慢 10 倍……
另外,按照关键帧来搜索视频,可能得到的结果并不代表视频的含义,比如“A 打了 B 一巴掌”,也许这个动作只有一两帧那么短,并且抽帧过程中没有被收录,那就相当是无效搜索。
赏巴掌名场面来了丨GIPHY
所以,如果要做视频方面的搜索,纯截取帧这个方法就是简单粗暴,换作我来做的话,会倾向于做帧之间连续性的语义理解。
我去年 12 月才开始接触 Swift 开发,用一个多月时间完成了 app 的开发、调试、上线,得到了很多人的关注,很有成就感。
最近,我又有了一个新想法,就是点开搜索结果的一张照片,然后可以上划用这张照片再做进一步搜索,有点像 Google 的“以图搜图”。
很多人会替我担心,说这种用户“刚需”app 迟早会被苹果整合进 iOS 里,像此前的抠图、 OCR 识别 app,最后苹果都亲自“下场”,做成了系统级功能。我觉得利用 CLIP 更智能地搜图,用不了多久苹果也会自己做。
虽然从目前来看,苹果官方还是会保持谨慎,因为多语言模型还有“种族歧视”之类的遗留问题,比如当人们搜索“黑猩猩”时可能会出来黑人照片等等。
总结来说,我认为这款 app 的成功离不开三个方面:
第一,市面上已经有不少 AI 工具,在掌握相关原理的同时,我还积极学了 Swift 语言。多种技术的混合,是它成型的第一步;
第二是 iOS 16 的发布,还有这两年手机在 AI 方面的性能提升,为类似 CLIP 这样的模型在手机上运行带来了可能性;
第三,大胆尝试才能验证可行性。在这之前,并没有人尝试在手机上跑,并证明它的实用性,我做到了。这有点像ChatGPT,它验证了大模型是可以疯狂“怼”到人类理想中可能的通用人工智能(AGI)的水平,但是从理论到最终实现,需要有人验证可行性,OpenAI 就是那个大胆投入的团队。
人骑在自行⻋上,平稳的向前运动出现了,这在今天的我们看来,并不稀奇。但在骑手和自行⻋没有发生互动之前,啥都没有发生。
当 CLIP 接上艺术生成器后,它就能画画了,AI 工具之间的互动,人和 AI 工具之间的互动,可能也正在酝酿出下一场向前运动。
故事的最后,当我再和女友聊到往事时,总能第一时间找到那些老照片:
开发者供图
我希望有更多人在这款 app 的帮助下,解决类似难题。只需要最朴实的语言,便能找到相册中那些珍贵时刻。
作者:碎瓜、洛丁
编辑:biu
一个征稿启事
领取专属 10元无门槛券
私享最新 技术干货