Series
深度学习22 篇
用 PyTorch 从搭建模型、训练、调试到部署的一组笔记。按下面的顺序阅读,后面的文章会直接引用前面讲过的内容
模型结构
- PyTorch CNN整理 PyTorch 卷积神经网络中各层的输出尺寸、参数量与感受野的计算方法,常用的网络结构,以及查看各层输出形状的方式
- PyTorch Transformer整理 PyTorch 中 Transformer 的张量形状、注意力计算、掩码、位置编码与参数量,常用的模型结构,以及语言模型的训练、逐词生成与 KV 缓存
- Vision Transformer整理 Vision Transformer 把图像送入 Transformer 的方式,包括图像块嵌入、分类标记与位置嵌入、一个小型 ViT 的实现与参数量、与 CNN 的对比实验、改变输入分辨率的方法,以及注意力的查看
训练
- PyTorch Data Loading整理 PyTorch 的数据加载与数据增强,包括 Dataset、DataLoader、变长样本的整理以及训练与验证时的图像变换
- PyTorch Training整理 PyTorch 的训练流程,包括损失函数、优化器与学习率调度、训练与验证循环,以及梯度裁剪、梯度累积、混合精度、提前停止等训练技巧
- Optimizers and Learning Rate Schedules整理优化器与学习率调度的原理,包括 SGD、动量、RMSprop、Adam、AdamW 的更新公式及其与 PyTorch 实现的逐步对照,预热、余弦退火等调度的公式,以及学习率与批大小的关系
- PyTorch Checkpoints and Reproducibility整理 PyTorch 训练中检查点的保存与恢复、weights_only 的含义,以及固定随机种子和 GPU 上的不确定性
- Normalization and Regularization整理 PyTorch 中各种归一化层的统计维度与手动计算、BatchNorm 在训练和推理时的区别,以及权重衰减、Dropout、标签平滑等正则化方法的用法与实测效果
- PyTorch Debugging整理 PyTorch 训练出现问题时的排查顺序,以及 NaN、学习率、梯度、过拟合与欠拟合问题的定位方法
- PyTorch Common Mistakes整理 PyTorch 中不报错但结果错误的常见问题,包括损失函数的输入、梯度清零、广播、eval 模式、计算图被切断以及标签的类型与范围
- PyTorch Memory and Speed整理 PyTorch 训练中显存不足的原因与处理方法,以及怎样找出训练速度的瓶颈
- Evaluation Metrics整理深度学习模型常用评估指标的含义、容易产生误导的情况与计算方法,包括混淆矩阵、精确率与召回率、ROC 与 PR 曲线、回归、分割与语言模型的指标,以及指标的正确累积方式
- TensorBoard整理 TensorBoard 在 PyTorch 中的用法,包括 SummaryWriter 的各种记录方法、启动与远程查看,以及记录频率、关闭写入器、事件文件大小等常见问题
- Experiment Tracking整理训练实验的记录与比较方法,包括需要记录的内容、实验目录的组织、日志与指标文件、在训练脚本中记录以及多次实验的比较
- PyTorch Distributed Training整理用 DistributedDataParallel 进行多进程、多显卡训练的方法,包括进程组与 torchrun、最小的训练脚本、同步的验证、常见的注意事项、DataParallel 以及启动与排错
任务
- PyTorch Fine-Tuning整理 PyTorch 中迁移学习与微调的做法,包括加载预训练模型、冻结参数、分层学习率、加载部分权重与 LoRA,以及从头训练、特征提取、全量微调的对比实验
- Object Detection整理目标检测的基本组成:边界框格式、IoU、非极大值抑制、锚框、检测头输出的解码、损失函数、mAP 的计算,以及预训练检测器的使用和坐标映射
- Image Segmentation整理图像分割的任务类型、掩码格式与数据增强、U-Net 的实现、交叉熵与 Dice 损失、训练与评价指标、推理后处理,以及 torchvision 预训练分割模型的使用
- Keypoint Detection整理关键点检测的坐标回归与热力图两种表示、热力图的生成与亚像素解码、可见性掩码与训练、PCK 和 OKS 指标、坐标映射与翻转增强中的左右互换,以及由二维关键点用 PnP 求解位姿
- Generative Models整理自编码器与 VAE、GAN、扩散模型的思路与最小的 PyTorch 实现,以及条件生成、无分类器引导和生成结果的评价方式
部署
- PyTorch Deployment整理 PyTorch 模型从训练到推理的过程,包括推理前的准备、导出 ONNX、ONNX Runtime 推理、预处理一致性、量化、耗时测量,以及 TensorRT 与 C++ 推理
- Model Compression整理让训练好的模型变小、变快的几种做法,包括非结构化剪枝与结构化剪枝、知识蒸馏、伪量化与量化感知训练,以及它们在同一个小实验上实测的效果
计算机视觉4 篇
传统图像处理的常用操作,以及相机成像和坐标变换的基础
图像处理
- Image Filtering梳理线性滤波、非线性滤波与形态学滤波的原理,以及对应的 OpenCV 函数和使用示例
- Edge Detection介绍图像边缘检测的评价标准,以及 Canny、Sobel、Laplacian 算子的原理和 OpenCV 用法
相机与几何
- Homogeneous Transformation Matrix整理三维空间中的平移、旋转、镜像、缩放矩阵,齐次变换矩阵的组成、求逆与链式变换,以及欧拉角和四元数
- Field of View介绍标准镜头与鱼眼镜头在不同投影模型下,由焦距和传感器尺寸计算视场角的方法
C++5 篇
C++ 标准库和语言特性的用法整理,以及进程间通信
语言与标准库
- C++ Containers梳理 C++ STL 序列容器、关联容器、无序容器与容器适配器的特性、接口差异和使用方式
- C++ Lambda Expressions介绍现代 C++ Lambda 表达式的语法、捕获方式、泛型 Lambda 与使用中的注意事项
- C++ Multithreading系统整理 C++ 多线程、同步原语、原子操作、异步任务与线程管理
- Formatted Output汇总 printf 格式控制符、C++ 与 Python 的格式化输出,以及终端彩色输出和光标控制的转义序列
通信
- ZeroMQ Messaging介绍 ZeroMQ 的安装与源码编译、通信模式、传输协议、CURVE 加密认证,以及 C++ 与 Python 下的用法
Linux4 篇
Ubuntu 的系统配置、常用命令行工具、文件系统挂载和 Docker
系统
- Ubuntu Optimization汇总 Ubuntu 的语言、内存、时间、显卡及常用系统优化配置
- Linux Tools整理 Linux 下 ssh、scp、rsync、screen、tmux、tar、grep、find、shc、wine 等常用工具的安装与用法
- Linux Mounting汇总 Linux 文件系统类型、挂载与卸载命令、挂载选项及 fstab 配置
容器
- Docker Configuration记录 Docker 的免 sudo 权限、守护进程与容器的代理配置、容器内使用 NVIDIA 显卡,以及显示 ROS 图形界面的方法