Vim 01 Recorder

Vim 01 Recorder

Chose Your Dotfile to start the vim

1
vim -u {path to your .vimrc}

Recorder of Vim

This Chapter mainly introduces the Recorder in vim,Which is used to do some repeated operations.This function is also called a macro.

for more information try :help recording

This section will introduce related concept/function of recording function. Which help us to understand how this works, and what we should pay attention to it.

register of vim: register is a superset of macro, it contains more function. In this part we should know, register can store some string or operations to help subsequent use.

Status:
Using :registers or :reg to check those we have registered, or add the registers’s name behind to show those u’re interested in.

1
2
3
4
5
:reg a b c 
--- Registers ---
"a register a content
"b register b content
"c register c content

Lifecycle
The information in registers will not disappear with the window closed. But maybe with the system-level’s open-close. we should test this!!! So we can store some snippet,pwd,etc.


PicBed Setting for note and blog

PicBed Setting for note and blog

@Aiken 2020 first write,2021 modify

Mainly using picgo-core(command line) to setting picbed,and we can update the setting method

Github

基本部署

  1. 在偏好设置中的图像,进行如下设置👇: 下载或更新PicGo-Cord(command line)

image-20200512160643588

  1. 接着去Github中建立一个Repo:UserName/RepoName,用以存放图片(Public),简单的用readme初始建立即可。

  2. 在Github的setting - developer setting-personal access tokens中新建token,指定简单的repo权限,并记录个人的token(只显示一次)
    Attention: 忘记记录的话,在token中也是通过update token(好像是这个名,获取新的值的)

  3. 用Typora打开配置文件设置,或者使用命令行进行配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"picBed": {
"github": {
"repo": "UserName/RepoName",
"token": "your github token here",
"path": "img/",
"customUrl": "https://raw.githubusercontent.com/UserName/RepoName/master",
"branch": "master"
},
"current": "github",
"uploader": "github"
},
"picgoPlugins": {}
}

Fine Tuning

Fine Tuning

@Langs: python, torch
@reference: d2l-pytorch,transfer_torch

This Note focus on the code part.
模型微调和模型预训练,在Pytorch中的使用方式对比汇总。

How to Design the Fine Tune

这一部分主要集中于我们对于微调任务的拆解,有几种不同的预训练和微调的方式,在不同的情景下,对应的参数应该怎么设置和调整是问题的重点。

WorkFlow

基于这种Transfer的策略,我们能够学习到一个更通用,泛化能力更强,有助于识别边缘,色彩,等等有助于下游任务的通用特征提取。

在Transfer任务中,有几种不同的调整方式:

  • 固定Bakcbone,只训练Classifier
  • 同步微调网络
  • 区分学习率,微调Backbone,训练Classifirer

为了实现这几种不同的Transfer方式,需要用到以下的几种方式:梯度截断,lr区分设置等。

Code Part

不同lr设置

微调Backbone,训练Classifier作为最经典的Transfer设定,在Code上也较为复杂,所以我们首先举个这种例子。


Git 01 入门与常用操作

Git 01 入门与常用操作

参考文献:稀土掘金 | ProGit2

GIT 与 SVN 的区别

SVN 是集中式版本控制系统,其所有的版本管理都是集中在某个中央服务器,因此,在干活的时候,首先都需要从中央服务器中获取最新的版本,修改后将版本推送到中央服务器,因此大多数场景下需要进行联网使用。可能会更依托于相应的图形化客户端来进行同步和版本管理,便于管理美术资源等等。

GIT 是分布式版本管理系统,每个人的电脑就是一个完整的版本库,可以进行独立的版本管理,多人协作可能依托于 github 之类的中继节点,将修改同步给对方,解决冲突。

Init 初始化

包含 ssh 的详细指令在 ssh 的文档中,这边只介绍设置完这一系列操作之后的 git 初始化,主要是初始化 ssh,并将私钥放到 github 或者 gitee 的账户中。

1
2
3
4
5
6
7
8
9
10
git config --global user.name "YourName"
git config --global user.email "YourEmailAdress"

# 查看相关的配置信息
git config --list

