algorithm-engineer-prepares
algorithm-engineer-prepares copied to clipboard
A brief collections of (minimal) required knowledge for algorithm engineers. Including computer vision, deep learning, machine learning and other basic algorithms
Algorithm Engineer Prepares
算法工程师的自我修养
【算法岗相关的常用知识梳理,包括理论、代码、经典模型与新技术】(持续更新ing)
👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻
算法工程师的修炼之路(书单):点击进入
🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
0x000 计算机视觉
基础概念
图像分类经典模型(LeNet、AlexNet、VGG、ResNet、GoogLeNet)
语义分割任务经典模型(FCN、Unet、RefineNet、PSPnet、SegNet)
目标检测任务基础模型(两阶段、一阶段,包括R-CNN系列、YOLO系列、SSD)
实例分割基本概念与经典模型:FCIS、YOLCAT、PolarMask、SOLO
计算机视觉任务中常用的loss函数汇总
CNN的轻量化方法基本概念(剪枝、蒸馏、量化、小网络)
模型蒸馏(distillation)的基本原理
YOLO各版本迭代过程与实现细节
DeepLab v3 实现细节
非极大值抑制方法(NMS)及其实现
数据增广与测试时增强(TTA)
RoIAlign算子具体代码实现(以facebook的maskrcnn-benchmark为例)
DeepLab中的CRF的实现
Anchor Free 目标检测方法:CornerNet、CenterNet、FCOS
模型量化策略:PTQ、QAT、LSQ
低层视觉技术(low-level task)
图像与视频去噪经典算法与原理
图像与视频超分辨率:任务与方法
双目超分辨率(Stereo SR)相关模型
无监督超分辨率方法
去雾算法(Dehaze):暗通道先验原理
光流(Optical Flow)计算与应用:传统方法与光流网络
分割与检测
DeepLab系列模型内容梳理
并行的多尺度融合策略:HRNet
多次稠密上采样后融合的unet加强版:Unet++
OCRNet(Object Contextural Representation):基于transformer attention机制的上下文关联策略
Dilated Residual Net(DRN):空洞卷积改进resnet
MS COCO 数据集的实例分割/目标检测的annotation基本格式
anchor-free目标检测模型之:FCOS(多尺度、相对位置、centerness)
COCO数据集的官方api的基本用法(get类别/图像/标注Id、load图像/标注信息)
生成模型(GAN、Diffusion Model etc.)
生成对抗网络GAN基本原理与问题
Wasserstein GAN:log微操防止JS散度的梯度消失和logD trick的模式坍塌
CycleGAN:循环一致性约束的无监督domain transfer方案
StyleGAN 和 StarGAN
Diffusion Model:扩散模型原理
Stable Diffusion Model
Diffusion的应用:去噪、超分、图像生成
神经网络鲁棒性与攻击
神经网络的鲁棒性(clever Hans效应)
轻量化模型
Mobilenet系列模型梳理
Shufflenet v1&v2:分组卷积加通道shuffle信息交互
Squeezenet:压缩通道学特征与膨胀
Ghostnet:ghost特征加简单变换生成丰富feature map
Efficientnet:通道数、深度、分辨率的复合NAS搜索优化
轻量化超分网络:IMDN、ECBNet、RFDN
小样本学习
小样本基本概念
小样本分割经典模型梳理
- OSLSM 2017 (Pascal 5i做交叉验证,weight hashing,sup和que最终特征logistic回归)
- SG-One 2018 (mask pooling + cosine sim)
- Prototype Alignment Network (PANet) 2019 (alignment,一种类cycle loss)
- FSS-1000(relation net) 2019 (主要是数据集FSS-1000,适用于小样本分割的数据集)
- CANet: Class-Agnostic Segmentation 2019(对结果进行 refinement)
- BMVC 2018 2018(网络设计较复杂)
- Prototype Mixture Models(PMM) 2020 (将prototype拆成多个)
- Prior Guided Feature Enrichment Network(PFENet) 2020(先生成无须训练的prior,后接多特征融合)
- FSIL(Few shot Seg Image Level) 2020 (利用image-level的弱监督信息做few shot seg)
弱监督学习
Image-level label 语义分割基本思路
小目标检测
小目标检测常见处理思路
多尺度特征学习思路相关模型
context-based 相关模型
训练策略、loss函数、data augment思路相关方法汇总
骨干网络(backbone)发展
Resnet变体
SENet:squeeze and excitation
DenseNet
Inceptions
51x51 SLaK(Sparse Large Kernel)More ConvNets in the 2020s: Scaling up Kernels Beyond 51x51 using Sparsity
重参数化策略
RepVGG:make VGG great again!
ECB(Edge-oriented Conv Block):Sobel与Laplacian强化边缘的重参数化策略
ACNet(Asymmetric Conv):1x3、3x1、3x3的非对称重参数化
DBB(Diverse Branch Block):不同排列组合的多分支block
SLaK中的重参数化:极端大核如何训练?
0x001 数据处理
基础概念
数据处理和评估中的常用度量指标(AUC/KS/Gain/Lift)
特征分箱原则与策略(等频分箱、等距分箱、卡方分箱、bestKS分箱)
特征分析之单变量分析(WOE/IV/PSI)
0x002 深度学习基础
损失函数
最常用的损失函数(BCE、交叉熵、MSE、MAE)
PyTorch中定义的其他几种损失函数(NLL、Multi-label、Huber、Triplet Loss等)
分割和检测任务中的损失函数(IoU loss、Dice loss、Lovasz loss)
下降方法与学习率策略
梯度下降法及其变体(Momentum、Nesterov、RMSprop、Adagrad、Adam、AdamW等)
牛顿法和拟牛顿法:二阶优化的策略
Gradient Clipping:梯度裁剪,防止梯度爆炸的手段
L1 norm下的优化;ISTA&FISTA;学习率策略;ADMM;
EMA(Exponential Moving Average)
激活函数
常见激活函数(sigmoid/ReLU/Maxout 等)
RELU6:适应低精度计算的有界激活函数
GELU:依据高斯分布cdf计算设计的激活函数
Swish:光滑非单调下有界的self-gating函数
卷积层设计
分组卷积
deformable(可变)卷积
初始化方法
常用初始化方法(随机初始化、xavier初始化、kaiming初始化)
0x003传统机器学习基础(非NN类)
必备基础
SVM、逻辑回归、决策树的关键内容整理
kNN与k-d树:简单算法的工程优化
集成学习方法(bagging、boosting、stacking)、梯度提升原理
进阶模型与算法
隐马尔科夫模型(HMM)
蒙特卡洛方法
MCMC:马尔科夫链蒙特卡洛算法
Viterbi算法
无权重二部图最大匹配的匈牙利算法(Hungarian Algorithm)、赋权图Kuhn-Munkres算法
宽表数据建模常用集成模型:XGBoost、GBDT、LightGBM,原理与区别
0x004 视觉中的非CNN结构(Transformer/MLP)
基础概念
注意力机制的原理、应用与局限
视觉Transformer与MLP(非CNN结构)
ViT模型基本原理:image=16x16 words
DETR:基于transformer的端到端目标检测(bbox集合预测、二分匹配)
Swin Transformer
SETR
DeiT
CaiT
Segmenter
SegFormer
MLP-Mixer(非transformer)
0x005 自然语言处理基础
必备基础
文本数据预处理:分词、去停用词、tfidf编码
主题模型(topic model)
基本NLP模型
最基础的词嵌入模型Word2vec(skip-gram & cbow)
GloVe词嵌入:基于共现矩阵学习词间关系差别的嵌入方法
ELMo:基于语言模型的bi-LSTM的基于上下文动态嵌入的模型,处理一词多义(芝麻街命名模型第一弹)
FastText:Facebook开源的文本分类和词嵌入工具包
GPT系列:Generative Pre-Training,单向Transformer,非监督预训练+下游任务微调
BERT:谷歌开放的基于bidirectional Transformer的最强语言模型,BERT yyds !
NLP模型实现的相关tricks
Negative Sampling:词嵌入训练中的负采样操作
Hierachical Softmax:基于Huffman编码的高输出维度(词典大小)的优化方法
0x006 信息论
信息论基本概念与定义:信息量、信息熵、条件熵、相对熵
香农三大定理:变长无失真信源编码、有噪信道、有损信源编码
0x007 矩阵论
矩阵与线性代数基础概念与定义
图像处理与图形学中的矩阵变换
基变换与坐标变换
矩阵的对角化
0x008 统计推断与概率论
贝叶斯定理与应用
最大似然估计与最大后验估计
古典概型例题汇总
0x009 PyTorch相关
并行化策略(DataParalle和DistributedDataParallel)与多机多卡训练
PyTorch中的Dataset处理逻辑
PyTorch模型量化与onnx转换处理流程
0x00A 数据结构与算法
数据结构:单调栈(MonoStack)基本原理
Huffman树与Huffman编码:最优权重路径的无损压缩编码算法
跳表(skiplist):基于多级别索引的查找复杂度log(n)的链表
并查集(union-find):近乎常数操作复杂度的不相交集合查询
Trie(字典树/前缀树)字符串前缀匹配查询
自平衡的二叉查找树:AVL树(平衡因子,左旋、右旋)
位图算法与布隆过滤器(Bloom Filter)
0x00B 强化学习
强化学习的基本概念
Q-learning模型与SARSA模型
深度强化学习概述
0x00C 推荐系统与推荐算法基础
经典推荐算法:协同过滤(Collaborative Filtering,CF)
Matrix Factorization:从用户-物品矩阵中分解出用户和物品的特征隐向量
LR模型及其改进版MLR(piece-wise LR):一阶特征建模的CTR预估
POLY2:二阶特征交叉
FM(因子分解机)和FFM(Field-aware FM):隐向量内积实现特征交叉权重
0x00D 图嵌入与图神经网络相关算法
图嵌入方法DeepWalk:利用random walk将图嵌入转为词嵌入
LINE:基于一阶相似度和二阶(邻域)相似度的图嵌入方法
node2vec:通过参数整合BFS和DFS的游走采样
PyTorchBigGraph:一种分块的处理大图的方法和框架,Facebook出品
0x00E 信号处理相关常识与算法
频域分析、傅里叶变换与FFT
连续信号、离散信号,采样与奈奎斯特定理
0x00F 计算成像、图形学相关算法
光、颜色与颜色空间
ISP基本处理流程
图像变换:平移、旋转、缩放;仿射变换与投影变换
计算机图形学基本概念
0xFFF 常用工具类
>> Git相关
Git基本原理
Git常用操作指令
>> 大数据处理 (hadoop、SQL、Hive、Spark)
hadoop基本原理简介
SQL基本操作
Hive表基本格式与原理
Spark基本原理简介
>> Docker相关
Docker基本原理
Docker常用指令
>> 编程语言相关
==== Python相关
Python的反射机制及其使用方法
Python中的深拷贝和浅拷贝
Python中的类(class)的原理与特点
Python中常用的魔法方法
Python的垃圾回收机制(Garbage Collection)
Python的with语句执行原理
Python中的函数wrapper和装饰器(decorator)
Python的线程、进程,与协程(Corountine)的基本概念
==== C/C++ 相关
C/C++基本常识、编译链接过程
C++中的常用修饰符:static、const 等
C++中的指针和引用;值传递、指针传递和引用传递
CMake的使用方法
==== Java相关
Java虚拟机基本原理
Java常用语法结构