Skip to content

Latest commit

 

History

History
574 lines (244 loc) · 26.8 KB

拿来主义演说.md

File metadata and controls

574 lines (244 loc) · 26.8 KB
title date index_img categories tags
拿来主义演说|送给师妹师妹的毕业分享
2022-06-16 12:00:00 -0700
实战
经验
个人提升
毕业

0 系统管理

转换系统是需要成本的,但同时也是现实中经常遇到的。

  • 建议使用系统级云盘多端同步、保存和恢复多版本文件。比如坚果云

  • Window、Linux和macOS系统平时没事都可以自己琢磨着玩,这样不至于换了系统就捉瞎。

    • 一些轻量的在线服务器会有学生优惠,可以薅羊毛来练手,比如腾讯云之类的,建议入门的时候跟一个小项目,我选的是搭建个人博客。
    • Linux实操就玩实验室服务器,玩坏了老老实实为大家重装,学超多。
    • 多系统远程连接和传输建议使用向日葵(手机可用)、XShell+XFtp,并前了解ssh相关知识。
  • 不要过分依赖只有某个平台才有的软件,比如Visio。最麻烦就是转换毕业文档了。

  • 发送的重要文件尽量使用格式兼容性高的pdf格式,如有特殊字体记得嵌入或打包。那么换个角度想,找别人要材料的时候也尽量要一份pdf导出的,确保自己拿到的材料跟对方看到的一致。


1 文件管理

如果你的大脑空空如也,总是处于一切就绪的状态,那么他就会向一切事情敞开大门。——铃木俊隆

为开阔心境,变得open,我平日里的桌面是空的,只有正在处理的时候会将需要使用的文件放在桌面,使用过后也会进行归档。比如我现在正在写这份《拿来主义演说》,所以桌面上会有一份文档。

desktop

1.1 项目主题

建立项目为主题的意识。

这个意识在事情少的时候可能没啥感觉,当很多事情集中出现在某段时间里面,如何整理规划好自己的主次、时间和下一步计划就显得尤为重要。关于这部分的理论,可以参考GTD

大家在研究生期间会有几个重要事件:科研、工作和学校事务;

而对于事件又会分成重要事件节点:小论文(按学位要求)、开题、中期、盲审、预答辩、正式答辩、毕业材料。

folder

可以为每个节点创建一个「文件夹」进行项目、子项目的归档和整理。比起按年份和时间,以项目为主题会令知识关联和文件检索都变得容易。

师弟师妹们如果想确定选题,不知道该从何下手,也可以先建立一个文件夹,起名「开题」。做一下心理准备。

关于选题,可以多参加知名讲座,多在一些公开库里复现一些好玩的工作:

  1. 推荐线上讲座:VALSE_Webinar商汤科技SenseTime
  2. 推荐公开代码库:OpenMMLab飞浆 AI Studio
  3. 推荐公众号:CVer、我爱计算机视觉、计算机视觉研究所
  4. 实验室项目、公司实习、继承师哥师姐
  5. 观察一下喜欢的公司、喜欢的岗位要求

1.1.1 文件版本

考虑到重要文件留痕、对比参考和版本恢复等各类问题,可以使用云同步,比如微软官方的OneDrive坚果云,这种自动保存、恢复文档版本的工具;除此之外,强烈建议手动编号和保存几份本地文件。

version

这里埋个伏笔,说到了版本和备份,除了文档,其实代码也是一样的。后面说后面说。

1.1.2 文件类型

推荐

  • ==Markdown标记语言。==任何编辑器可用,图片上云,文件体积小,迁移平台方便,无格式忧虑。自用Typora,测试版免费。比如大家Github上面看的ReadMe文件也是使用md写的。
  • 平时写的技术文章可以上传笔记平台,比如知乎、CSDN(支持评论)。开启专栏和tag功能便于作知识分区。另外技术博客一般都支持md编辑。
  • MS Office全家桶。其实不太建议使用WPS进行重要的文件书写,比如论文独创性声明里的某些字体无法显示会自动转。绝大部分的企业、个人都在用,必备工具,但是需要注意不同语言/地区版本之间,域代码容易失效。
  • 图:Visio(仅Windows可用,小心跨平台)、ProcessOn 在线流程图、PPT(调色、加字、简单组合、作图);
  • 表:Excel整理、Word论文三线表;
  • 公式:LaTeX公式输入

1.2 文献库

重要文件或专题文章集合建议使用本地链接。比如阅读笔记类,需要不断索引、归纳和总结类似的文章和书籍。理解力增强的同时,阅读和写作的水平走到主题阅读,也就是咱们说的科研,这时候就需要一些数据库工具来帮助我们进行知识关联。

endnote

建议使用数据库工具进行文献的整理,但是不建议在数据库里进行文献的阅读、标注和笔记等操作。不是说工具不好,只是说这方面的总结和归纳其实是一个非常提升个人能力的部分,并且个性化很强,自定义会更好!

  • 文献数据库工具有很多,比如EndNote(自用)、NoteExpress(图书馆资源)、Zetoro(免费)等;
  • 线上知识管理,Notion、OneNote;
  • 本地知识双链,Obsidian。

2 代码管理

谁还不知道GitHub!都给我玩起来!申请学生版专业账号玩飞!

学生邮箱会过期,大家申请的时候注意时限,或者给你的GitHub账号写封遗嘱,指定继承人。

github

主要推荐大家使用GitHub去检索一些优秀的开源项目,然后克隆下来==学习、模仿==,最后能做出贡献就更好了!

这里先说两个概念:

  • Git是一种版本控制工具;
  • GitHub是一个代码开源社区。

2.1 代码检索

GitHub介绍与检索

见我实操,或者大家网上检索。

这里推荐2个视频,同时两位up主的其他视频也相当优秀,建议关注。

2.2 面向GitHub编程

学习良好的代码规范和路径,从而产生对自己代码的修改思路。

或者你们会疑惑,咋找好的项目,咋找跟自己关联性很大的代码呀?这里提供几个途径:

  1. 假如跟着师哥师姐做,可以问问师哥师姐(拿来吧你);
  2. 关键词检索,先泛读论文找到关键词的中英,分别去百度/谷歌(相关讲解和总结)、GitHub(源码)上检索。
  3. 前沿工作的开源项目,一般在文章里就有提供,或者参考这个网站paperswithcode
  4. 知名的代码平台:商汤mmlab、百度paddlepaddlle等。但建议使用基于PyTorch等广用深度学习框架搭建的代码库,不然学习成本和修改难度成倍增加,容易放弃。

mmpose

优秀的开源项目会提供很多编程的灵感,如果基础稍微薄弱一些,这里也提供一些可以对着代码参照的,好玩、幽默、通俗易懂的书籍:

2.3 代码下载、修改和发布

下载还需要教?

谁还直接点Download ZIP,我会笑你。

从克隆代码的第一步开始。修改完就提交一款版本。发布线上团队协作。

2.3.1 Git教程

看我操作,或者自己上网看看。

我觉得这个光看视频没用,自己实操学的最快!这里提供几个教程网站,可以先上去了解一下,具体要用再搜索。

更建议大家平时手边放个小本子,把常用的命令都记在上面,随用随翻。

2.3.2 如何修改训练自己的模型

复现 👉 火拼 👉 设计 👉 闭环。

1. 我们需要通过复现多款 Baseline 并深度解析模型。

有多深呢?就是你可以通过代码调试,输出模型每一块的特征,可视化到每一层的参数变化。知道整个代码的走向、怎么修改输出。

这里推荐使用VSCode来打开整个项目,做调试;然后自己整理模型和流向。==论文语言跟代码语言是不一样的。==有时候论文里写了半页纸,代码就一行。所以看到喜欢的论文就扒拉他代码看,直接点!

2. 我们尝试修改、拼接代码,但是注意一定要保留修改痕迹和训练数据。

如果你想问从哪里获得修改的灵感?

  1. 第一个建议就是多看别人的工作,多复现优秀的代码。可以直接去搜索这个团队,或者查查谁引用了这篇Baseline,看看现在的改进趋势。
  2. 第二个建议就是组会的时候,如果有权有势,让师弟师妹去读跟自己领域相关的文章,安排。如果没权没势,就听师哥师姐分享,然后找跟自己工作关联的地方仔细地问他们,榨干。
  3. 第三个建议就是现在就去干!!!!!厚积薄发,今年广东高考作文题目就是围棋的本手、妙手和俗手,看看祖国花朵们的领悟,这下你肯定知道该怎么努力了。

如何开始我们的代码cv工程?干之前先停下来想一想!

我是说当面前有很多选择的时候,大家就停下来想一下。但如果有一个灵感突然蹦哒,还是立即抓住马上实现,后续再进行整理也是可以的。

我在这方面的资料保存不是很好,参考性较低,但是现在回头看,觉得有几个值得注意的改进之处,与大家共勉。如果有其他经验分享,我后续会补充进文章里:

traindata

最开始按照自己现有材料和思路总结出改进点分别是哪些,比如我有4个改进方向:(按照难度和重点排序)

  • udp mmpose (较易)同数据、模型;现成参考、复现;修改部分代码。

  • dcn mmdetection (难)同数据、不同领域模型;现成代码、模块化;拼接、改装特定模块;修改核心代码。

  • nam (较易)不同数据、不同模型;现成代码、模块化;拼接特定模块;不修改核心代码。

  • adaptive HRNet团队 (较难)同数据、模型;不同代码库;现成代码,非模块化;修改核心代码。

我大概会通过这些分析,来判断下一步计划和执行时间。

改进点 难度 相似度 类型 核心代码
udp-mmpose 较易 同数据、模型 模块化
dcn-mmdetection 困难 同数据、不同模型 模块化
nam 容易 不同数据、不同模型 模块化
adaptive-HRNet团队 较难 同数据、模型 网络设计

比如说我自己,主要关心的部分是:

第一,这个修改涉不涉及“核心代码”。

第二,他们是否属于同一个代码库?如果是,拼接工作相对简单。事先保证挑选的代码都是Python、PyTorch系列的。最好都在mmlab里面,这样可以参考库之间模块化的修改方式,使用代码对比来观察怎么拼接更具拓展性。

第三,硕士毕业要到达一定的难度,不能都选简单的拼接代码工作,不然工作量和设计理念没办法写好,也没办法串联进逻辑闭环。


没有良好的代码习惯,我突然就忘记改了哪些地方了?

然后就到了代码修改的部分,大家可能会关心,每一次修改后的代码,我改动了哪些部分?以防万一我多说一句,大家修改代码的时候不要直接在源代码上动手,复制一份,然后再链接回去,不然改到一半跑不通就懵逼了。

  • 如果改动相对集中,思路非常统一,强烈建议大家使用纸笔记录,然后再电子化文档。

  • 但是如果大家面对的是一个庞大的代码库,修改是全贯穿的;或者说为了实现一个功能需要动核心代码,一下子联动多个部分的模块修改,非常细枝末节,即使是粘贴、复写了之前的文件,加入了注释,还是很难记忆。

==那就需要用到代码版本管理的思想了!==

🌲 代码版本管理

这里我默认大家都知道「终端Terminal」、「命令行」这些概念;然后也能相对熟练地在Windows、Linux或者macOS系统上进行文件操作等。如果这方面有不熟悉的,建议提前阅读鳥哥私房菜这个博客或者书本,写的非常好!

1. 使用插件管理

可视化界面、简单清晰,需要提前关联GitHub账号。

gitlens

使用这个插件,能够在本地可视化修改后细节和文件对比,帮助我们回忆和定位具体的方案。如果修改后满意了,可以将它暂存、提交并更新到仓库。回退版本之类的操作也可以通过插件进行。

Chrome

2. 命令行控制

自己手敲命令,可以更慎重地进行每一次代码提交和管理,同时也能熟悉Git操作。(这里只提供个人常用的,建议大家私下多了解团队协作方面)

# 将代码克隆到本地
git clone git@github.com:c-yatyat/SSR-Pose.git

# 初始化
git init

# 检查文件状态,可以经常输入这个命令查看现状
git status

# 跟踪、暂存某个文件or所有文件
git add [file]

# 提交更新
git commit -m "balabala"

# 远程仓库、推送到仓库某分支
git remote -v
git remote add [shortname] [url]
git pull origin master  # 抓取
git push origin master  # 推送