# 设置CRLF和LF的相关转换 第一条在提交的时候自动抓换位LF,迁出转换为CRLF
# 第二条拒绝混合换行符的提交
git config --global core.autocrlf true
git config --global core.safecrlf true

Github 设置

官方文档介绍的一些权限错误的地址:< https://docs.github.com/en/github/authenticating-to-github/error-permission-denied-publickey>

将本机的 ssh 公钥(public)放到 GITHUB 账户下的 ssh 管理地址,执行测试

1
ssh -T git@github.com

没有问题的话就可以直接进行 clone,之类的 git 操作了

1
2
# 小trick,不拉取历史的commit
git clone --depth=1 REPO_ADRESS

Linux 文件传输和同步

Linux 文件传输和同步

@aikenhong 2022

当我们需要在Server之间进行,或者Server和WSL之间进行文件的传输,以及文件夹的同步的时候,如果要打开Xftp之类的软件进行,有繁琐的操作中转,或者说目录较为庞杂的时候,也显得有些麻烦。

于是我们可能希望使用脚本,来实现更便捷,同时也能设置定时功能,使得操作简单便捷,经过简单的调研,我们目前尝试使用以下几种方法,并取得了成功。

Rsync 同步目录

rsync是借助ssh服务进行的文件传输,为了使用起来方便,我们首先需要配置免密登录,在服务器之间传输SSH密钥,参考[[Envs/SSH]]

此后我们便可以编写同步脚本来同步远程的目录和本地目录,当然也可以执行反向的命令,

1
rsync -azP --delete -e 'ssh -p port' --progress --stats --exclude "big Files or sth" user@ip:source_path target_path >transfer.log

根据progress和stats我们记录传输过程中的日志,并输出到transfer.log,同时使用exclude排除大文件,避免传输过慢。

a: 归档文件模式(保留文件的时间戳等),保括了r的递归
z: 使用压缩文件传输
P: 支持断点续传
delete: 会删除目标文件中多出来的东西,保持同步,使得成为远程的镜像,但是有时候我们可能不需要这点,避免同步损毁

参考:


IL Collection

IL Collection

@AikenHong 2022

[[Draft/IL 总结]]: Thx 2 wyz to provide some clus for learnning Incremental Learning.

In this Doc, we may add some related knowledge distill works which is used to design our Incremental Structure.
在这个文档中,我们可能还会添加一些知识蒸馏的相关工作的文献,这些实际上对于我的增量学习架构有一个比较大的启发

  • DER
  • SPPR 没有 get 到方法到底是怎么做的

Introduction 👿

在很多视觉应用中,需要在保留旧知识的基础上学习新知识,==举个例子==,理想的情况是,我们可以保留之前学习的参数,而不发生==灾难性遗忘==,或者我们基于之前的数据进行协同训练,灾难性遗忘是 IL 中最核心的问题。

Incremental 的基本过程可以表示如下[4]
dsa

我们将模型可以划分为以下的两个部分[1]:backbone 和 classifier
split

从 LWF 中我们可以知道经典的 Paradigm,主要有下面的三种来对$\theta _S$ 和$\theta_o$来进行更新:

  • 仅重新训练分类器:仅更新$\theta_o$
  • 微调特征提取器,重新训练分类器
  • 联合训练

基于蒸馏架构的方法


WYZ-IL-Collection

WYZ-IL-Collection

: hammer: 王耀智

Regularization 系列方法

这类方法旨在添加一些正则化损失来解决 catastrophic forgetting 的问题。

Weight Regularization

这类方法一般是对网络中每个参数的重要性进行评估,根据每个参数的重要性和梯度信息更新参数。

典型的文章为 EWC .

PS: 这类文章我也没有读过。

Data Regularization

这类方法专注于记住特征表示,通常是结合 Hinton 的知识蒸馏损失函数使得模型记住旧类别的知识,解决 catastrophic forgetting。

推荐以下几篇文章:

  • LwF(Learning without forgetting),这篇文章在我看来是增量学习的开山之作,第一次给增量学习找到了一个比较好的方向,也是第一次将知识蒸馏应用到增量学习上;
  • PODNet CVPR2020 ,这篇文章最大的贡献在我看来是设计了一个全新的蒸馏损失函数,最终结果也是达到了当时的sota,甚至目前也是几个榜单的sota。

