/algorithm-engineer-prepares

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)

visitors


基础概念

图像分类经典模型(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中的重参数化:极端大核如何训练?


基础概念

数据处理和评估中的常用度量指标(AUC/KS/Gain/Lift)

特征分箱原则与策略(等频分箱、等距分箱、卡方分箱、bestKS分箱)

特征分析之单变量分析(WOE/IV/PSI)


损失函数

最常用的损失函数(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初始化)


必备基础

SVM、逻辑回归、决策树的关键内容整理

kNN与k-d树:简单算法的工程优化

集成学习方法(bagging、boosting、stacking)、梯度提升原理

进阶模型与算法

隐马尔科夫模型(HMM)

蒙特卡洛方法

MCMC:马尔科夫链蒙特卡洛算法

Viterbi算法

无权重二部图最大匹配的匈牙利算法(Hungarian Algorithm)、赋权图Kuhn-Munkres算法

宽表数据建模常用集成模型:XGBoost、GBDT、LightGBM,原理与区别


基础概念

注意力机制的原理、应用与局限

视觉Transformer与MLP(非CNN结构)

ViT模型基本原理:image=16x16 words

DETR:基于transformer的端到端目标检测(bbox集合预测、二分匹配)

Swin Transformer

SETR

DeiT

CaiT

Segmenter

SegFormer

MLP-Mixer(非transformer)


必备基础

文本数据预处理:分词、去停用词、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 矩阵论

矩阵与线性代数基础概念与定义

图像处理与图形学中的矩阵变换

基变换与坐标变换

矩阵的对角化


贝叶斯定理与应用

最大似然估计与最大后验估计

古典概型例题汇总


并行化策略(DataParalle和DistributedDataParallel)与多机多卡训练

PyTorch中的Dataset处理逻辑

PyTorch模型量化与onnx转换处理流程


数据结构:单调栈(MonoStack)基本原理

Huffman树与Huffman编码:最优权重路径的无损压缩编码算法

跳表(skiplist):基于多级别索引的查找复杂度log(n)的链表

并查集(union-find):近乎常数操作复杂度的不相交集合查询

Trie(字典树/前缀树)字符串前缀匹配查询

自平衡的二叉查找树:AVL树(平衡因子,左旋、右旋)

位图算法与布隆过滤器(Bloom Filter)


强化学习的基本概念

Q-learning模型与SARSA模型

深度强化学习概述


经典推荐算法:协同过滤(Collaborative Filtering,CF)

Matrix Factorization:从用户-物品矩阵中分解出用户和物品的特征隐向量

LR模型及其改进版MLR(piece-wise LR):一阶特征建模的CTR预估

POLY2:二阶特征交叉

FM(因子分解机)和FFM(Field-aware FM):隐向量内积实现特征交叉权重


图嵌入方法DeepWalk:利用random walk将图嵌入转为词嵌入

LINE:基于一阶相似度和二阶(邻域)相似度的图嵌入方法

node2vec:通过参数整合BFS和DFS的游走采样

PyTorchBigGraph:一种分块的处理大图的方法和框架,Facebook出品


频域分析、傅里叶变换与FFT

连续信号、离散信号,采样与奈奎斯特定理


光、颜色与颜色空间

ISP基本处理流程

图像变换:平移、旋转、缩放;仿射变换与投影变换

计算机图形学基本概念


>> 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常用语法结构