离ICCAD还有三星期的时候和老板说想放弃投ICCAD,最后在他的“威逼利诱”下,再加之自己的年轻气盛还是答应了并全力以赴的完成了。想想也是蛮了不起的,不过最后一两个星期实在是太累了点,希望以后还是少点这么肝的时候吧。
这大概一个月,一边做proj一边就有新的感触,每有一个感触,都会自己先记一笔,然后不知不觉的备忘录上就塞满了感触。。。现在一次性都记下来当作以后的吸取教训吧。
Idea & Paper Review
前面两个proj 都分成了c++ 和python/pytorch两个板块,因为比较尊重本科生的意见,所以都让他们先选负责的板块(所以都是选的python)。但是有个严重问题:pytorch部分往往和整个proj的idea相关,所以让本科生看paper 找idea实在是好刚没用在刀刃上。因此 两个proj都耽误了比较长的时间。好在自己看paper 总结idea的水平还是比较高了,后面都很快的调整好了方向。
以后在我看来本科生的帮助应该是:
- 跑实验这种大家都需要时间成本,而且学习成本较低的work
- 画图,implementation就取决于本科生的学习能力和是否有过类似经验了。倘若我和ta都没学过,那让ta来学一下画图也可以(学习成本一个人花费就可以了)
- 整个idea方向,除非是比较厉害的本科生(这么看我当年其实还是蛮厉害的,在南科大work都是我来看paper想idea),否则应该是我来看paper 总结,想idea,同时简单的传达意思给ta。毕竟确实我看paper的经验,水平肯定高过大部分本科生的。
最后再吐槽下吧,好羡慕南科大有那么多本科生帮忙,然后本科生也有各种1/2/3作paper,实在是双赢。CU的本科教育就花在了倾庄、人文教育上了(当然有research,但是比起内地学校有组织的research还是差远了)。
Coding style
这是看了DGCNN的mit学长的code发出的感慨。感觉任何语言,尤其python,必须要有一套自己习惯的coding style,包括但不限于:
- argments
- i/o
- error exception handling
- model architecture
这样的话,自己implementation的时候会方便很多,同时本科小朋友帮忙跑实验也会简单很多(改参数就可以)。哦对了,还有一个要习惯用git。。
Torch Tensor Operation
这算是implementation时候的一个点吧。之前习惯了for loop,这次用多了pytorch tensor后发现实在是太爽了。不仅是速度提升(1000x),整个code 也elegant很多。说下从for loop 转成tensor operation的大概idea吧:
- 如果index 不影响operation的话,可以直接用tensor[:]操作
- 如果影响就需要 生成一个index tensor
- 灵活利用torch gather(有一串index 和一个index对应的value, 想通过index取出所有对应value)
- 利用torch where 来代替 if else
晒一下自己生成kbbox(对于每个点,return k个最近的且两点bbox间没有第三个点的所有neighbors)的elegant code吧(对比for loop):
For loop version:
1 | for size in range(SIZE_OF_NET): |
Tensor operation version:
1 | #data : raw distance data (B,N,2) |
总结
这个work应该是自己这么多work里面最满意的一个了?虽然比较仓促,但是整个story是连贯的,对应方法也不是和一般dl-based work一样讲究一个玄学,基本都是有规律有原因能解释的。最后的结果也是比较满意(最后两三天的时候加上了FLUTE的结果实在是不太行,临时把FLUTE remove了,最后一天才算出结果。。也是没谁了)
这个要是结果ICCAD没中可就滑稽了。投paper这个东西就真的可以叫做玄学了。ß