Sense-X/UniFormer

请教一些写代码方面的问题

Closed this issue · 3 comments

黎同学你好,我在b站上看你你在AI Drive上分享你们工作的视频,从你讲述的过程中能感觉到你是个非常有趣且热心的人,因此在这里想请教一下和文章相关度没那么高的一些问题。
我阅读了仓库中video_classification下的代码,发现代码的核心部分应该是uniformer.py下的网络设计;但除此之外,训练部分的主要结构应该是借鉴了slowfast(应该是这样吧),与代码的核心部分相比,这些额外的训练结构部分占据了代码总体的极大比重,这让我非常头痛,因为我对于这部分的学习有些无从下手,当然这和我编程能力比较差有很大的关系。关于torch的编程部分的水平,基本都是在网上看一些简单的视频教程,之后自己能写一些简单的网络。 所以我想请问,在你的学习过程中,是如何掌握这种复杂的训练结构与框架的?希望不吝赐教。

感谢提问!即便我是软件工程专业出身的,在读起代码来确实也比较费劲,更何况SlowFast的框架本身也比较晦涩,我也经历了很长一段时间的理解,希望你也可以耐心一些。无论开展任何的topic,我的建议有以下几点:
(1) 第一步是选择follow、star多的框架,比如MetaAI发布的SlowFast等框架,OpenMMLab的一系列框架,越多人提issue,说明你遇到的问题越容易被解决。
(2) 第二部是理解的步骤,现在开源的模型,基本都有相应的参数config文件、模型文件、数据集文件、辅助的utils文件,以及最关键的训练与推理主程序:

  • 先读config文件,比如slowfast里在config,先通过注释和论文,整体理解每个config的含义
  • 其次是读训练与推理文件,分别在traintest。读的时候当然会遇到很多不清楚的,可以先通过函数名整体把握作用,不需要进入函数内部理解。完成这一步你基本知道了整个训练的流程,从数据集的构建,到模型的构建,再到具体的训练与推理。
  • 再者是数据集文件,这是每个任务最核心的部分,比如Kinetics。读的时候,只需要整体把握,最后的输出是如何从原始label文件中处理得来的,比如视频任务里,视频的帧是如何采样的,不需要了解太多数据增强的细节,过分追究这些细节非常头疼。这些细节可以到你后期对任务比较熟悉时,再深入理解。
  • 最后是一些辅助文件,比如一些MeterMetriclr_policy等等,这些可以帮助你了解训练过程中的一些具体细节以及评测标准。

(3) 对于第二步,可以在中间记录一些笔记,有利于自己整体把握。我记得我当时也写了个SlowFast的源码阅读,不过经过这么几年,已经发生了很大变化......
(4) 对于其他的大部分文件,比如多进程的启动等等,这些所有codebase通用的代码不需要太清楚,遇到问题的时候再翻issue看看就好。

最后的建议是,一定要细心耐心一些,多向人请教,社区的很多人都是欢迎提问的!

@Andy1621 感谢回复,我会尝试按照你提供的建议去做一做,我在之前读代码是也发现了保持耐心和细心是极其重要的,感谢回复。后续如果有问题可能还会再来向你请教。再次对你的热心帮助表示感谢。

加油,随时提问