

回忆录
CVPR 的补充材料交完之后,我总算有了一些空闲,于是开始回忆自己的大二。和大一相比,这一年的主线其实清楚了很多,大部分时间无非是在 RM 和科研之间来回切换,生活范围也越来越小,不过对我后来几年的发展来说,大二又确实是相当关键的一年。
前路茫茫#
进入大二时,我已经和刚入学时的状态差了很多。至少在技术上,我掌握了几种常用的编程语言,完整参与过 RM 这样中等规模的工程项目,也通过几本教材和大约五十篇论文,对机器学习和深度学习有了一个很初步的认识。这些东西放在现在自然算不上多少,不过对当时的我来说,已经足够支撑我开始考虑下一步要做什么。
WJH 学长在大一下把我拉进了绿群,我在那里认识了不少已经开始科研或者准备保研的学长。水群和读论文进行了一段时间之后,我逐渐确认自己确实喜欢科研,或者更准确地说,我很喜欢发现一个问题,然后想办法把它解决并整理成一套完整工作的过程。当时给自己定下的目标相当直接:本科阶段做出论文,然后申请清北华五级别的 PhD 项目。至于这个目标有多难、具体要怎么实现,那时其实并没有特别清晰的认识。
在问过几位学长之后,我决定去联系周三平老师,把这里作为自己正式科研的起点。当时我其实也对计算机图形学很感兴趣,还抽时间看过 Games101,不过人工智能学院里相关资源比较有限,我对计算机学院的老师又不够了解,不可能把每一个感兴趣的方向都亲自试一遍,最后还是放弃了图形学。
根据学长的推荐,我从人机所挑了几位看起来比较合适的老师发邮件。周老师很快回复了我,另一位老师则完全没有回信。后来有同学通过班主任介绍进了后者的课题组,日常工作却主要是标注数据,这让我多少有些庆幸当初没有收到回复。
说实话,我那时一直不太确定自己是否已经有资格联系老师做「正式科研」,所以拖到奖学金排名公布,觉得自己的成绩至少还拿得出手之后,才在十月初把邮件发出去。周老师随后约我面谈,简单聊了聊感兴趣的方向。他告诉我组里暂时不做我更感兴趣的图像生成,但可以让我和两位大三学长一起尝试医学影像半监督学习。这个方向对我谈不上特别有吸引力,不过毕竟是第一次真正做研究,我自然还是接受了。之后老师发来一篇论文,让我们三个人先一起阅读和讨论。
RM 组长#
大一结束之后,我接任了视觉组组长,也需要负责下一届的招新和培训。比赛与技术相关的细节已经写在 RM 回忆录里,这里主要记录几位当时认识的人,以及我第一次带组时做得还算不错和明显不够好的地方。
以前的培训更接近讲一些零散知识点,再发任务让大家自己完成。我不太喜欢这种方式,于是重新录了一套相对连贯的视频课程,把基础知识和实际项目放在一起讲,希望新人至少能知道学到的东西最后会用在哪里。与此同时,我照例活跃在新生群里,加了不少新生好友,和几位后来在他们年级颇有影响力的同学也聊过不少,当然其中一个重要目的就是宣传 RM,顺便给视觉组招人。
这一届考核被我设计得比较温和,最后留下的人很多。好处是愿意学的人基本都有机会继续,问题则是组里根本没有足够多持续且有意义的任务分给所有人,一部分成员很快就失去了热情。现在来看,这显然是我第一次带组时没有考虑清楚的地方。
其中我印象最深的是同级的 LXW 和下一届的 QZZ。QZZ 大概是我在西交见过科研天赋最好的学弟,大一下便加入课题组并参与了多个项目,学东西也相当快。不过他在主动争取项目主导权这件事上一直比较保守,直到现在似乎都还没有完全建立自己的研究主线。在西交做出一些工作并不算特别难,真正把工作变成发表则往往需要自己不断推动,如果缺少这种主动性,再好的天赋也很容易被消耗掉。
LXW 则是一个工程能力不错、确实喜欢技术,但对学术没有太多欲望的朋友。我推荐他来参加 RM,主要是希望他可以积累技术,也顺便获得一些比赛加分。他一直是我认为比较可靠的朋友,不过相处时也有一些让我不舒服的地方,比如偶尔不打招呼就用我的电脑或者吃我的零食。事情本身不大,我也没有因此和他发生什么严重矛盾,只是人与人之间的边界感确实会影响关系。
我带组时也很少摆出强势领导者的姿态,更多时候是和大家商量着推进。这种风格让组里的氛围比较轻松,但也会让一部分人觉得任务做不做似乎都没有关系。最终大部分计划还是正常完成了,只是无论成员积极性还是技术表现,都没有完全达到我最初的预期。这件事不能全部归因于其他人,我作为组长当然也有责任。
科研之二#
大二除了课程之外,绝大多数时间都被 RM 和科研占据。我的现实社交也在这时明显减少,平时基本只和乐小姐一起活动,其他交流大多发生在绿群。因为我本来就习惯用电脑完成所有工作,这种以线上为主的社交方式倒也没有让我觉得不适应。
周老师发给我的第一篇论文是 MCF,全称 Mutual Correction Framework for Semi-Supervised Medical Image Segmentation。虽然此前已经做过不少项目,但这确实是我第一次按照论文研究的方式开展工作。收到论文后的第二天,我便下载了数据集和代码,开始复现实验,顺便理解它为什么这样设计。
MCF 通过两个模型之间的伪标签差异进行半监督训练,其中一个核心问题是,两个模型受到相似损失函数的约束之后很容易逐渐趋同。一旦两边给出的预测越来越像,协同训练能够额外提供的信息就会减少,最后可能只剩下两个几乎一样的模型互相教对方。
我最初想到的办法是加入 Mean Teacher。在保留双模型结构的基础上,我又给两边各自增加一个只负责生成伪标签的教师模型。实验几乎第一次就得到了不错的结果,指标也超过了当时的 SOTA。不过这个方案本质上只是把两套已有结构叠在一起,虽然可以解释为 Mean Teacher 缓解了两个模型过快趋同的问题,但创新性显然不足,很难单独支撑一篇顶会论文。
之后有一次组会,我突然想到,是否可以不用更换模型结构或损失函数,而是从训练状态本身制造两个模型之间的差异。MCF 会在训练过程中比较两个模型在有监督数据上的性能,再让表现更好的模型充当教师、生成伪标签。问题在于,如果两个模型本身就有明显的性能差异,较弱的一方可能永远没有机会成为教师,也就无法真正形成相互学习。
我最后选择用训练轮次控制这种差异:两个模型交替更新,让它们始终处在不同的训练阶段,再随着性能变化切换教师与学生的角色。这个框架后来被命名为 Progressive Mean Teacher。基础代码完成后,我跑了第一次完整实验,结果在公开数据集上超过当时最优方法两个点。那时距离我正式开始科研只有两周左右,距离 CVPR 截稿则还剩四周,我自然立刻开始幻想是不是可以直接投稿。
和老师沟通之后,我们确实决定赶一次 CVPR。第一版论文由我来写,结构基本照着 MCF,开头先指出它有什么问题,再给出我们的改进,最后总结三个贡献点。老师很快否决了这版写法,因为整篇文章看起来都只是在针对 MCF 修补问题,既过于攻击已有方法,也没有把自己的研究问题讲清楚。
老师随后教我从上往下重新组织故事:先定义领域中普遍存在的问题,介绍已有方法为什么不能解决,再让我们的设计作为一个自然答案出现。论文不需要如实记录研究者最开始如何想到方法,而是要把最后成立的逻辑整理清楚。初次接触时我觉得这多少有些「虚构」研究过程,但后来写的论文越来越多,也就明白研究过程与论文叙事本来就是两件事。
接下来几周我集中补实验,重新跑了许多主流方法,对齐 batch size 和数据划分,也把 MCF 中的几个 trick 适配进我们的框架,最后按时投出了 CVPR。结果是 311,毫无悬念地被拒。
审稿人的主要质疑有两类。一类认为我们和 MCF 的区别不够大,另一类则不相信实验结果。我为了公平比较,统一使用了 MCF 的 K 折划分重新测试各个方法,而不少论文报告的却是单次划分结果。有些方法在特定划分上可以明显超过原文,换成 K 折之后性能又会掉得很厉害,最终导致我们认真重测的结果看起来反而像是在故意把 baseline 做低。除此之外,论文里还残留了错误的模型名称,部分符号也没有统一。现在看这篇初稿确实有不少低级问题,被拒并不冤枉。
为 ECCV 重投时,我不再坚持全部使用自己的复现结果,而是尽可能采用原论文报告的数据;从 MCF 借来的两个辅助模块也被重新设计,避免整篇工作看起来只是它的加强版。方法本身则重新聚焦在 Progressive 机制上,用动态训练状态解释模型稳定性和伪标签可信度之间的关系。论文的逻辑和文字经过了多轮修改,图表最开始也由我负责,不过我当时的画图水平实在很差,后面的主要结构图还是由老师找来的师兄师姐帮忙完成。最终我们按时投出了 ECCV。
在等待审稿的同时,我又开始推进下一项工作。相比第一篇,它只是把一个合理但相当普通的技巧包装成完整方法,我自己对它也没有太强的兴趣。实验和代码仍然在做,但更多是因为项目已经开始,总不能直接扔在那里。空下来的时间里,我读了许多其他领域的论文,包括多模态、具身智能、强化学习和 GS,方向相当杂,本质上也是在寻找医学影像之外更愿意长期做的东西。
没有正式发表之前,我对申请外校实习始终没什么底气,只能等待 ECCV 的结果。老师安慰我说即使 ECCV 仍然不中,之后也可以转投 PR,工作总不会完全浪费。于是我给自己定了一个比较现实的目标:最晚在大三开始之前,至少完成一篇真正由自己主导的论文。
平淡生活#
大二的生活其实相当平淡。乐小姐在大一下完成专业分流,靠着她自己的努力,也多少在我的鼓励之下,去了更喜欢的口腔医学专业。她之后主要在雁塔校区上课,从兴庆校区过去坐车至少需要二十分钟,算是一种同城异地。不过雁塔的位置比兴庆好得多,旁边就是小寨,吃饭和逛街都很方便,甚至还有我一直很喜欢的麦当劳,这在兴庆校区附近已经算是难得的条件。
有时我打车去找她,有时则是她来兴庆。我们经常去吃海底捞,也很喜欢兴庆东南门外的一家齐齐哈尔烤肉,可惜那家店后来倒闭了,直到现在我都觉得相当遗憾。那段时间我的经济状况还不错,恋爱也很稳定,课程没有太大压力,CVPR 更是还没有出结果,所以我对第一次投稿抱着一种缺乏依据的乐观,觉得很多事情似乎都在正常向前推进。
因为经常有新生问我选课、专业方向和学习规划,我又产生了编写「西安交大生存指南」的想法。我不打算只整理学校已有的信息,而是希望把自己对科研、竞赛和自学路径的判断也写进去,也就是同时包含干货和大量私货。第一版很快就写了出来。现在看其中不少观点当然还很幼稚,不过也有一些建议直到现在仍然适用。
同一时期,我还试图写一份 AI 自学指南,然而这个坑直到现在都没有填完。我当时甚至提前留好了前言的位置,准备等 ECCV 有一个好结果之后再认真写,仿佛有了顶会论文,自己才更有资格对别人讲这些内容。
大二下生活#
寒假期间我难得什么都没有做,大概也是大学里最后一次可以毫无负担地休息那么久。返校之后,生活很快又恢复成白天待在地下室、看论文、改代码和跑实验的状态。QZZ 在我的怂恿下也开始尝试科研,LXW 则帮忙写了一部分 RM 这边的项目代码。后者提交的程序结构在我看来堪称屎山续写,不过至少确实可以运行,并且效果也不错,也不能说毫无贡献。
绿群在这段时间成立了 AI 学组,由 YXJ 负责。对于这件事我一直有些不解,整个年级流传的 AI 相关资料大概有百分之八十都是我写的,而 YXJ 此前几乎没有贡献,不知道为什么最后很自然地成了负责人。虽然我并不特别在意这个名义,也不会因为没有职位就停止写东西,但对其中的选择逻辑确实谈不上理解。
最开始我还期待同年级的人聚在一起之后,可以共同做出一些新的东西,实际响应却相当有限。反而是下一届学弟学妹里出现了不少有意思的人,交流起来也更积极。除此之外,这学期的课程并不重,RM 比赛相关的内容也都记录在另一篇回忆录中,日常没有太多值得单独写的事情。我继续完善「西安交大生存指南」,同时开始搭建个人博客,准备把此前写过的资料和踩过的坑都整理到一个固定的地方。
就在这期间,ECCV 开分了:443。
我最初只是希望评分不要像 CVPR 那样难看,看到三个审稿人全部给出正面评价时确实愣了一会儿。审稿意见主要集中在文字不够清楚、实验细节需要补充,没有人继续质疑方法本身是否成立。和上一次的 311 相比,这个结果自然已经好得超出预期。
我当天便开始起草 rebuttal,把所有问题逐条整理出来,希望在稳住两个四分的同时,再把三分审稿人往上推一点。第二天和老师开会之后,我们也确定了这个策略。老师另外找了两位高年级师兄师姐帮忙修改结构图,他们在一天之内便把我原来相当混乱的图重新画了一遍。我的画图水平当时确实一塌糊涂,只能负责更擅长的文字修改,包括删减冗余、统一术语,以及把实验细节解释得更清楚。rebuttal 提交完成时,期末复习周也正好开始。
原本觉得 ECCV 大概也不会中时,我反而没有那么焦虑;拿到 443 之后,希望突然变得很大,整个人便开始反复担心会不会出现意外。我每天刷知乎和投稿群,研究往年分数分布,看有多少人分数比我高,又有多少 443 最后仍然被拒。我会怀疑是不是自己的领域整体给分偏高,审稿人互相看到意见后会不会降低分数,或者 meta reviewer 恰好不喜欢这项工作。现在看这些猜测大多没有意义,但在结果出来之前,每一种都显得很有可能。
我甚至和朋友打赌,如果中稿就认真设计并拍二十张女装照。与其说是什么仪式,不如说当时总想给这种漫长等待加一点可以控制的事情。也是在等待结果的过程中,我继续完善了《西安交大生存指南》,把大一大二积累的经验和判断都写了进去。即使那时还没有正式发表,我也已经觉得这些自己实际踩过的坑值得留下。
轻舟已过万重山#
ECCV 原定在凌晨公布结果,我本来已经准备熬夜等。结果傍晚六七点左右,投稿群里突然有人说结果提前放出,我立刻打开网站,输入论文编号 8535,却什么都没有搜到。
那一瞬间我以为论文出了什么问题,随后才发现是自己记错了编号。换成正确编号重新检索之后,页面上出现了一个「1」,也就是正式录用。我在椅子上坐了很久,然后转头和旁边的 GYT 说:「我中稿了。」
我没有真的哭出来,只是说话时有些哽咽。之后便开始给老师和朋友报喜,发了一条说说,也终于可以把之前给博客留下的前言补上。我在 QQ 里写了一句「轻舟已过万重山」,这也是本节标题的来源。
当然,这个结果并没有完全达到我最初的幻想。我原本打算在大二投出两篇论文,上下学期各一篇,再拿着成果申请实习,实际上花了整整一年才真正发表一篇。不过无论过程如何,这篇由我主导完成的工作最终还是中了,也让我此前给自己定下的目标没有落空。
绿群往事#
绿群是我从大一下便开始参与的保研交流群。由于很早就加入 RM,我经常通宵,也习惯把所有事情都放在电脑上完成,平时很少待在寝室,和舍友之间没有太多共同活动。相比之下,我在网上认识的朋友反而更多,其中大部分比我高一两届,也有少数同龄人。
我会在群里发女装照,也一直保留着「喵」的口癖,同时还经常分享学习资料和科研相关的想法,因此在群里多少有些知名度。除了单纯水群之外,我这一年还给群里做了几个真正被很多人使用的工具。
第一个是保研定位表。每年都有大量同学把自己的学校、排名、竞赛和科研经历发到群里,询问大概可以去什么学校。这种定位通常不可能特别准确,主要作用还是缓解焦虑,但群消息很多,大部分人的提问很快就会被刷走。于是我用腾讯文档做了一个可以匿名填写的表格,让大家提交自己的基本情况,再由其他群友给出定位建议。
表格发布之后传播得很快,前后有数千人使用,其他保研群也开始模仿类似的形式。后来一些中介开始爬取和滥用其中的数据,甚至反过来举报文件,我只能关闭公开权限并尝试迁移到 Google 表格。Google 的访问门槛又让填写人数明显下降,最后这个项目便逐渐没有那么活跃。虽然持续时间不算很长,但它是我第一次做出被自己圈子之外大量使用的东西。
之后我又参考 ccfddl 做了一个夏令营信息收录站。第一版基本是通宵一个晚上写出来的,后面再结合 GitHub Actions 实现自动同步。使用者只需要提交一个 issue,审核之后便可以更新站内的夏令营信息。这个工具为几千名保研生持续提供过信息,仓库也获得了上百个 star。我后来因此成为绿群内部的 admin 和 GitHub owner,开始负责更多公告与项目维护,也算是从普通群友变成了实际参与维护的人。
上海实习#
暑假前半段,我继续跟着 RM 队伍去深圳参加全国赛,最后又一次进入十六强。这个成绩不算惊喜,但整体也可以接受,一个月很快便在准备和比赛中过去了。
ECCV 确认录用之后,我开始认真寻找暑期实习。经过绿群里几位前辈的建议,再加上自己此前长期关注,我首先考虑的就是上海人工智能实验室。大一时我已经听说过这里,科研资源、待遇和整体环境在当时看来都非常有吸引力。具体选择方向时,我主要关注具身智能和多模态。多模态是此前阅读最多的领域,但具身智能同时包含模型、系统和实际实验,和我在 RM 中积累的工程经验也更接近,因此最后反而更吸引我。
我向 OpenRobotLab 投了简历,很快便收到面试。流程相当简单,主要是介绍过去做过的项目、对科研的理解以及已经投稿的论文,没有考公式,也没有让我现场写代码。大概那篇 ECCV 已经足以证明一些基础能力,所以对方没有在这些环节设置太多障碍。
RM 比赛结束后,我便去了上海,租好房子开始实习。一个人换城市、租房和上班并没有带来太多不适,我很快就进入了实验室的工作节奏。每天需要背着大学时买的外星人笔记本上下班,那台电脑不但很重,电池也基本报废,离开电源甚至撑不过一个小时。设备虽然不太方便,工作推进得倒还算顺利:我复现了一篇基于 prompt 但没有开源代码的论文,开始熟悉 Isaac Sim,也搭起了自己的第一个具身智能实验。
实习期间认识了不少人,伦哥是最直接负责带我的 mentor,lab 里的豪哥、洋哥、haifeng 和 xinyi 等人也都提供过很多帮助。恰好绿群里还有不少同龄人在上海线下实习,我们组织了几次聚餐。对我来说,这种把长期认识的网友突然变成现实朋友的经历并不算多,还挺有意思。
至于上海生活,最直接的感受就是吃饭实在太贵。西安无论食堂还是校外餐馆都相对便宜,在北京时又经常是和家里人一起吃,直到自己在上海每天为工作餐付钱,才真正感受到一顿饭三十元起步是什么概念。不过这并没有让我减少多少加班时间,大多数时候还是会留在实验室多跑几次实验,或者继续 debug 到比较晚。
线下实习结束后,我和 mentor 沟通了一次,决定回学校后继续远程参与项目。配置好远程工作站,我便带着行李坐高铁回了西安。与在本校做医学影像时相比,这次实习让我确认自己更喜欢具身智能的研究内容,也基本确定了之后希望继续留在上海人工智能实验室。
尾声#
总体来说,大二的生活比大一单调很多。社团活动和随处认识新朋友的时间逐渐减少,现实生活中最常相处的人基本只剩下乐小姐,其他社交则主要发生在绿群。每天真正占据时间的事情只有科研与 RM,并且随着这一年结束,科研的重要性已经明显超过了后者。
我最初给自己定下的计划是大二完成两篇论文,上下学期各一篇,再带着这些成果申请外校实习。最后真正发表的只有一篇,另一个项目直到大三还在继续修改。从这个标准来看,实际进度当然没有想象中那么快,我也没有突然变成所谓的科研天才,只是第一次完整经历了提出方法、做实验、投稿、被拒、修改以及最终发表的过程。
不过这一篇 ECCV 已经足以改变很多事情。它让我有了申请上海人工智能实验室的底气,也让我确认自己确实可以独立推动一项研究,而不只是读论文或者按照别人的要求写代码。与此同时,我对课内排名和身边同学进度的焦虑减少了很多,因为从这时开始,我已经有了一条更愿意长期投入的主线。
大二大概就是从「想要做科研」走到「真正完成了一次科研」。过程没有后来润色出来的那么传奇,中间存在不少运气,也做过很多现在看来并不成熟的决定,但最终的结果至少还不错,并且把我带到了之后真正想做的方向上。