Day 2 --- OpenMMLab系列之图像分类算法基础

计算机视觉框架OpenMMLab(三):图像分类实战 本篇主要偏向图像分类实战部分,使用MMclassification工具进行代码应用,熟悉其框架应用,为后续处理不同场景下分类问题提供帮助。 阅读详情

一、图像分类基础

任务目标:给出图像识别出图像内物体
在图像分类任务中,往往将图像理解为由像素所构成的数组X∈RH×W×3X \in \mathbb{R}^{H \times W \times 3}X∈RH×W×3,同时对所检测物体进行编号y∈{1,...,K}y \in \{1,...,K\}y∈{1,...,K},最终构建出一个抽象函数F:RH×W×3→yF:\mathbb{R}^{H \times W \times 3} \rightarrow yF:RH×W×3→y,从而完成对图像中物体的分类。
但由于图像内容往往与单个像素无关,而与其表现出的特征有关,因此对于图像分类任务,无法设置具体的规制使得算法对图像完成分类,而是需要构建出模型,获取到具体的图像特征,根据该特征完成对物体的分类。

机器学习的局限

传统机器学习任务在处理图像分类任务时,由于图像数据往往在高维空间中以复杂方式进行缠腰(如下图),仅靠常规的机器学习算法很难处理这种复杂分布的数据,因此需要手动设计特征。
image.png
在特征工程中,人们通过手动设计特征(如HOG),提取出高维图像内的特征并将其转化为低维特征向量,在保留大部分物体信息的前提下,极大降低数据维度,最后根据机器学习算法对低维数据进行处理完成分类。例如2010年ILSVRC冠军方案NEC-UIUC,通过手工设计特征+机器学习方法将Top-5错误率降低到了28%左右。但此后受限于信息丢失,在视觉任务中基本达到了性能瓶颈。

深度学习:

不同于传统机器学习方案,深度学习标志着图像任务从特征工程时代开始步入特征学习时代。通过卷积(CNN)、多头注意力(Transformer)等可学习的特征提取模块进行复合,构建出一个端到端的复杂分类器,轻松实现图像特征提取,大幅度提高了检测精度。
image.png

二、神经网络与模型学习策略

神经网络设计

自AlexNet在ILSVRC横空出世后,图像任务正式步入深度学习时代,大量优秀的神经网络结构开始涌现,下面主要对几种经典内容进行介绍分析:

  1. AlexNet

    作为第一个吃螃蟹的,AlexNet所做的工作不仅仅只有将深度学习方法带入视觉领域,研究团队使用ReLU函数取代了常用的Sigmoid函数,大幅度提高了收敛速度。
    image.png
    同时团队通过实现并开源cuda-convnet,首次将大规模神经网络在GPU上进行训练,在当时那个以CPU训练为主流的环境中,显著提升了训练速度,为后续研究也奠定了良好的基础

  2. VGG

    对于VGG来说,其特点更多在于将此前的5×55 \times55×5大尺寸卷积核拆解为了两个3×33\times33×3卷积,这种做法在保证了相同感受野的同时,具备更少的参数量和更多的层数和表达能力。
    image.png
    以一个尺寸大小为xxx的图像为例,假设padding为1:

    • 5×55 \times55×5:横纵向各滑动(x−5+1)(x-5+1)(x−5+1)次,所得输出图大小为(x−4)×(x−4)(x-4)\times(x-4)(x−4)×(x−4)
    • 3×33 \times 33×3:其中第一个3×33\times33×3卷积核卷积后,所得输出图大小为(x−3+1)×(x−3+1)(x-3+1)\times(x-3+1)(x−3+1)×(x−3+1),在该输出图的基础上继续应用第二个卷积核,最终所得输出图大小为(x−3+1−3+1)×(x−3+1−3+1)(x-3+1-3+1)\times(x-3+1-3+1)(x−3+1−3+1)×(x−3+1−3+1),即(x−4)×(x−4)(x-4)\times(x-4)(x−4)×(x−4)

    可以发现二者所得输出图尺寸相同,即二者**感受野相同,**在感受野相同的情况下,计算二者参数量:

    • 5×55\times55×5:5×5×in_ch×out_ch5\times5\times in\_ch \times out\_ch5×5×in_ch×out_ch
    • 3×33\times33×3:2×3×3×in_ch×out_ch2\times3\times3\times in\_ch \times out\_ch2×3×3×in_ch×out_ch

    发现前者参数量是后者的1.39倍,但大卷积核也并非无用,由于有效感受野的大小是正比于卷积核大小,因此大卷积核可以增加有效感受野,这一点是小卷积核无法替代的,ConvNeXt中7×77\times77×7大尺寸卷积核的使用就是个明显的例子。

  3. ResNet

    由于CNN中网络深度越深,其特征层次越丰富,因此网络模型纷纷开始追求更深的深度,但随着模型的加深,精度退化问题开始凸显,由于ReLU在反向传播时带来的不可逆信息损失,更深的层次往往精度不增反降。
    image.png
    为了缓解精度退化问题,ResNet在设计时引入Skip Connections来实现**恒等映射,**通过跳接在激活函数前,将上一层的输出与本层输出相加,将求和的结果输入激活函数作为本层的输出,即H(x)=F(x,Wi)+xH(x)=F(x,W_i)+xH(x)=F(x,Wi​)+x,其中F(x,Wi)F(x,W_i)F(x,Wi​)就是需要学习的残差。
    ResNet 效果好的原因:

    • 等同于多模型集成,残差网络有 𝑂(2 𝑛 ) 个隐式的路径来连接输入和输出,每添加一个块会使路径数翻倍
    • 使得loss 曲线更加平滑,更容易收敛到全局最优解,可参考论文(Visualizing the Loss Landscape of Neural Nets)

image.png

  1. ViT与Swin Transformer

    在介绍ViT之前,首先需要对注意力机制和Transformer有所了解。
    虽然注意力机制与卷积都注重实现层次化特征,即对空间邻域内的前层特征加权求和,权重越大表示对应位置的特征就越重要。
    但在卷积中,权重是可学习的参数,与输入无关,受限于局部感受野仅建模局部关系,其对于远距离的关系只能通过多层卷积去建模实现,但由于池化的存在,使得多次池化后达到理论全局感受野,但实际感受野要小得多。注意力机制则很好的弥补了这一点,其权重是输入的函数,且不受限与局部,通过时空关系可直接显示的建模全局感受野。
    image.png
    Vision Transformer(ViT)
    ViT是在Transformer的基础上诞生而来的,由于在NLP任务中,Transformer受限于结构常用于处理一维数据,因此在迁移到视觉领域后,需要将图像切分成若干16×1616\times1616×16的小块(Patch),并将这些小块组合成一列向量输入到Transformer的Encoder层中进行处理
    image.png
    Swin Transformer
    与NLP相比,Transformer应用在视觉领域有两个难点:

    • 物体尺度变化大,ViT无法处理多尺度问题
    • 图像像素点数量要远大于文本数量,无法直接当作token处理,但采用ViT中的Patch作为输入会使得特征非常粗糙,无法处理精细任务。

    基于上述问题,Swin Transformer的主要思想是把建模能力很强的transformer和视觉信号的先验联系起来,这些先验具有层次性、局部性和平移不变性,具体做法是用shifted window来建立分层特征图,有了分层特征图就可以用FPN/Unet等结构去做密集预测的任务,而且计算量与图片尺寸成正比。
    image.png

模型学习

目前在深度学习任务中,模型的学习常见的是监督学习和自监督学习两种学习方法,下面对着两种方法进行介绍。

监督学习
  1. 获取标注后的数据集,包括图像XiX_iXi​和标签yiy_iyi​

  2. 定义损失函数L:[0,1]K×N→RL:[0,1]^K\times \mathbb{N} \rightarrow \mathbb{R}L:[0,1]K×N→R,模型会依据损失函数来计算预测值和标签的差距,以此衡量单个预测结果的好坏

  3. 求解最优化问题,获取使得总Loss值最小的参数(梯度下降)

    image.png

自监督学习
  1. 通过设计辅助任务,使得模型在大规模无标注数据中通过**前置任务(Pretext Task,也叫辅助任务)**去自动构建监督信息,以此获取预训练模型

  2. 对于新的下游任务,采用监督学习方法迁移预训练模型参数,并以此在下游任务中进行微调即可。

    image.png

三、模型训练时的常用策略

