aiken's blog
  • home
  • archives
  • search
  • Aiken's Blog
  • home
  • posts
  • tags
  • categories
  • archives
  • about
  • search
  • linklog
Home » Categories

Machine_Learning

Data Augmentation

intergrate with those augmentation method. this doc will Record those theory and the effect after transformation Show the codes for ez use And the complete .py will be intergrate in my classification pipeline reference below:arrow_down_small:, if use them,start it for respect for his work. aleju/imgaug :star:albumentations-team/albumentations: torchvision PIL/ImageEnhance CCBS opencv Principle Principle 1 of coding: Don’t reinvent the wheel unless it’s needed 具体而言,仅在函数的拓展性较差,无法对其定制化,满足我们的日常需求的时候,我们会自行编写函数从而满足我们的需求,否则我们直接引用已知的库,提升我们的实现效率。 Principle 2 of coding 图像增强的两种使用方式: 做全集的增强后存储在本地,然后通过随机载入或者按一定batch的载入来实现我们增强的作用,(or contrasive),这种方式实际上是使用空间来换时间,由于处理是一次性的,所以如果空间充足的话,是更为充足的方式。 ...

November 28, 2021 · 3 min · 518 words · aikenhong ·  ML-DataProcessing
#ML-DataProcessing

Hard Task Sampling

Trick:Hard Task 思路来源于Meta-Tranfer-Learning,基本思路是在Meta-Learning的每一次Meta-Test的时候,会从预训练错误率比较高的Task中再次采样,增加那些task的训练次数。也就是难题多做的策略。 基本思路 对比Adaboost 这样的思路其实和AdaBoost的想法是有一定的异曲同工之妙的,或者说其实就是AdaBoost的思路: Adaboost 参考笔记 ,从该笔记中我们可以看到,AdaBoost的基本思路如下: Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器. 和Meta-Transfer-Learning对比一下,我们可以发现,这个方法实际上就是讲Transfer Learning的与训练网络当成弱学习器1,然后通过弱学习器1的训练样本权重,来增大Hard-Task的配比(也就是增加任务的权重)完全一致。 具体实现 实现上主要是,样本sample的过程,就是如何在进行参数选择后和原本的Dataloader,结合起来。在这里我们主要参考MTL中的方法,进行网络的构建处理。 第一部分:sampler构建,为了后续Dataloader中进行数据的采样,需要构建一个这样的sampler,关键在于index的对应关系,以及最后输出的是index的集合。 python import torch import numpy as np # 注意的点,我们需要确定我们batch数目,cls数目和每次每个cls选出多少个数据per # 紧接着定义一个sample,sample输出的是对应原dataset中的数据的index, class CatagoriesSampler(): def __init__(self, label, n_batch, n_cls, n_per): self.n_batch = n_batch self.n_cls = n_cls self.n_per = n_per label = np.array(label) # 根据不同的label输入情况,我们可可能需要找到每个label对应的样本的index,将其整合在一起。如下(option) self.m_idx = [] for i in range(max(label)+1): idx = np.argwhere(label==i).reshape(-1) idx = torch.from_numpy(idx) self.m_idx.append(idx) def __len__(self): # 要注意一下这里数据的长度是根据我们要输出的batch数目决定的 return self.n_batch def __iter__(self): # 直接定义每次采样的时候的batch输出 for i_batch in range(self.n_batch): batch = [] classes = torch.randperm(len(self.m_idx))[:self.n_cls] for c in classes: # 随机选择出的类标签 l = self.m_idx[c] # 随机选择样本 random_pos = torch.randperm(len(l))[:self.n_per] batch.append(l[random_pos]) # stack t and reshape的作用👇 # stack 变成n_cls * n_per , t转置,reshape(-1)变成行向量 batch = torch.stack(batch).t().reshape(-1) yield batch 第二部分:直接调用部分 ...

November 28, 2021 · 1 min · 139 words · aikenhong ·  ML-Training
#ML-Training

并行训练

How to Train Really Large Models on Many GPUs? (lilianweng.github.io) 对于浮点运算,模型参数的存储和中间计算输出(梯度和优化器状态)的存储的在 GPU 内存上的大量需求使得我们需要并行化,下面我们参考一些常用的并行化范式: 数据并行策略: 在Multi-GPUs上Duplicate模型,然后分别feed数据,进行运算,每个batch同步或者异步的进行多卡间的梯度传递和模型同步。 同步可能会导致每个batch需要停止训练,异步则是可能会使用陈旧的梯度进行一段时间的训练,增加了计算时间。 而在PT1.5以来,使用一种中间的方式:每隔x次迭代,进行多卡间的全局同步梯度一次,使用这种梯度积累的策略,根据计算图来进行计算和通信调度的优化,提高吞吐量。 模型并行范式: 是为了解决单模型过大无法存储在单一的Node上的问题,但是这样会有GPU间的顺序依赖,虽然减少了内存的占用和计算量,但是这种IO的需求导致计算资源的利用率严重不足。 在这种pipeline中,就存在利用率的bubble,也就是空白的部分 Pipeline并行策略: 混合模型和数据并行的策略,来减少低效时间的泡沫,也就是,将一个batch切分成多个小batch,然后分发到每个node上,减少相应的等待时间,只要我们对计算量和运行速度有合理的把握,就能极大的降低这个inefficient time bubbles. 多个mini-batch的梯度聚集起来最后同步更新. 最有情况下甚至可以忽略气泡的开销 $$ 1- \frac{2md}{(2m+2(d-1))d} = \frac{d-1}{m+d-1} $$ m个mini-batch和d个分布, bubble的比例将如上述所示 ...

November 28, 2021 · 1 min · 72 words · aikenhong ·  Parallel_Training ·  ML-Training
#Parallel_Training #ML-Training

MIM-V-simMIM

@Author: MSRA Zhenda Xie @Source:Arxiv , Code TBP ,Blog_CVer @Read:AikenHong 2021.11.22 “What I cannot create, I do not understand.” — Richard Feynman Intro & Simple Conclusion Conclusion 继MAE和iBoT之后,MSRA也提出了一个图像掩码建模的新框架,SimMIM,该方法简化了最近这些提出的方法,不需要特殊设计,作者也验证了不需要那些特殊设计就已经能让模型展现出优秀的学习能力 采用中等大小的掩码块(32),对输入图像进行随机掩码,能使其成为强大的代理任务(pretext task) 直接回归预测原始像素的RGB值的效果并不比复杂设计的Patch分类方法差 Projector Head可以是轻量的Linear Layer,效果并不一定比MLP(多层)的差 Motivation 通过这种MIM方法可以实现在大量无标注的数据上得到一个表征能力up的通用特征模型,这种方式的backbone可以广泛的应用到图像上的各种子任务中(按照NLP)的经验来说,而为了类似的方式在图像上的大放异彩,我们首先需要分析Vision和Language的不同 图像有更强的局部关系:相互靠近的像素是高度相关和近似的,我们可以通过简单的copy padding复制一部分缺失 视觉信号是原始,低层次的,而文本分词是高级概念:对低层次信号的预测是否对高层次的视觉识别任务有用呢? 视觉信号是连续的,而文本的分词是离散的: 如何基于分类的掩码语言建模方法来处理连续的视觉信号 Theoretical Design 掩码选择:同样的掩码的策略还是基于Patch进行的,对于掩码的设计来说,太大的掩码快或者太密集的掩码快,可能会导致找不到附近的像素来预测,实验证明32是一个具有竞争力的size,和文本任务的信息冗余程度不同也带来了覆盖比的选择,NLP通常是0.15,而在V中,32size可以支持0.1-0.7的覆盖率。 任务选择:使用原始像素的回归任务,因为回归任务和具有有序性的视觉信号的连续性很好的吻合。 预测头选择:使用轻量的预测头如(linear),迁移性能与繁琐的预测头相似或者略好,同时训练上更加的块。虽然较大的头或更高的分辨率通常会导致更强的生成能力,但这种更强的能力不一定有利于下游的微调任务。 ...

November 23, 2021 · 1 min · 101 words · aikenhong ·  SSL
#SSL

Transformer

@aikenhong 2021 References For Transformer: NLP The Transformer Family (lilianweng.github.io) VIT Transformer眼中世界 VS CNN眼中世界 李沐 NLP Transformer论文精读 Suveys cver1 , cver2 ,cver3 This blog will divided into several part : lil’s blog, the survey for ViT, we using those article to help us understand the transformer. 综述我们以最新的一篇为准进行阅读,其他的可能后续进行查缺补漏把,如无必要,勿增烦恼。 Intro导言 主要参考文章2来进行我们简单的导入 基本问题 Transformer原本是NLP中的重要模型, 作为LSTM的后继者, 用于处理Seq2Seq的数据类型和情景, 若是要将Transformer运用到Vision的领域中, 首要的问题就是如何: 将Image作为序列化的Token输入Transform中 , 而达成这个目的主要有三种典型的方法: 像素点作为token, 使用VAE离散化图片作为token再输入 ViT: 将图片切为一个个Patch在经过线性的projector之后组成一个embedding表示进行交互 ...

November 23, 2021 · 1 min · 103 words · aikenhong ·  ML-Backbone
#ML-Backbone

MIM-V-iBOT

@Read: AikenHong 2021 @Author: https://arxiv.org/abs/2111.07832 @解读:Machine Heart 基本思想 基于NLP中的MLM(Masked Language Model)的核心训练目标: 也就是遮住文本的一部分, 然后通过模型去预测和补全, 这一过程是模型学到泛化的特征, 使用这种方法来进行大规模的与训练范式. 在基本的思想上和MAE采用的是一样的设计, 但是本文中坐着认为visual tokenizer的设计才是其中的关键. 不同于 NLP 中 tokenization 通过离线的词频分析即可将语料编码为含高语义的分词,图像 patch 是连续分布的且存在大量冗余的底层细节信息。而作者认为一个能够提取图像 patch 中高层语义的 tokenizer 可帮助模型避免学习到冗余的这些细节信息。作者认为视觉的 tokenizer 应该具备两个属性:(a)具备完整表征连续图像内容的能力;(b) 像 NLP 中的 tokenizer 一样具备高层语义。 文中对tokenizer的设计为一个知识蒸馏的过程: 文中使用这种在线tokenizer同时来监督这样的MIM过程, 也就是两部分协同学习, 能够较好的保证语义的同时并将图像内容转化为连续的特征分布, 具体的, tokenizer和目标网络狗狗想网络结构, 有移动平均来得到实际的tokenizer. ...

November 18, 2021 · 1 min · 133 words · aikenhong ·  SSL
#SSL

MIM-V-MAE

@Author:Facebook AI Research-Kaiming He Kaiming-MAE Conclusion 总而言之这是一种大模型的训练方法, 通过在少量数据的基础上实现大模型的训练. 整体的架构上是参考了NLP中的AutoEncoder机制,将原图切分patch,用mask掩盖原图,通过少量可见的Patch进行Encoder后和Mask融合,再通过非对称的Decoder进行pixel的还原。 这种设计的有点在于mask的scala是可变的,同时这种mask能减少我们训练过程中对显存和计算复杂度的损耗,同时问题本身是一个比较复杂的问题,得以训练复杂的大模型,这种方式最终呈现的效果就是训练的效率高且效益好。 体现了自监督学习在这方面的优越性,同时这种方法得以实现也是由于ViT模型对于CNN模型的取代,才使得这种序列化切块的方式容易实现和验证。 这种方式在最终体现了自监督学习对于有监督与训练的优越性,使用这种方式能够更好的得到一个模型的通用表征。 在这里论文中也说明了和NLP的不同点以及这样的模型对于decoder的要求实际上是比NLP更高的 experiment Masking:对于输入的图像进行均匀的切分并均匀的随机采样 MAE encoder: 简单的ViT模型,对输入图像进行编码后和Mask进行混合得到一个完整的令牌集合,从而确保Decode能够得到对应的位置信息。 MAE decoder:轻量级的架构,可以独立于编码器进行设计,我们使用更窄更浅的网络,计算量比编码器10%更小,这样能够更快的进行训练。解码器的最后一层是先行投影,输出的数量==补丁中像素值的数量,最后会resize层原图的维度。

