点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

现在深度学习项目代码量越来越大,并且单个文件的量也非常的大。笔者总结了一些专家的经验并结合自己看的一些项目,打算总结一下如何探索和深入一个深度学习项目库。

1. 基础知识

首先,需要保证有一定的深度学习基础知识,吴恩达的深度学习课还有斯坦福大学的CS231n都是不错的入门教程,只需要有大学数学的基础就可以看懂。

然后,需要对Linux系统使用有一定的了解,一般选择Ubuntu系统作为主力系统,了解一下基础的系统命令就可以了,比如rm,ls,cd,cat,vim,sudo,find,df,top等,在B站上搜索一下Linux的视频,很快就可以入门。之后遇到新的命令只需要查询API即可。

其次,还需要保证对python语言和深度学习框架的了解,python上手是很快的,可以看一下菜鸟教程或者莫烦python教程,上首页很快。深度学习框架方面可以买一些书籍,边看边敲,找一个小项目敲一敲,了解一下大部分API就已经达到上手水平了。深度学习框架一般选tensorflow、pytorch,因为大部分项目大多是基于这两个框架的。他们官方网站的教程也是非常不错的参考,可以看看官方提供的教程,跑一下github上提供的demo。

最后,营造科研的环境,可以关注一些领域相关的大牛、公众号,也可以加入一些交流群,多和群友交流,尽可能提升领域的常识。不要乱问问题,一定要有自己的思考和想法,然后再到群里问问题和交流。

2. 项目分析阅读

从Github上拿到一个项目,可以按照以下的步骤进行分析和阅读。

  • 项目背景调研:

    • 项目是否是对应一篇论文?如果对应论文,可以先阅读一下Paper,对背景和项目的细节有一个大概的了解。

    • 项目是否有说明文档?一般比较大型的项目,比如pytorch,nni,mmdetection等较多人维护的项目是会在readthedoc上提供说明书,建议优先阅读说明。

    • 项目是否有README?README文件通常包含了项目创建者想要告诉你的信息,对于一些专业的项目库而言,阅读README文件绝对对你理解整个项目代码有帮助。

    • 什么都没有??极少数会遇到这种情况,但如果遇到的话,就进行下一个阶段吧。

  • 通过文件命名分析:

    • 数据处理、数据加载部分,通常命名可能有xxx_dataloader.py等

    • 网络模型构建部分,通常命名可能为 resnet20.py model.py等

    • 训练部分脚本,通常命名可能为train.py等

    • 测试部分脚本,通常命名可能为test.py eval.py 等

    • 工具库,通常命名为utils文件夹。

    • 根据文件夹、文件的命名,判断其可能的功能。一般在深度学习项目中,通常有几部分组成:

    • 举个例子,以once for all项目为例:

.
├── build.sh # 环境构建
├── eval_ofa_net.py
├── eval_specialized_net.py # 验证专用网络
├── figures
│   ├── cnn_imagenet_new.png
│   ├── diverse_hardware.png
│   ├── imagenet_80_acc.png
│   ├── ofa-tutorial.jpg
│   ├── overview.png
│   └── video_figure.png
├── LICENSE
├── ofa
│   ├── imagenet_classification
│   │   ├── data_providers # 数据加载
│   │   ├── elastic_nn # 算法核心模块
│   │   ├── __init__.py
│   │   ├── networks # 网络构建
│   │   └── run_manager # 训练代码核心逻辑
│   ├── __init__.py
│   ├── model_zoo.py # 模型库
│   ├── nas # nas相关工具
│   │   ├── accuracy_predictor
│   │   ├── efficiency_predictor
│   │   ├── __init__.py
│   │   └── search_algorithm
│   ├── tutorial # 教程
│   │   ├── accuracy_predictor.py
│   │   ├── evolution_finder.py
│   │   ├── flops_table.py
│   │   ├── imagenet_eval_helper.py
│   │   ├── __init__.py
│   │   └── latency_table.py
│   └── utils # 工具库
│       ├── common_tools.py
│       ├── flops_counter.py
│       ├── __init__.py
│       ├── layers.py
│       ├── my_dataloader
│       ├── my_modules.py
│       ├── pytorch_modules.py
│       └── pytorch_utils.py
├── README.md # 项目介绍,初次接触需要阅读
├── requirements.txt # 环境文件
├── setup.py # pip构建环境所需文件
├── train_ofa_net.py # 训练脚本
└── tutorial # 教程├── local_lut.npy├── ofa.ipynb├── ofa_resnet50_example.ipynb└── README.md
  • 找到程序运行入口:

    • 第一类bug,环境不兼容导致的bug,严格按照作者提供的运行环境,并对照环境的版本信息,对齐本地环境和作者要求的环境。

    • 第二类bug,深度学习框架带来的bug,这部分bug可以在bing上进行搜索,查看解决方案。

    • 第三类bug,项目本身相关的bug,这类bug最好是在github的issue区域进行查找,如果无法解决可以在issue部分详细描述自己的问题,等待项目库作者的解答。

    • 通过上一步的分析,找到了项目的介绍的话,在自己机器上完成环境配置。

    • 一般可以找到项目运行的主入口,比如train.py,试着运行项目。

    • 遇见bug怎么办?

    • 运行顺利的话,代表可以进行debug操作,对文件某些细节不确定的话,可以通过debug的方式查看变量详细内容。

  • 用IDE打开项目:

    • 阅读入口文件的逻辑,查看调用到了哪些包。

    • 通过IDE的功能跳转到对应类或者函数进行继续阅读,配合代码注释进行分析。

    • 分析过程可能会需要软件工程的知识,比如画一个类图来表述项目的关系。

    • 一开始可以泛读,大概了解整体流程,做一些代码注释。而后可以精读,找到文章的核心,反复理解核心实现,抽丝剥茧,一定可以对这个项目有进一步的理解。

    • 笔者是vscode党,推荐使用vscode+scp+mobaxterm+远程服务器的方式进行运行。

    • 打开项目以后,从运行入口(通常是train.py)开始阅读:

  • 实在读不懂怎么办?

    • 在Github的issue上进行提问。

    • 如果有项目作者的联系方式,可以联系作者,发邮件提问。

    • 看看有没有其他人写过相关的博客。