学习率与优化器策略

  1. 权重初始化
    • 随机初始化:朴素方法、Xavier方法以及Kaiming方法(主要针对ReLU)
    • 预训练模型:采用预训练模型进行权重初始化,通过替换预训练模型的分类头进行finetune
  2. 学习率策略
    • 退火(Annealing):在训练初始使用较大学习率,待损失稳定后对学习率进行降低,常按步长、倒数、比例以及余弦函数对学习率进行下降。
    • 升温(Warmup):在训练前几轮学习率逐渐上升,直到预设的学习率,以稳定训练的初始阶段
    • Linear Scaling Rule:针对同一个训练任务,当 batch size 扩大为原来的 𝑘 倍时,学习率也应对应扩大 𝑘 倍,例如预训练模型使用 lr=0.1,8卡数据并行训练,如果希望用1卡复现实验,lr 应设置为 0.0125,进行等比例缩小。
    • 自适应梯度算法:不同的参数需要不同的学习率,根据梯度的历史幅度自动调整学习率
  3. 优化器策略
    • 正则化与权重衰减(Weight Decay):该方法常用于应对过拟合问题,通过为模型Loss函数添加正则化项作为惩罚项,来使得学出的模型参数值较小。这种通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制的方法,在应对过拟合问题时常常有效。
    • 早停(Early Stopping):当验证集的分类精度达到最值时,停止训练,防止模型过拟合
    • EMA:复制一份模型所有权重的备份(记为EMA_weights),训练过程中每次更新权重时同时也对EMA_weights进行滑动平均更新,训练阶段结束后用EMA_weights替换模型权重进行预测。更新流程如下:
      • Weights∗=Weights+LR∗Grad(模型正常的梯度下降)Weights^*=Weights+LR*Grad (模型正常的梯度下降)Weights∗=Weights+LR∗Grad(模型正常的梯度下降)
      • EMA_weights=EMA_weights∗decay+(1−decay)∗Weights∗EMA\_weights=EMA\_weights*decay+(1-decay)*Weights^*EMA_weights=EMA_weights∗decay+(1−decay)∗Weights∗
    • Stochastic Weight Averaging:原理同 EMA,但在训练末期使用较高的学习率,在损失平面的平坦区域上做更多的探索,最后平均模型

模型设计策略

  1. Dropout:

    为保证神经网路在训练时,各神经元之间由于**共适应现象(co-adaption)**出现高度关联导致过拟合,因此在训练时引入Dropout层,通过随机丢弃一些连接,破坏神经元之间的关联,使得神经元学习独立的特征。
    但需要注意的时,该方法仅在训练时使用,推理时无须Dropout
    image.png

  2. 随机深度(Stochastic Depth)

    个人理解该方法有点类似Dropout,只不过将丢弃单位由神经元扩大到网络层,通过在训练时随机丢弃部分无用的网络层,最后利用不同的深度训练,相当于潜在地融合了多个不同深度的网络,达到对速度和性能优化的目的
    image.png

大模型和任务型对话系统如何结合 三种方法都是基于prompt1.prompt中定义大量可分类的domain标签,每种标签含有的样例。走对话系统nlu常规步骤,domain分类,意图分类,slot提取等。缺点:需要很复杂的prompt,写的未必完善。需要多次调用llm2.prompt中定义每种query下可以调用的functioncall。3.也是基于prompt,可以管理对话主题,实现更丰富的话题流转。面向某个具体领域,没有细分的domain类别。 阅读详情

相关推荐

Python+Vue计算机毕业设计风电场监控系统的设计与实现7bd6i(程序+LW+源码+部署)

Python3.7.7+Django+Mysql5.7+pip list+HBuilderX(Vscode也行)+Vue+Pychram社区版。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2.IDE环境:Python和Python 社区版都可以。Django + Vue +Python+Mysql 等等组成,B/S模式等等。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。1. 后端:Python、Vue、Django、Mysql。

华信计算机毕设源码程序 341

图像分类算法

特征提取:通过一系列的特征提取算法从图像中提取出代表图像信息的特征向量,例如颜色、形状、纹理等特征选择:从提取出的特征向量中选择出最具代表性的特征,以提高分类效果。分类器训练:使用标注好的训练数据集,通过训练分类器来学习不同类别之间的区别和相似性。分类器测试:将训练好的分类器应用到测试数据集中,对每个图像进行分类。支持向量机(Support Vector Machine, SVM):是一种常用的监督学习算法,通过构建超平面将数据分成不同的类别,适用于二分类和多分类任务。

qq_45390952的博客 4178

硬件作品3----STM32F103RCT6最小系统板MCU配置

电路未调试成功,目前刚打板,后续需要补充或者改版另行注明。

weixin_58364194的博客 5562

图像分类传统算法和深度学习算法简单介绍

图像分类是计算机视觉领域的一项基本任务,旨在根据输入图像将其预测到一个或多个类别中。本文档将详细介绍一些常用的图像分类算法,包括传统方法和深度学习方法。

百年孤独百年的博客 6872

硬核干货|C#+EtherCAT协议:高精度多轴伺服运动控制通信实战

本文摘要: 文章聚焦工业自动化领域多轴伺服运动控制的高精度与实时性需求,基于C#与EtherCAT协议实现完整解决方案。EtherCAT凭借微秒级同步、分布式架构等优势成为首选,而C#通过优化GC策略和实时线程可满足工业控制要求。文章从工程落地角度,详细拆解EtherCAT的PDO/SDO通信机制与多轴同步控制逻辑,提供完整的C#代码实现(主站初始化、伺服配置、运动控制等),所有代码均通过汇川/松下伺服实测验证。核心亮点包括:纯C#原生开发、工业现场高频问题解决方案、硬件适配指南,帮助开发者快速掌握高精度多

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 582

Unity插件NodeCanvas之行为树的详细教程

NodeCanvas 是一个用于 Unity 的可视化脚本工具,主要用于游戏开发中的行为树、状态机和流程图的设计。它通过节点编辑器的方式,让开发者可以更直观地创建和管理游戏逻辑,减少了传统编码的复杂性。今天我们就来详细介绍一下NodeCanvas插件。

TxNet 1958

图像分类算法—KNN、SVM、BP、CNN

seek97的博客 2万+

大模型的应用与微调:如何调用 LLM?从 OpenAI API 到本地部署

本篇文章介绍了如何调用 OpenAI、DeepSeek、Manus、通义千问等大模型 API,并探讨了 LLM 本地部署的方法。在实际应用中,可以根据需求选择云端 API 或本地化部署方案,以满足不同的计算需求和隐私要求。下一篇:大模型微调与 RAG 技术(LoRA、QLoRA、向量数据库)

晴天彩虹雨的博客 1157

图像分类方法总结

1. 图像分类问题描述 图像分类问题是计算机视觉领域的基础问题,它的目的是根据图像的语义信息将不同类别图像区分开来,实现最小的分类误差。具体任务要求是从给定的分类集合中给图像分配一个标签的任务。总体来说,对于单标签的图像分类问题,它可以分为跨物种语义级别的图像分类,子类细粒度图像分类,以及实例级图像分类三大类别。因为VOC数据集是不同物种类别的数据集,所以本文主要研究讨论跨物种语义级别的图像分类任务。 通常图像分类任务存在以下技术难点: (1)视角变化:同一个物体,摄像机可以从多个角度来展现。 (2)大小变

学习日常分享 2万+

扩充两个三维体积:ITK实现

在医学图像处理中,经常需要进行 3D 体积的操作,比如合并、分割等。而 ITK (Insight Segmentation and Registration Toolkit) 是一个常用的开源库,可以用于实现各种医学图像处理算法。这篇文章将介绍如何使用 ITK 实现扩充两个三维体积的操作。不过以上代码已经足够简单明了地演示了如何使用 ITK 实现扩充两个三维体积的操作。首先,我们需要准备两个三维体积的数据。这里假设这两个体积大小相同,并且已经加载到内存中了。来读取和保存体积数据,使用了。

CodeVorter的博客 204

C#使用OpenCvSharp+微信模型识别多个二维码

本文介绍了一个基于OpenCvSharp和微信开源二维码检测器的多二维码识别项目。该项目通过C# WinForm实现,主要功能包括:加载图片、识别图片中的多个二维码并显示识别结果。核心代码使用了OpenCvSharp.WeChatQRCode类,通过预训练的caffe模型(detect.prototxt/detect.caffemodel和sr.prototxt/sr.caffemodel)进行二维码检测和解码。识别结果包括每个二维码的编号、内容及位置信息。项目适用于批量二维码识别场景,部署简单,识别效果良

遇见--专栏 123

OpenMMLab Day2 图像分类及基础视觉模型

图像分类

kongqi404的博客 194

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OpenMMLab 计算机视觉 # day2: 图像分类与基础视觉模型

openmmlab cv day2

skysys的研究小屋 1192

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OpenMMLab AI实战营Day2 图像分类

OpenMMLab AI实战营Day2 图像分类

一只大憨憨的博客 699

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OpenMMLab寒假Day2

数据增强 训练泛化性好的模型,需要大量多样化的数据,而数据的采集标注是有成本的。图像可以经过简单的变换产生一系列“副本”,扩充训练数据集。数据增强常见的有几何变换、色彩变换、随机遮挡,这些操作可以自由组合以生成更复杂的图像数据。

weixin_47375575的博客 177

OpenMMLab 计算机视觉 # day1: 计算机视觉基础与OpenMMLab开源算法体系

OpenMMLab 计算机视觉学习打卡第一天

skysys的研究小屋 778

OpenMMLab学习 Day2

机器学习基础知识

qq_45894533的博客 205

day1-OpenMMLab概述

部署框架MMDeploy算法框架MMPretrain:预训练+多模态MMDetection:目标检测MMDetection3D:3D目标检测MMRotate:旋转目标检测MMSegmentation:语义分割MMPose:姿态估计MMAction2:视频动作分析MMOCR:光符识别MMagic:底层视觉+AIGCMMYOLO:目标检测MMFlow:光流估计MMTracking:目标跟踪MMHuman3D:人体参数化模型。

kkz2756275580的博客 642

Day 1 --- 计算机视觉与OpenMMLab开源算法体系

CV基础与OpenMMLab体系

selectnothing的博客 235

【七班】OpenMMLab 开源项目介绍【OpenMMLab AI实战营第二期Day1】【文末有福利】

第二次参加OpenMMLab举行的AI实战营活动啦,有幸担任七班班长和上一期1班同学做搭档(卫同学是我的助教大人,星星眼!开营仪式后,同济子豪兄概述了OpenMMLab和其下的各开源算法库。高能提醒:文末有彩蛋!!入门计算机视觉神器OpenMMLab目录写在前面课程安排OpenMMLab总体框架与现状主要CV库介绍MMPretrain (最新发布)主要特性MMpose 以及RTMPoseMMagicMMDeploy 模型终端部署下面是会首先放上本次课的课程安排,然后是笔记正文,同班的同学们一起加油鸭!

chenghong1的专栏 648

OpenMMlab AI实战营 打卡笔记DAY1

OpenMMLab AI实战营 打卡笔记DAY1

weixin_49644231的博客 368

【OpenMMLab AI实战营Day2笔记】通用视觉框架OpenMMLab图像分类与基础视觉模型

OpenMMLab AI实战营第二期课程笔记,通用视觉框架OpenMMLab图像分类与基础视觉模型。

m0_62104692的博客 421

【OpenMMLab通用视觉框架 AI训练营 学习笔记 DAY(二)图像分类与基础视觉模型】

知道了视觉任务的难点是,图像的内容是像素整体呈现出的结果,和个别像素的值没有直接关联,难以遵循具体的规则设计算法。我们对其猜想:虽然深层网络有潜力达到更高的精度,但常规的优化算法难以找到这个更优的模型即,让新增加的卷积层拟合一个近似恒等映射,恰好可以让浅层网络变好一点。后面介绍了上面是注意力机制–Attention Mechanism,简单来说,就是卷积核并不是一直不变的,而是根据你输入的图片进行调整,从而抓取更重要的信息,这刚开始是运用于语言学方面的。后续课程讲到的都是一些降低模型参数两和计算量的方法。

LL_RF的博客 374

OpenMMLab Day03

openMMlab MMClassification介绍

kongqi404的博客 172

OpenMMlab学习-day1

【代码】OpenMMlab学习-day1。

weixin_45485986的博客 68

OpenMMlab AI实战营第二期-day1

MMPose 是一款基于 Pytorch 的姿态估计开源工具箱,是 OpenMMLab 项目的成员之一,包含了丰富的 2D 多人姿态估计、2D 手部姿态估计、2D 人脸关键点检测、133关键点全身人体姿态估计、动物关键点检测、服饰关键点检测等算法以及相关的组件和模块。它还支持了大多数流行的学术数据集,并提供了许多实用工具帮助用户对数据集和模型进行多方面的探索和调试,助力优质模型的产出和落地。MMDetection 是一个目标检测工具箱,包含了丰富的目标检测、实例分割、全景分割算法以及相关的组件和模块。

m0_55508602的博客 270
上一篇: Day 1 --- 计算机视觉与OpenMMLab开源算法体系
下一篇: Day 3 --- MMClassification工具包
Aaaaaki
博客等级 码龄9年 884粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaaaaki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值