November 15, 2021 · 1 min · 20 words · aikenhong ·  SSL
#SSL

OWL-survey

@AikenHong2021 OWL 分析现有的OWL特点,和当前自己的研究做一个区分,也汲取一下别人的研究的要点, Reference arxiv @ self-supervised feature improve open-world learning arxiv @ open-world semi-supervised learning arxiv @ open-world learning without labels arxiv @ unseen class discovery in open-world classification arxiv @ Open-World Active Learning with Stacking Ensemble for Self-Driving Cars www @ open-world learning and application to product classification cvpr @ open world composition zero-shot learning cvpr @ Towards Open World Object Detection [cvpr](Large-Scale Long-Tailed Recognition in an Open World (thecvf.com) ) @ Large-Scale Long-Tailed Recognition in an Open World Conclusion Papers Mulit Open world Learning Definition ...

November 12, 2021 · 1 min · 180 words · aikenhong ·  Survey ·  Open-World Learning
#Survey #Open-World Learning

SS_OD_SoftTeacher

@ Article: ICML from Microsoft & Huazhong Keda @ Code: Github @ Noteby: Aikenhong @ Time: 20210914 Abstrast and Intro in the session we will using describe the main idea of this article. 这篇文章的重点在于Soft Teacher,也就是用pseudo label做为弱标注,逐步提高伪标签的可靠性。 不同于多阶段的方法,端到端的方法再训练中逐步的提升伪标签的质量从而再去benifit目标检测的质量。 这样E2E的框架主要依赖于两部分技术: soft teacher: 每个未标记边界框的分类损失由教师网络产生的分类分数进行加权 box jitter 窗口抖动: 选择可靠的伪框来学习框回归 在目标检测上获得SOTA的效果; Multi-Stage 在半监督的情况下,关注的主要是基于伪标签的方法,是目前的SOTA,以往的方法采用多阶段的方式。 使用标记数据训练初始检测器 未标记数据的伪标记,同时基于伪标签进行重新训练 局限:初始少量标注的局限,初始的检测器的伪标签质量 End to End Soft Teacher基本思路:对未标记的图像进行标记,然后通过标记的几个伪标签训练检测器. 具体而言: 采样标注和未标注图片形成Batch 双模型:检测(student)、标记(teacher) EMA:T模型是S模型的EMA 这种方式避免了多阶段方案实现上的复杂,同时实现了飞轮效应==S、T相互加强; 此外Soft Teacher直接对学生模型生成的所有候选框进行评估,而不是使用伪框来为这些候选框进行分类回归。 这样能使用更多的直接监督信息 具体而言: 使用高阈值来分割前景,确保不会错误的将背景分类成前景,确保正伪标签的高精度; 使用可靠性度量来加权背景候选的损失; 教师模型产生的检测分数可以很好的作为可靠性度量 Box Jitter为了更可靠的训练学生网络的本地分支,指的是: 我们对前景框候选进行多次抖动 根据教师模型的位置分支对这些候选进行回归 将回归框的方差作为可靠性度量 可靠性高的用来训练 Related works Semi-Supervised Learning in Image Classification & object detection ...

October 9, 2021 · 1 min · 211 words · aikenhong ·  Semi-SL
#Semi-SL

StyleGAN

StyleGAN V1 @AikenHong 2020 10.8 《A Style-Based Generator Architecture for Generative Adversarial Networks》 Related Work: 继承的文献工作: ProGAN 参考解读: 《其中子链接值得一看》 (包括源码解析啥的)(甚至还有GAN的笔记) 《StyleGan源码解析和拓展应用》 《秃头生成器1》 《秃头生成器2》 NO.3 Contribution(Problem): 解纠缠:Mapping Network Noise Generator AdaIN before all conv Structure: ...

October 3, 2021 · 1 min · 93 words · aikenhong ·  GAN
#GAN
<< « Prev 1/4 Next 3/4 » >>
© 2025 aiken's blog Licensed under CC BY-NC 4.0 · Powered by Hugo & PaperMod Visitors: Views: