本篇博客前面是冲刺日志,但最后也有一些非技术向的吐槽。因为之前对制谱器过于热情,后面还要做 ppt 和思政实践,我严格意义上只有一天完成立项了,不过无所谓。
9:22 AM
应该怎么开始呢?我的计划是看一下手势识别的 customize 方向,先按照相关度找一下现有工程吧。
9:46 AM
这种东西可能问 new bing 好一点,但大概还是有必要看一看 DDNet 的实现。
10:21 AM
不知道咋问 new bing 比较高效,呜呜,问不出想要的。
10:27 AM
至少知道我想的 customize 方向其实就是 transfer learning, 也找到一个强相关 demo:
https://codecraft.tv/courses/tensorflowjs/transfer-learning/transfer-learning-with-mobilenet/
竟然也是手势识别。
还有个名词是 fine-tuning.
10:46 AM
现在比较重要的是知道 DDNet 干的数据集到底是什么格式的,如果格式匹配的话做前端就方便,比较奇怪的话做 transfer learning 也很困难,就尽早转轻量化方向。
DDNet 的数据集是含深度信息的,自己基本上采集不到,转轻量化。
12:08 PM
吃饭回来力,Nemo 没有回我,先优化一下制谱器。
12:53 PM
写好播放速率修改,删除功能优化和网格对齐定位了!
2:21 PM
心脏又有点痛,可能昨天熬夜熬的。现在我们的理想已经退化到跑起来一个模型了,所以先试下吧!
5:01 PM
喜报,tensorflow 死都装不好,用 Arch 导致的。只能尝试散打了。但是先吃饭。
7:29 PM
喜报,我找半天没找到又新又有论文的 repo. Nemo 找了个今年五月份的,也是 IEEE 的 paper,特点是 open access 但访问特慢,sci-hub 和深圳高校图书馆也没有,等了 20 分钟加载出来了。
最后半小时发表一下我的看法吧
很显然今天的尝试非常失败,没能做到一天速通,现在的局势下我暂时也帮不上什么忙了,等数据跑出来罢。
AI 里确实很多计科特色的人因细节问题,说人因指的是那种因为有人堆雪山才导致的,并且完全可以通过某种努力避免的细节问题。例如,AI 的数据结构显然可以用一个 Type 来描述,这样对于一个标准的 AI project,标注好训练和测试的输入 Type 和输出 Type, 以及 config 的 Type, 就可以做到 clone 一个 repo 之后用统一的命令直接下载测试集、直接跑,就像 yarn install 和 yarn run 一样。并且既然都使用了 pytorch 或者 tensorflow 作为框架,那理论上就一定可以写一个统一的模型可视化程序,哪个 size 对应程序哪里都能对应出来。
现在的情况是,一部分的 repo 的数据集下载、训练和测试的方法有直观地给出,而一部分的 repo 把测试集绑定和一堆配置混在 arguments 里面让我们自己配,有可能代码里面还有神秘的问题导致跑不起来。大部分的 repo 并不具备生成详细的模型描述的能力,想知道每一层的输入可能要自己进入代码手动 log, 用某些库代替手动 log 或者摁看代码 find references, 因此也没有在显眼的地方显示需要多少显存才能训练,更不能给定资源自动计算某个参数的最大值。
一句话总结,就是目前的 AI 编程现状从模块化的角度来看很 naïve.
关于立项的选择,我也觉得不是很理想,但主要我行动力实在太差了。关于现在的结果我不认为任何人有「做错」什么,毕竟我们只是某种微粒机器,正如电脑不会做错什么,我们也不会。但在不理想之前主要是荒诞,就是事实上我在大一已经做了 5 个工作量能够过大一立项的项目了:
核酸鸟,包含 QQ 机器人、由 YOLO v7 改装的 python 微服务、golang 数据计算服务器以及基于 rtsp 协议和 ffmpeg 的 B 站直播流采集器。
义工联官网,包含中型体量的 react 前端和 golang 后端。
基于 Martin-Löf 类型论的类型检查器,历时一个月用 idris2 语言写成。这个东西看起来工作量小,只有 300 多行,但实际上是这五个里面写的最久的。
个人博客,包含一个 golang 写的把 markdown 转换成语义 json 上传到服务器的小工具、一个 lua 和 shell 写的调用这个小工具的 nvim 插件、一个维护语义 json 的 CRUD 的简单服务器和一个动态渲染的 flutter 博客前端。
bInary 及其制谱器,包含一个 Unity 游戏前端、一个 golang 后端和一个没那么 trivial 的 flutter 的制谱器前端。
同时中间还有不少小项目,例如在任务栏显示学分绩排名和电池预估时间的小工具、nvim 和 zathura PDF 阅读器交互的插件,还有一些写了一部分流产的工程,例如一个用 rust 写的待办管理命令行前端和一个半成品 flutter 待办管理 GUI 前端。把这些项目合起来算作第 6 个工作量超过大一立项的项目应该不过分。
这里没有算上实验室的项目,我写了完整的 AI 分布式训练调度器后端、计费系统和套餐管理后端和前端,算一个大一立项应该不过分。
但是真正的那个大一立项我却有心无力。如果要问为什么,我可能会回答,因为有一个团队我不能随便选一个作为我的最终项目。诚然有「大学团队项目就是一加一小于一」这种说法,我一直不以为然,但现在我发现在号召力和效率难以共存的前提下(想想低效的代名词是谁),或许这确实是大部分情况的真理。
我不是在说有一个团队是错的,正如计算机集群不会做「错」事情,一个大学的团队也不会,只是单纯会受到一些客观上的影响而已。整件事情可能看上去很讽刺,但实际上就和太阳从东边升起一样自然。