Rehearsal 系列方法

这类方法主要的想法是使用一些旧类别的数据,在新类别到来时使用新旧数据一起训练模型,根据旧类别数据的真假分为以下两种方法。


LT Collection

LT Collection

LT-Collections

@AikenHong 2021

Code of must of those methods
We will analysis those tricks on LT situation, and Analysis why it works.
在进行LT矫正的任务中,有几种常见的trick在各种模型中被使用,我们会对这几种不同的trick进行介绍和分析。

其实在数据量少这一方面LT和Few-Shot是有一定的OverLap的,可以参考以下那边的思路perhaps

Introduction

LT
通常情况下这种严重的类别不平衡问题会使得模型严重过拟合于头部,而在尾部欠拟合

首先介绍 bag of tricks 这篇论文中总结了一些常用的Trick,并组合出了最佳的一套trick

经过该文实验总结,Trick组合应该是[1]`

  • 在前几个epoch应用input mixup数据增强,然后后面fine-tuning;
  • (基于CAM的)重采样来重新训练分类器;

实际上就是MixUp + Two-Stage的策略,后续对Mix-up这个策略带来的作用要进行补充了解一下

Rebalance


Loss-NCE

Loss-NCE

@AikenHong 2021

Noise Contrastive Estimation Loss = NCE Loss 噪声对比估计损失,这里的Noise实际上就是Negative Samples.
该损失被广泛的用于对比学习的任务,而对比学习广泛的作为自监督学习的无监督子任务用来训练一个良好的特征提取器,于是对于对比学习的目标和效用的理解十分关键。

What’s NCE Loss

在介绍NCE之前我们可以将其和CE进行一个简单的对比,虽然名称上不是同一个CE,但是在数学表达上却有很相近的地方(softmax-kind of loss)

首先softmax,他保证所有的值加起来为一,结合onehot的ce,实际上j==gt的情况下外层+log也就是ceLoss,也就是 $logSoftmax$

然后看infoNCE,基础的对比学习损失可以写成:

其中 $f_x^T f_y^T$ 为 $sim(x,y)$ 时即转化为带$T$的NCE,即InforNCE.

分子是正例对的相似度,分母是正例对+所有负例对的相似度,最小化infoNCE loss,就是去最大化分子的同时最小化分母,也就是最大化正例对的相似度,最小化负例对的相似度。

从该形式上看,和soft的CE形式上是统一的,当我们把分母看作概率和自身以及和其他的相似性,这样和NCE在形式上和简化后的CE实现了统一。

但是我不认为这和label smooth 后的CE有相关性,而是和原始的CE经由One-hot简化后结构上有相似性。

How it Works

NCE的思想是拉近相似的样本,推开不相近的样本,从而学习到一个好的语义表示空间,这一点上实际上和度量学习的思想是一样的,只是对比学习通常作用在无监督或者自监督的语境中,度量学习这是有监督的。

考虑之前人脸匹配的研究,使用 “Alignment and Uniformity on the Hypersphere”中的Alignment and Uniformity,就是一个更好理解他的角度


Loss-Smooth(Sharpen)

Loss-Smooth(Sharpen)

@AikenHong 2021
@topic

  • smooth label (inception v2)
  • when does label smoothing help (nips 2019)
  • sharpen in semi-supervised in the future
  • offical code github

不是一个通用的方法,在很多的任务上反而会导致掉点的现象,可以简单分析一下,汲取一下思想和Sharpen做对比,在这篇文章中,我们可以结合之前的人脸对比损失来进行分析。

What’s the smooth label

首先介绍在图像分类任务中对logits和Hard label做ce得到我们的损失,可以表现为如下的形式:

由于我们的标签是一个hard label,实际上可以转化成一个one-hot,即

而soft label实际上做的是将 1的位置变为$1-\alpha$,其他位置设置为$\alpha/(K-1)$,然后再去求CE,

Hinton论文中给出该损失对特征分布的作用测试图: