基础知识整理

人工智能炼丹师
2016-09-01 / 0 评论 / 168 阅读 / 正在检测是否收录...

img

深度学习(计算机视觉)

分类(网络结构发展过程)

  • AlexNet --> VGG/GoogleNet --> ResNet/DenseNet
  • BatchNorm / LayerNorm / InstanceNorm / GroupNorm
    • 归一化能够加速网络收敛,归一化后梯度更稳定,能够采用更大的学习率
    • 四种归一化的方式不同之处在于归一化所采用的统计量(均值,方差)不同
      • BatchNorm使用NHW的统计量$R^{C}$
      • LayerNorm使用CHW的统计量$R^{N}$
      • InstanceNorm使用HW的统计量$R^{N * C}$
      • GroupNorm使用GHW的统计量$R^{N * C/G}$
    • BatchNorm 在训练过程中通过滑动平均进行统计,增加了训练的随机性,而其它几种归一化的方式都是由单个样本得到的统计量,可能导致泛化能力比BatchNorm弱
  • 轻量化网络
    • squeezeNet
    • shuffleNet
    • MobileNet
  • 胶囊网络
  • 几种特殊的卷积
    • 空洞卷积
    • 转置卷积
    • 可分离卷积
  • 模型量化/压缩

语义分割

早期基于深度学习的语义分割算法, 利用对图像块分类的方式, 预测像素的类别. FCN开启了基于全卷积网络的语义分割算法的发展. FCN的主要缺点在于, 传统的分类CNN网络存在Pooling层, 这对于语义分割这种逐像素分类的任务,显然是不友好的, 丢失大量信息, 而Pooling也不是完全没用存在的意义, Pooling可以减少计算量,增加网络的感受野(上下文信息). FCN 之后的发展主要以下几点:

  1. Dilated Conv (DeepLab系列文章)
  2. 通过skip connection实现浅层和深层特征的结合(UNet等Encoder-Decoder结构)
  3. 多尺度特征(ASPP, PSPNet)

语义分割中的损失函数

  • pixel-wise cross-entropy
  • IOULoss
    • Dice Loss
    • Lovasz Loss
  • Focal Loss

炼丹Tips

  1. 学习率不要降太快,可能一时准确率上去了,但是容易陷入局部最优,出现严重的过拟合现象,尤其是当train from scratch时候, 没有pretrain的初始化,网络收敛本身就会比较慢,需要耐心等待,所以用隔几十个epoch降10的衰减方法最好调参。在当前学习率下已经收敛了,就降10;没有收敛就继续增大下降需要等待的epoch,跑几次之后就知道当前任务下,要训多少次epoch(与模型,训练数据量,训练任务有关)比较合适。
  2. batch size 应当于与学习率成正比关系, 在大batch size的情况下,试试学习率warm up的策略

机器学习&数学基础

算法的推导, 优缺点,/适用场景, 注意事项等

  • 线性模型LR
  • LDA
  • SVM
    • 如何选择核函数
    • 为什么要求对偶
    • 时间复杂度分析
  • BP
  • KDTree
  • 树模型
    • 决策树
    • 随机森林
    • GBDT
    • xgboost
  • 贝叶斯方法
    • 朴素贝叶斯
    • CRF
    • HMM
  • boosting & bagging
  • 聚类
    • K-Means/EM
    • 层次聚类
  • 降维
    • PCA & SVD

编程技能

c++

  • 虚函数/纯虚函数
  • 多态
  • 继承
  • 智能指针
  • set是基于红黑树, unordered_set基于哈希表
  • 用multiset实现最大堆

python

Python常用库

20 Python Libraries You Aren't Using (But Should)

six

collection

  • namedtuple: 增加tuple的可读性, namedtuple创建后值不可修改 (namedtuple区别于与字典和自定义对应类)

python with excel

Python读写excel
安装 pip3 install xlrd xlwt xlutils

Python中一些比较常用的语法

  • 装饰器 @wrapper, 可以理解为函数的函数, func_x = wrapper(func_x)
  • @property 和 .setter 属性修饰器, 把方法变成属性调用
  • 迭代器
  • 元类 metaclass

Python 环境隔离

virtualenv

  • pip3 install virtualenv
  • 创建工程文件夹: mkdir MyEnv
  • virtualenv -p /usr/bin/python3.6 env1
  • source ./MyEnv/bin/activate
  • deactivate

Python 内存管理

编程风格规范

  • 命名规范
  • 传参
  • 类继承

工具使用

常用库

Tensorflow

Pytorch

Caffe

OpenCV

常用工具使用(常用操作)

tmux

  • (十分钟学会 tmux, Tmux使用手册)
    编辑~/.tmux.conf,使.tmux.conf生效: 先按prefix命令, 再: source-file ~/.tmux.conf
    set -g mouse on
    set -g prefix ^x  # 设置prefix命令

tmux(旧版指令)

set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on

ffmpeg

GCC/G++

升级GCC/G++: 4.8.5->5.2.0

cd /usr/local/src
# 下载gcc5.2.0源码
wget http://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.bz2
tar -jxvf gcc-5.2.0.tar.bz2
# 进入gcc目录安装
cd gcc-5.2.0
# 下载某些依赖包
./contrib/download_prerequisites
# 创建bulid文件夹
mkdir build
cd build
../configure --prefix=/usr/local/gcc --enable-languages=c,c++ --disable-multilib
# 编译安装,此过程耗时较长
make && make install
# 修改软连接
mv /usr/bin/gcc /usr/bin/gcc_bak
ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++_bak
ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
# 查看升级后版本
gcc --verson
g++ --version
pip install jupyterlab
jupyter lab --ip xx.xx.xx.xx --port 8080 --allow-root

vim

  • 撤销: u, 恢复撤销 ctrl+r

  • 多行注释:

    • 注释: ctrl v-->上下选择需要注释的行-->输入大写I插入(#或//进行注释)-->按两下Esc退出,完成注释
    • 取消注释: ctrl v-->上下选择需要取消注释的行-->按d删除注释符号
  • 多行缩进/反缩进

    • :1,10> #1到10行向右缩进
    • :1,10< #1到10行向左缩进
  • 查找和替换

    • :%s/foo/bar/gc #g:global 全体替换 c:conform 确认
      :5,12s/foo/bar/gc #5,12 从第5行到12行
    • 设置常用功能(vim ~/.vimrc)

      set mouse=a  "设置支持鼠标
      set number "显示行号
      set listchars=tab:>-,trail:- "显示tab
      set list "显示tab
      set autoindent "根据上一行设置缩进
      set smartindent "智能缩进
      set cursorline "突出显示当前行
      set expandtab "tab变space
      set tabstop=2 "tab占两空格
      set softtabstop=2 "tab占两空格
      set shiftwidth=2 "tab占两空格
      set hlsearch

docker

  • 创建docker 容器

    docker run -it -d --name=jefxiong --cap-add ALL \
    --privileged=true --net=host \
    --device=/dev/nvidia-uvm:/dev/nvidia-uvm \
    --device=/dev/nvidiactl:/dev/nvidiactl \
    --device=/dev/nvidia0:/dev/nvidia0 \
    -e LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
    -v /etc/gpu-manager/driver/nvidia:/usr/local/nvidia \
    -v /cephfs/group/eg-qboss-ocr-offline-recognition/jefxiong:/cephfs/group/eg-qboss-ocr-offline-recognition/jefxiong \
    mirrors.tencent.com/zyp-ocr-ufa/fletchercai/vilt-pytorch1.6-torchvision0.7:v0.1 /bin/bash
  • 提交镜像

    docker commit -a "jefxiong" -m "update tf" 74eaf08b20e3 docker.oa.com:8080/g_jefxiong/tf1.6_cuda9_caffe:v0.4
    docker push docker.oa.com:8080/g_jefxiong/tf1.6_cuda9:v0.1

Sacred

0

评论 (0)

取消
粤ICP备2021042327号