3. 参考

https://www.zhihu.com/question/26480537

https://www.zhihu.com/question/29416073/answer/44301979

https://github.com/phodal/articles/issues/14

本文仅做学术分享,如有侵权,请联系删除。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

怎样看pytorch源码最有效?相关推荐

  1. ELMo解读(论文 + PyTorch源码)

    ELMo的概念也是很早就出了,应该是18年初的事情了.但我仍然是后知后觉,居然还是等BERT出来很久之后,才知道有这么个东西.这两天才仔细看了下论文和源码,在这里做一些记录,如果有不详实的地方,欢迎指 ...

  2. pytorch 测试每一类_DeepFM全方面解析(附pytorch源码)

    写在前面 最近看了DeepFM这个模型.把我学习的思路和总结放上来给大家和未来的自己做个参考和借鉴.文章主要希望能串起学习DeepFM的各个环节,梳理整个学习思路.以"我"的角度浅 ...

  3. Transformer-XL解读(论文 + PyTorch源码)

    前言 目前在NLP领域中,处理语言建模问题有两种最先进的架构:RNN和Transformer.RNN按照序列顺序逐个学习输入的单词或字符之间的关系,而Transformer则接收一整段序列,然后使用s ...

  4. 基于Pytorch源码对SGD、momentum、Nesterov学习

    目前神经网络的监督学习过程通常为: 数据加载(load)进神经网络 经过网络参数对数据的计算,得出预测值(predict) 根据预测值与标注值(label)之间的差距,产生损失(loss) 通过反向传 ...

  5. 小白学习pytorch源码(二):setup.py最详细解读

    小白学习pytorch源码(二) pytorch setup.py最全解析 setup.py与setuptools setup.py最详细解读 setup.py 环境检查 setup.py setup ...

  6. PyTorch源码浅析(1):THTensor

    PyTorch源码浅析(1):THTensor PyTorch中Tensor的存储和表示分开,多个THTensor可能共享一个THStorage,每个THTensor可能拥有不同的view(e.g. ...

  7. 20种看asp源码的方法及工具

    作者:欧杨飘雪  http://blog.csdn.net/flyingsnowy/ 众所周知windows平台漏洞百出,补丁一个接一个,但总是补也补不净.我把我所知道的20种看asp源码的方法总结了 ...

  8. 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach

    一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...

  9. 最近看Kafka源码,着实被它的客户端缓冲池技术优雅到了

    最近看kafka源码,着实被它的客户端缓冲池技术优雅到了.忍不住要写篇文章赞美一下(哈哈). 注:本文用到的源码来自kafka2.2.2版本. 背景 当我们应用程序调用kafka客户端 produce ...

  10. 面试有没有看过spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天...

    原标题:如何看Spring源码.Java每日六道面试分享,打卡第二天 想要深入的熟悉了解Spring源码,我觉得第一步就是要有一个能跑起来的极尽简单的框架,下面我就教大家搭建一个最简单的Spring框 ...

最新文章

  1. 腾讯AI Lab负责人张潼离职,张正友或接替其位
  2. linux安装操作系统以及配置ip地址
  3. android数据绑定_Android数据绑定
  4. SQL语句详解(三)——SQL子查询
  5. 20200128每日一句
  6. 如何持续突破性能表现? | DX研发模式
  7. 百度搜索引擎推出“熊掌号”,保护原创作者权益
  8. 美国音乐学院计算机音乐专业排名2015年,美国音乐学院排名
  9. python0基础 第三节
  10. 手动修改dns服务器设置,如何修改DNS设置 修改DNS设置方法【详解】
  11. REBUILD INDEX
  12. C语言键盘方向键的读入
  13. 炔烃+叠氮“点击化学”(Click chemistry)试剂,你值得拥有
  14. 计算机应用的毕业论文论文,计算机应用本科毕业论文
  15. 趁我酒醉后专车司机想要非礼我
  16. 双十一音响不推荐之sonos
  17. 北大保安“高考第一人”,现在成了一校之长!网友:真·知识改变命运
  18. 【数智化案例展】中联教育——嵌入式BI助力财经数据分析教学与服务
  19. AVI文件格式完整解析
  20. 手机信令数据怎么获得_手机信令数据支持城镇体系规划的技术框架

热门文章

  1. 电商网站主动取消客户已支付成功订单感想
  2. (转)详解HTML网页源码的charset格式
  3. 如何使用:after伪元素和:before伪元素
  4. 在框架中用JS设置target(用于location.href)
  5. snprintf与sprintf的区别
  6. 每天一道剑指offer-二叉搜索数的后序遍历序列
  7. linux设置gmt时区,关于GMT UTC CST和Linux时区设置
  8. php文章上一篇,thinkphp5实现文章上一篇,下一篇
  9. Jedis对redis分布式锁的操作(设置过期时间,UUID,LUA脚本)
  10. java砖头铺路面试题,Java基础知识面试题