这个命令可以在自己电脑的「终端」里操作,也可以在「git bash」操作,也可以在「编辑器的终端界面」操作。比如我在自己的电脑上操作一下。

item2

然后就可以在github上面查看各种版本的代码和修改记录了。

github-commit

这就相当于保存了修改路径,如果需要多版本推送,比如修改了第一个改进点的代码,专门用来做误差分析的代码。可以按照需要分别推送到不同的分支,或者打上一个tag标签。

这里我举的例子是个人用途,比较随意,但按道理来说学习期间,花点时间按照最严格的规范来做,受益匪浅。如果大家需要团队合作or想在开源社区做贡献的话,建议详细阅读一下代码规范。

这里提供一些了解版本管理、开源社区约束的视频和网站,按需参考:


3. 我们记录和设计各类实验,验证自己改进的模型效果。

为什么记录写在设计的前面呢,因为说实话,我的才华并不能在开端就设计好整个模型,前期很大部分是在碰运气,看看哪个点效果好,就往哪里走走拼拼。

因此最好在一开始就养成良好的实验记录和修改路径的习惯。(别单用纸记录!就算要用也要电子化一份!)

比如在我的表格里只有「+nam」和「+adaptive」的表单是保留训练记录的,其余的或多或少存在数据丢失的风险。而且完成好的实验就没有记录过程。

建议记录的重点:

  1. 一份修改计划:我要调整里面的哪些超参数,比如lr、config;这里需要较详细的记录和备注。以便后续实验微调。
  2. 日期、训练时间:方便观察时间成本,确定后续训练计划。
  3. 改进的方法用+表示拼接内容,先不要另起名字。比如「UDP+adaptive」就是在udp的基础上拼adaptive方法,lr和config另外备注。
  4. 代码修改的时候,尽量多保存几个checkpoint、log和可视化文件。
  5. 提升明显的所有数值需要摘抄记录,不要偷懒保存!全部写进表格里!
  6. 最后,==表格不要全靠自己设计==!参考大佬们都列出什么参数,参考个3、4篇文章,然后往多了写,别人有的我们全都要有,后面写进论文里再删除也可以!

4. 逻辑闭环

咱们做实验到开始写论文的这个交叉阶段,不要着急下笔,花几天、几周甚至一个月时间来做逻辑闭环,一定要做!

目的是让自己的模型服务于设计理念,为所有的实验都找到动机,为所有的数据都定性,为所有的分析都产生唯一的主题高光,为所有的文字都进行逻辑串联。没人能在我的逻辑闭环里打败我!


3 论文写作

怎么将师哥师姐的论文拿来,变成我的?

看我实操。

3.1 毕业论文

  1. 首先制作自己的逻辑闭环,然后找伙伴、老师深度交流和讨论:推荐使用幕布或者XMind此类大纲、思维导图app先组织思路。
  2. 论文写作的思路:文段的组织结构,在大纲里进一步细化!
  3. 编写格式:写完大纲后,其实就可以找到师哥师姐做好的毕业论文模版文件,然后按照自己的脉络填充。

幕布

彩蛋:关于这方面的资料,可编辑的大纲-幕布(密码我名),限时1天的毕业论文(文档+演示)嘿嘿。

盲审阶段专家拿到论文,专业度是一方面,格式也是很大的一方面,提交的时候确保跟自己的伙伴们格式比对,及时交流,不要有过大的信息差出现。可以互相看看整体结构、行文语句和图表公式有没有明显疏漏。

小蓝平时安排我们看本科毕设,除了累和糟心之外,其实可以学到的一些关于论文编写的格式和组织方法,至少可以看出来哪里不对劲,比起完全自己从零开始会更有抓手。

值得注意的一些格式细节:

  1. 图、表、公式的制作、统一和引用规范。
  2. 行文段落和图表之间的排布,做到图文并茂。
  3. 分节符、分页符、页码、页边距等制作细节。
  4. 中英文、段落、编号格式统一与规范。
  5. 目录生成的一些细枝末节。

关于论文格式部分,此处留下两位优秀博主的视频,亲测无论Windows还是macOS都可以跟着做,不踩雷!

3.2 小论文

大论文的每一个章节其实都可以按照小论文的思路来写。

英文

应某师弟要求,这里提供一下,我自用的英语学习资源(科研相关的英文读写)。

1. 关于源码网站、官方文档和文章的阅读。

  1. 翻译它!这里提供除了谷歌一键翻译页面外,翻译网页内文章好用的插件彩云小译,自用屏幕取词工具欧路词典
  2. 多看你就熟练了,其实技术类文章生词也就这么几个。
  3. 不建议对英文文献进行翻译,英文paper写作套路固定,直接阅读可以培养语感,有助于论文写作。如果实在要翻译,也要先通读一遍啃完了(自我训练),再去翻译软件上比对,增强理解。

caiyun

2. 关于英文小论文写作

  1. 平时阅读文献的时候注意梳理段落内容,最好用英文概括性总结,保留英文关键词在段落旁边,做好重点文段和语句积累。
  2. 梳理工作时候,尽量不要使用完整的中文语句。中文和英文写作思维不同,如果直接翻译成英文会不流畅。建议使用中文「主谓宾」结构,重点方法配合重点「动词+名词」记录,然后短翻成英文,再连成长句。
  3. 这里提供一些自用的写作参考网站:Linggle用来查词语搭配、让自己语言更地道;WantWords可以用来查近义词、反义词,让文章语言更丰富。

linggle

如果还想更进一步了解关于英文写作的技巧和学习英语的知识,我留下几个日常会看的公众号和参考书籍:

  • 公众号:LearnAndRecord(持续更新,内容热门)、BABBLER(文章地道、喜欢关联)
  • 参考书籍:《中式英语之鉴》

4 个人提升

这部分可以交给小蓝分享

  • 个人规划
  • 时间管理
  • 情绪管理

时间轴

这里其实推荐一个时间轴系列的时间管理记录。当然生活不是任何时间都需要这么精细化的管理的,不过这种让自己掌握每一小时的记录方法,可以很好的在赶论文ddl的时候把控好整个节奏。

我自用几种时间管理工具:

  • 「日历」:记录固定时间的事件,比如面试、笔试、考试。
  • 「时间轴」:用于了解自己在某项工作中的节奏,比如阅读文献、写作、画图和coding大概需要花费多少时间,从而更好的规划每项工作的用时。也可以了解自己早上、下午哪些时间更适合进行困难的工作。
  • 「月进度表」:用于跟踪自己并行的项目进度,比如我同时实习+秋招+国考+论文的时候,我就很大程度依赖进度表来取舍各项目层次的重要性。有一些进入平稳阶段的项目我就暂时放一下,然后主力攻破紧急而重要的。
  • 「清单」:每日清单的话就只写今天需要干的具体的事情,比如写“第三章的编码部分的标准方法”,采用子弹笔记形式符号。如果是某些读书/观影清单,就可以按照类别进行整理。

这些都是灵活变通的,不一定对所有的项目都采用这种方法,时间轴也不是每天都满满的,会有很多大片空白的时候。

我必须说,时间管理不一定会令科研或者生活变得轻松,但一定会让我们更加==了解自己==,从而找到适合自己的处理方式去应对复杂多变的事务。相当于一种方法论,会有私人订制的成分,但是优秀的人都会有共同的优良品质,这是值得学习和借鉴的地方。

最后推荐一个我最喜欢的环节,成功日记!这个概念是我在《小狗钱钱》这本书里get到的,会令大家充满自信、活力满满!

我喜欢使用五年日记的形式来记,可以顺便看看自己前几年在干嘛。我有一本从大四开始写的日记,今年有钱了,开了一本新的,回头看发现了很有趣的事情,比如每年的部分时间,我都在空白;有一些月在emo,一些时间打满鸡血;感觉像从年的维度看自己的变化,更长跨度的时间去观察自己的成长,我在变得更了解、更宽容和更爱自己。另外,一页里需要写5年的内容,所以每一天都只能写3-5句,就很省时间!比较容易坚持!

  • 平面设计:好的设计可以让人更加想要了解你

  • 演讲能力:好的演讲可以形成个人吸引力

  • 职业规划 👉 小琰