一位航模爱好者把自制的涡轮遥控飞机丢在了沙漠里。他跑了一遍航测网格,拿回大约3000张高分辨率图像,然后在Reddit上发帖求助:有没有人知道怎么快速写个计算机视觉脚本,把可疑目标标出来,方便人工复核。飞机是他自己做的,能找到就太好了。
帖子里还附了一条提醒:其中一张图被重命名为“0000”,那是一个误报——左上角有一道阴影,看起来和飞机一模一样,他本人已经实地去确认过。3000张几乎雷同的沙漠切片,一架手工碳纤维机身藏在某一帧里,外加一个连人眼都骗过的已知诱饵。这同时是搜索问题、数据问题和工具问题。
Voxel51的开发者倡导者看到这个帖子后,没有写一个一次性的OpenCV脚本导出CSV和拼图,而是把整个流程做成了可查询、可复用、可分享的数据集。他的判断是:数据集才是唯一事实来源,每一次计算都写回数据集,App就是复核界面。
具体来说,三块能力撑起了这个项目:FiftyOne Brain负责嵌入与唯一性,Hugging Face集成负责分发,插件系统负责把检测器本身打包出去。加载航测图只需一次调用,Brain把原始像素变成可搜索、可视化的东西——CLIP嵌入、相似度索引,以及一张可以在App里套索选择的二维UMAP图。因为图像、元数据、嵌入、索引都挂在数据集上,整个数据集可以发布到Hugging Face Hub,别人一行代码就能拉回来,不用配置,也不用重算。
检测器的思路并不复杂。沙漠背景几乎是均匀的中灰色,画面里唯一的深色特征是低矮灌木,所以单靠色调分不开飞机和灌木。检测器改为对每个深色斑块打形状和表面特征的分:碳纤维机身是细长的、填满自己的边界框、内部平滑且方差低、实心且凸;植被一条都不符合。
关键的一步是把它包成FiftyOne插件,而不是留成一个脚本。插件把逻辑暴露为算子,从Python SDK和App界面运行的结果完全一致,可以委派到后台执行,任何人一条命令就能安装。插件带两个算子:preview_dark_mask是校准助手,把阈值化后的深色掩码以热力图叠加写回,方便在App里用眼睛调阈值再跑全量;find_plane是检测器,写出plane_candidates检测字段,置信度记在confidence里,并附带rect_aspect、interior_std等逐检测属性,同时给每张图一个max_plane_candidates_score用于排序。
从SDK调用就是取算子再执行,参数包括dark_threshold=105、min_score=0.5、max_per_image=5。同一个算子、同一套表单输入,在App里一个反引号键就能调出,每个参数都渲染成带标签和说明的字段,还有一个复选框可以把6500张图的全量运行委派到后台。这套界面不是手写的,是插件系统根据算子的输入schema生成的。代码与界面之间的这种对等,在他看来是构建在FiftyOne之上最被低估的一点。
分数落到数据集上之后,复核就变成了查询。保存的视图持久化在数据集上,会出现在App的Saved Views菜单里,社区成员打开数据就有一组现成的入口,每个入口从不同角度切入搜索:
- candidates_by_score——所有被标记的样本,按最高分排序
- top_shortlist——前100个候选,最快的第一遍
- high_confidence——只保留强检测,弱框丢弃
- carbon_like——最像机身的:细长且表面平滑
- best_geometry——纯形状最强,不看表面平滑度
- review_band——中等分数的“也许”堆,避免漏掉边缘案例
- thermal_frames——小尺寸热成像/红外帧,与RGB分开复核
- unusual_candidates——按Brain唯一性排序,飞机在一片雷同沙漠里本身就是异常
更锋利的一招是用to_patches把每个候选炸成独立裁剪图,再对裁剪图而不是整帧跑Brain。每个嵌入只描述那个斑块,长得像的会紧密聚在一起:找到一张真斑块,相似度搜索就能把其余的拉出来;按唯一性排序,真正的机身会浮在重复的灌木和阴影斑块之上。视图构建和斑块嵌入被合进一个publish_views.py脚本,重算全部内容并把增强后的数据集推回Hub。有一个坑值得提醒:compute_embeddings会启动多进程DataLoader,脚本主体必须放进由if name == "main"保护的main()里,否则派生出的工作进程会重新导入并重跑整个流程。
剥掉沙漠和无人机,这个项目真正展示的是插件系统给开发者解锁的东西:写一次,到处运行,一份算子定义既能在notebook里从SDK跑,也能在脚本里跑,还能作为点击面板在App里跑,界面由输入schema生成;不用重写就能扩缩,同一个算子既能在小视图上内联执行,也能只靠一个开关变成后台任务跑过数千张全分辨率图;天生可分享,一条下载命令就能让别人跑上完全相同的检测器,不用抄代码也不用手工对齐环境;与平台其余部分可组合,插件输出就是普通的FiftyOne标签,立刻能和视图、Brain、相似度搜索、Hub配合。
工具完成了它的活:把3000张图的干草堆压缩成几份简短排序的清单,人几分钟就能过一遍;那个臭名昭著的“0000”阴影诱饵也被如实保留;整个东西作为数据集和插件发布,任何人都能拉下来重跑。飞机能不能找到,现在取决于有没有人愿意看短名单,而不是靠耐力硬扛。如果飞机真被找到,某个Redditor欠互联网五十块钱。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.