DL入门指南
资料课程
- 李沐老师 《动手学深度学习》
https://tangshusen.me/Dive-into-DL-PyTorch/ - 李宏毅老师课程
https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.php
DL入门必掌握知识点
- 数据处理 : numpy、torch
- 地址处理 : os、pathlib
- 文件处理 : json、yaml
- 命令行参数解析 :args
- 获取时间 : time
- 图片读取与可视化: PIL、cv2、matplotlib
- 数据预处理与数据增强 :torchvision.transforms、cv2
- 获取常用数据/处理数据 :torchvision.datasets、自定义dataset
- 迭代batch数据 : torch.utils.data.DataLoader、自定义collate_fn
- 模型搭建 : torch.nn、torch.nn.functional
- 获取(预训练)模型 :torchvision.models
- 保存日志 :tensorboard、logging
- 优化器 :torch.optim
- 学习率调度器 :torch.optim.lr_scheduler
- 模型参数/checkpoint 保存与加载
- 迁移学习:模型修改、参数冻结
- 各任务常用损失函数
- 各任务评价指标
- 项目环境配置
入门算法
包括但不限于以下算法:
第一阶段 :LeNet、AlexNet、GoogleNet、VGG
第二阶段 :Resnet、DenseNet、Unet、FCN
第三阶段 :Faster RCNN、SSD、YOLO v3、self-attention、Vision Transformer(encoder-decoder模块)
第四阶段 : YOLO 系列 、 DETR 系列、(有兴趣的可以看 Mamba 系列)
入门评估
怎样才算入门?
1、掌握模型训练代码框架
2、熟悉各种常用数据集
3、无障碍预处理数据
4、玩转以 resnet 为 backbone 的各种迁移学习算法
5、熟悉图像分类任务、目标检测任务、语义分割任务的常用损失函数与评价指标
6、完全理解 Fater RCNN、SSD、YOLO v3、Attention 的理论,看懂并理解每一行代码
如何快速入门
1、入门有哪些东西需要学习
2、建议的学习步骤
3、相关的学习资料从哪获取
深度学习 想要快速入门,需从2个方面进行提升:
- 理论知识 :多看 csdn、b站 等平台的 经典算法理论讲解
- 代码能力 :动手临摹一些经典算法,这些算法基本都是开源的
- Step 1 :动手临摹一些 简单的、经典的开源算法,(比如 LeNet、AlexNet、GoogleNet、VGG) ,务必搞懂每一行代码的作用与原理、整理自己的训练代码框架 训练代码框架
- Step 2 :入门后,在代码能力提升阶段,多看别人的代码,碰到经常见到的、不熟悉的模块的使用,再进行资料查找并学习,整理自己的学习笔记 (功能模块代码)!一定要整理自己的学习笔记!
Step 1 : LeNet、AlexNet、GoogleNet、VGG 一定是你入门必学必临摹的算法
这个阶段的目标:
- 熟悉整体的训练代码框架 训练代码框架、理解每一行代码的作用与原理
- 掌握
torchvision
中的3个重要模块:torchvision.models
、torchvision.datasets
、torchvision.transforms
- 掌握如下知识点的理论与代码使用:
- 简单的基础模型搭建
- 模型查看
- 如何直接从
torchvision.datasets
获取常用数据 - 简单的使用
torchvision.transforms
进行图像预处理 - DataLoader 的基础使用,参数功能掌握
- 几种优化器的理论知,
torch.optim
的模块使用 - 学习率、梯度、反向传播的关系
- 分类任务、目标检测任务、分割任务 常用的损失函数 理论与 相关pytorch类的使用
Step 2 :玩转常用数据集
熟悉常用数据集:MNIST、Flowers、CIFAR、MSCOCO、PascalVOC
根据每个数据集,整理你自己的 数据处理通用代码 :
- 一方面,帮助你学习数据处理
- 另一方面,方便之后复用
通过这个阶段,你的目标:
- 熟悉各个数据集的:数据结构、支持的任务、图片大小、类别数
- 数据读取库:PIL、cv2
- 自定义 DataSet :3个必要的函数的使用:
init()
、getitem()
、len()
- 数据处理,数据增强 : 进一步 了解
torchvision.transforms
的使用 - Dataloader 的使用,各个参数的含义
- 数据可视化库:cv2、matplotlib
Step 3 : 玩转 Resnet
通过这个阶段的目标:
- 完全理解 Resnet,以及 Resnet 的网络特点,知道怎么将它作为 backbone 提取 feature map
- 迁移学习的各种技巧:修改网络,网络加载参数、冻结参数
- 了解一些基础的 目标检测、语义分割的理论知识
- 图像预处理/图像增强的技巧:针对不同任务,图像预处理/图像增强需要注意的点
Resnet 是最常用的 backbone,玩转它很有必要,学习内容:
- 学习 Resnet 理论知识、临摹 Resnet 网络搭建
- 在 Resnet 的基础上做迁移学习,再去学习一个以 Resnet 为 backbone 的网络
- 图像分类:直接在 Resnet 网络上做修改,去训练一些 常用数据集(图像尺寸不易太小)
- 目标检测:以 ResNet 为 backbone 的 YOLO v3
- 语义分割:以 ResNet 为 backbone 的 FCN
- 有时间再去学习一下 U-net 网络,对你网络搭建技巧有很大的帮助
Step 4 : 学习你研究方向相关的经典网络
比如 :Faster-RCNN、SSD、YOLO系列、self-attention
- 学习你研究方向的 理论知识
- 比如,什么是 one-stage,什么是 two-stage
- 比如,end-to-end 的方法需要我们输出包括哪些内容
- 比如,目标检测任务的目标是什么,图像分割任务的目标是什么
- 比如,目标检测任务的评价指标 mAP 怎么计算,图像分割任务的评价指标是那几个
- 比如,什么是 self- attention,什么是 cross-attention;
- 提升代码能力,复现代码的时候,看到不了解的代码行,代码块,记录下来,去查资料学习,整理为自己的学习笔记。
算法学习流程
(1)先找1~2个 点赞多的视频 或者 博客看,了解一下算法的背景,做了啥,重点思想是什么
(2)然后去看论文,根据 abstract 部分,了解作者提出了哪些创新点;算法部分会仔细的看(一般是第3节、第4节),以及论文中贴出来的每张图 也会仔细的看
(3)再回头多找几个 博客或者视频看,看大家的理解是什么
(4)需要了解算法细节的,就翻代码,一边看一边随手画画数据处理流程图,帮助理清思路
(5)了解数据处理过程之后,再回头自己思考背后的思想,这么做的用意是什么,
(6)有觉得以后能用得上的代码,就整理到自己的代码库中,方便以后 control c + control v
(7)有需要就再多翻一翻论文,论文中总有 别人博客中没有提及到的细节
(8)看代码可以和看书一样,多看几遍,第一遍不需要多细,大概看个结构,一遍比一遍往细了看
想复现 却找不到源码
完美复现是一件非常非常困难的事情
1、github
- 通过算法关键词搜索
- 去各个作者的仓库中查看
- 去 issue 中提问
2、paper with code 里面可能会有相关代码
3、kaggle 找相关数据集,看与这个数据集 相关的代码中是否有可参考代码。
4、其他方式 :
- 在 stackoverflow 或其他平台进行提问
- 如果是系列代码,去查看同系列其他代码
- 给作者发邮件,去要代码
- 问师兄师姐
- 找相关方向的群组,群组内提问
如何仅下载GitHub项目的部分文件
1、Downgit
Downgit 地址 : https://minhaskamal.github.io/DownGit/#/home
将仓库中,需要下载的那一部分的根目录地址,粘贴到 DownGit,然后 download 即可
2、GitZip for github
GitZip for github 是 Chrom浏览器中的插件, 安装地址: https://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdlkn/related
用 Chrom 浏览器打开 Github 中的某目标仓库,仓库中的 文件/文件夹前面,就会显示出一个 checkbox,选中要下载的 文件/文件夹, 在右下角点击加载即可。