GVKun编程网logo

nolearn用于多标签分类(多标签分类 loss函数)

15

对于nolearn用于多标签分类感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解多标签分类loss函数,并且为您提供关于6HTML标签分类、AI已经把你看得明明白白,YOLO+ByteTra

对于nolearn用于多标签分类感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解多标签分类 loss函数,并且为您提供关于6 HTML标签分类、AI已经把你看得明明白白,YOLO+ByteTrack+多标签分类网络、CPRFL:基于CLIP的新方案,破解长尾多标签分类难题 | ACM MM''24、HTML5标签分类的宝贵知识。

本文目录一览:

nolearn用于多标签分类(多标签分类 loss函数)

nolearn用于多标签分类(多标签分类 loss函数)

我尝试使用从nolearn包导入的DBN函数,这是我的代码:

from nolearn.dbn import DBNimport numpy as npfrom sklearn import cross_validationfileName = ''data.csv''fileName_1 = ''label.csv''data = np.genfromtxt(fileName, dtype=float, delimiter = '','')label = np.genfromtxt(fileName_1, dtype=int, delimiter = '','')clf = DBN(    [data, 300, 10],    learn_rates=0.3,    learn_rate_decays=0.9,    epochs=10,    verbose=1,    )clf.fit(data,label)score = cross_validation.cross_val_score(clf, data, label,scoring=''f1'', cv=10)print score

由于我的数据的形状为(1231,229),标签的形状为(1231,13),因此标签集看起来像([0 0 1 0 1 0 0 0 0 0 0 1 1 0]
…,[。 ..]),当我运行代码时,出现以下错误消息:输入形状错误(1231,13)。我想知道这里可能会发生两个问题:

  1. DBN不支持多标签分类
  2. 我的标签不适合在DBN适合功能中使用。

答案1

小编典典

正如Francisco Vargas所提,nolearn.dbn已弃用,您应该改nolearn.lasagne而使用(如果可以的话)。

如果要在千层面中进行多标签分类,则应将regression参数设置为True,以定义验证分数和自定义损失。

这是一个例子:

import numpy as npimport theano.tensor as Tfrom lasagne import layersfrom lasagne.updates import nesterov_momentumfrom nolearn.lasagne import NeuralNetfrom nolearn.lasagne import BatchIteratorfrom lasagne import nonlinearities# custom loss: multi label cross entropydef multilabel_objective(predictions, targets):    epsilon = np.float32(1.0e-6)    one = np.float32(1.0)    pred = T.clip(predictions, epsilon, one - epsilon)    return -T.sum(targets * T.log(pred) + (one - targets) * T.log(one - pred), axis=1)net = NeuralNet(    # customize "layers" to represent the architecture you want    # here I took a dummy architecture    layers=[(layers.InputLayer, {"name": ''input'', ''shape'': (None, 1, 229, 1)}),            (layers.DenseLayer, {"name": ''hidden1'', ''num_units'': 20}),            (layers.DenseLayer, {"name": ''output'', ''nonlinearity'': nonlinearities.sigmoid, ''num_units'': 13})], #because you have 13 outputs    # optimization method:    update=nesterov_momentum,    update_learning_rate=5*10**(-3),    update_momentum=0.9,    max_epochs=500,  # we want to train this many epochs    verbose=1,    #Here are the important parameters for multi labels    regression=True,    objective_loss_function=multilabel_objective,    custom_score=("validation score", lambda x, y: np.mean(np.abs(x - y)))    )net.fit(X_train, labels_train)

6 HTML标签分类

6 HTML标签分类

标签分类

块状标签

<div> <p> <h1>~<h6> <ol> <ul> <table><form> <li>

行内标签

<a> <span> <br> <i> <em> <strong> <label>

行内块状标签

<img> <input>

块状标签特点:display:block

  1. 每个块级元素都从新的一行开始,并且其后的元素也另起一行。独占一行

  2. 元素的高度、宽度、行高以及顶和底边距都可设置

  3. 元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致),除非设定一个宽度

行内标签特点:display:inline

  1. 和其他元素都在一行上
  2. 元素的高度、宽度及顶部和底部边距不可设置
  3. 元素的宽度就是它包含的文字或图片的宽度,不可改变

行内块状标签的特点:display:inline-block

  1. 和其他元素都在一行上
  2. 元素的高度、宽度、行高以及顶和底边距都可设置

AI已经把你看得明明白白,YOLO+ByteTrack+多标签分类网络

AI已经把你看得明明白白,YOLO+ByteTrack+多标签分类网络

今天给大家分享一个行人属性分析系统。从视频或者相机的视频流中能识别行人,并标记每个人的属性。

图片

识别的属性包括以下 10 类

图片

有些类别有多个属性,如果身体朝向有:正面、侧面和背面,所以,最终训练的属性有 26 个。

实现这样的系统需要 3 个步骤:

  • 用 YOlOv5 识别行人
  • 用 ByteTrack 跟踪标记同一个人
  • 训练多标签图像分类网络,识别行人 26 个属性

1. 行人识别与追踪

行人识别使用YOLOv5​目标检测模型,可以自己训练模型,也可以直接使用YOLOv5预训练好的模型。

行人追踪使用的是多目标跟踪技术(MOT)​技术,视频是由一幅幅画面组成,虽然我们人类能够识别出不同画面中的同一个人, 但如果不对行人做追踪,AI​是无法识别的。需要用MOT技术追踪同一个人并给每个行人分配唯一的ID。

YOLOv5​模型的训练、使用,以及多目标跟踪技术(MOT)​技术的原理、实现方案,在上一篇文章有详细的教程,感兴趣的朋友可以查看那边文章《YOLOv5+ByteTrack统计车流》。

2. 训练多标签分类网络

我们最开始接触的图像分类大部分是单标签分类​的,即:一张图片归为1类,类别可以是二分类​也可以是多分类​。假设有三个类别,每一张图片对应的label可能是下面这总格式:

001.jpg010
002.jpg100
003.jpg100
登录后复制

label​只有一个位置是1。

而我们今天要训练的多标签分类网络​是一张图片同时包含多个类别,label格式如下:

001.jpg011
002.jpg111
003.jpg100
登录后复制

label​可以有多个位置是1。

训练这样的网络,有两种方案。一种是把每个类别看成是单标签分类,单独计算损失,汇总总,计算梯度更新网络参数。

另一种可以直接训练,但对需要注意网络细节,以ResNet50为例

resnet50 = ResNet50(include_top=False, weights=''imagenet'')

# 迁移学习,不重新训练卷积层
for layer in resnet50.layers:
layer.trainable = False

# 新的全连接层
x = Flatten()(resnet50.output)
x = Dense(1024)(x)
x = Activation(''relu'')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)

# 输出 26 个属性的多分类标签
x = Dense(26, activatinotallow=''sigmoid'')(x)

model = Model(inputs = resnet50.input, outputs=x)
登录后复制

最后输出层的激活函数​必须要sigmoid​,因为需要每个属性单独计算概率。同理,训练时的损失函数也需要用二分类​交叉熵binary_crossentropy。

实际上,上面两种方法原理都是类似的,只不过开发的工作量不同。

这里为了方便,我使用的是PaddleCls​进行训练。Paddle的配置简单,缺点是有点黑盒,只能按照他那一套来,需要自定义的地方就比较麻烦。

模型训练使用的是PA100K​数据集,需要注意的是,PA100K​数据集定义的原始label与Paddle虽然含义相同,但顺序不同。

如:原始label​第1位代表是否是女性​,而Paddle​要求第1位代表是否戴帽子​,第22位才是是否是女性。

图片

我们按照Paddle​的要求调整下原始label位置即可,这样我们后面推理会方便些。

下载PaddleClas

git clone https://github.com/PaddlePaddle/PaddleClas
登录后复制

将下载的数据集解压,放到PaddleClas的dataset目录。

找到ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml​配置文件,配置图片和label路径。

DataLoader:
Train:
dataset:
name: MultiLabelDataset
image_root: "dataset/pa100k/" #指定训练图片所在根路径
cls_label_path: "dataset/pa100k/train_list.txt" #指定训练列表文件位置
label_ratio: True
transform_ops:

Eval:
dataset:
name: MultiLabelDataset
image_root: "dataset/pa100k/" #指定评估图片所在根路径
cls_label_path: "dataset/pa100k/val_list.txt" #指定评估列表文件位置
label_ratio: True
transform_ops:
登录后复制

train_list.txt的格式为

00001.jpg0,0,1,0,....
登录后复制

配置好后,就可以直接训练了

python3 tools/train.py 
-c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml
登录后复制

训练完后,导出模型

python3 tools/export_model.py 
-c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml 
-o Global.pretrained_model=output/PPLCNet_x1_0/best_model 
-o Global.save_inference_dir=deploy/models/PPLCNet_x1_0_person_attribute_infer
登录后复制

将导出的结果放在~/.paddleclas/inference_model/PULC/person_attribute/目录下

图片

便可以使用PaddleCls提供的函数直接调用

import paddleclas

model = paddleclas.PaddleClas(model_name="person_attribute")

result = model.predict(input_data="./test_imgs/000001.jpg")

print(result)
登录后复制

输出结果如下:

[{''attributes'': [''Female'', ''Age18-60'', ''Front'', ''Glasses: False'', ''Hat: False'', ''HoldObjectsInFront: True'', ''ShoulderBag'', ''Upper: ShortSleeve'', ''Lower:Trousers'', ''No boots''], ''output'': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0], ''filename'': ''./test_imgs/000001.jpg''}]
登录后复制

模型训练过程就到这里了,数据集和整个项目的源码已经打包好了。

以上就是AI已经把你看得明明白白,YOLO+ByteTrack+多标签分类网络的详细内容,更多请关注php中文网其它相关文章!

CPRFL:基于CLIP的新方案,破解长尾多标签分类难题 | ACM MM''24

CPRFL:基于CLIP的新方案,破解长尾多标签分类难题 | ACM MM''24

现实世界的数据通常表现为长尾分布,常跨越多个类别。这种复杂性突显了内容理解的挑战,特别是在需要长尾多标签图像分类(LTMLC)的场景中。在这些情况下,不平衡的数据分布和多物体识别构成了重大障碍。为了解决这个问题,论文提出了一种新颖且有效的LTMLC方法,称为类别提示精炼特征学习(CPRFL)。该方法从预训练的CLIP嵌入初始化类别提示,通过与视觉特征的交互解耦类别特定的视觉表示,从而促进了头部类和尾部类之间的语义关联建立。为了减轻视觉-语义领域的偏差,论文设计了一种渐进式双路径反向传播机制,通过逐步将上下文相关的视觉信息纳入提示来精炼提示。同时,精炼过程在精炼提示的指导下促进了类别特定视觉表示的渐进纯化。此外,考虑到负样本与正样本的不平衡,采用了非对称损失作为优化目标,以抑制所有类别中的负样本,并可能提升头部到尾部的识别性能。

论文: Category-Prompt Refined Feature Learning for Long-Tailed Multi-Label Image Classification

  • 论文地址:https://arxiv.org/abs/2408.08125
  • 论文代码:https://github.com/jiexuanyan/CPRFL

Introduction


  随着深度网络的快速发展,近年来计算机视觉领域取得了显著的进展,尤其是在图像分类任务中。这一进展在很大程度上依赖于许多主流的平衡基准(例如CIFARImageNet ILSVRCMS COCO),这些基准具有两个关键特征:1)它们提供了在所有类别之间相对平衡且数量充足的样本,2)每个样本仅属于一个类别。然而,在实际应用中,不同类别的分布往往呈现长尾分布模式,深度网络往往在尾部类别上表现不佳。同时,与经典的单标签分类不同,实际场景中图像通常与多个标签相关联,这增加了任务的复杂性和挑战。为了应对这些问题,越来越多的研究集中在长尾多标签图像分类(LTMLC)问题上。

  由于尾部类别的样本相对稀少,解决长尾多标签图像分类(LTMLC)问题的主流方法主要集中在通过采用各种策略来解决头部与尾部的不平衡问题,例如对每个类别的样本数量进行重采样、为不同类别重新加权损失、以及解耦表示学习和分类头的学习。尽管这些方法做出了重要贡献,但它们通常忽略了两个关键方面。首先,在长尾学习中,考虑头部和尾部类别之间的语义相关性至关重要。利用这种相关性可以在头部类别的支持下显著提高尾部类别的性能。其次,实际世界中的图像通常包含多种对象、场景或属性,这增加了分类任务的复杂性。上述方法通常从全局角度考虑提取图像的视觉表示。然而,这种全局视觉表示包含了来自多个对象的混合特征,这阻碍了对每个类别的有效特征分类。因此,如何在长尾数据分布中探索类别之间的语义相关性,并提取局部类别特定特征,仍然是一个重要的研究领域。

  最近,视觉-语言预训练(VLP)模型已成功适应于各种下游视觉任务。例如,CLIP在数十亿对图像-文本样本上进行预训练,其文本编码器包含了来自自然语言处理(NLP)语料库的丰富语言知识。文本编码器在编码文本模态中的语义上下文表示方面展示了巨大的潜力。因此,可以利用CLIP的文本嵌入表示来编码头部和尾部类别之间的语义相关性。此外,在许多研究中,CLIP的文本嵌入已成功作为语义提示,用于将局部类别特定的视觉表示与全局混合特征解耦。

  为了应对长尾多标签分类(LTMLC)固有的挑战,论文提出了一种新颖且有效的方法,称为类别提示精炼特征学习(Category-Prompt Refined Feature LearningCPRFL)。CPRFL利用CLIP的文本编码器的强大的语义表示能力提取类别语义,从而建立头部和尾部类别之间的语义相关性。随后,提取的类别语义用于初始化所有类别的提示,这些提示与视觉特征交互,以辨别与每个类别相关的上下文视觉信息。

  这种视觉-语义交互可以有效地将类别特定的视觉表示从输入样本中解耦,但这些初始提示缺乏视觉上下文信息,导致在信息交互过程中语义和视觉领域之间存在显著的数据偏差。本质上,初始提示可能不够精准,从而影响类别特定视觉表示的质量。为了解决这个问题,论文引入了一种渐进式双路径反向传播(progressive Dual-Path Back-Propagation)机制来迭代精炼提示。该机制逐步将与上下文相关的视觉信息积累到提示中。同时,在精炼提示的指导下,类别特定的视觉表示得到净化,从而提高其相关性和准确性。

  最后,为了进一步解决多类别中固有的负样本与正样本不平衡问题,论文引入了在这种情况下常用的重新加权(Re-Weighting,RW)策略。具体来说,采用了非对称损失(Asymmetric LossASL)作为优化目标,有效抑制了所有类别中的负样本,并可能改善LTMLC任务中头部与尾部类别的性能。

  论文贡献总结如下:

  1. 提出了一种新颖的提示学习方法,称为类别提示精炼特征学习(CPRFL),用于长尾多标签图像分类(LTMLC)。CPRFL利用CLIP的文本编码器提取类别语义,充分发挥其强大的语义表示能力,促进头部和尾部类别之间的语义关联的建立。提取的类别语义作为类别提示,用于实现类别特定视觉表示的解耦。这是首次利用类别语义关联来缓解LTMLC中的头尾不平衡问题,提供了一种针对数据特征量身定制的开创性解决方案。
  2. 设计了一种渐进式双路径反向传播机制,旨在通过在视觉-语义交互过程中逐步将与上下文相关的视觉信息融入提示中,从而精炼类别提示。通过采用一系列双路径梯度反向传播,有效地抵消了初始提示带来的视觉-语义领域偏差。同时,精炼过程促进了类别特定视觉表示的逐步净化。
  3. 在两个LTMLC基准测试上进行了实验,包括公开可用的数据集COCO-LTVOC-LT。大量实验不仅验证了方法的有效性,还突显了其相较于最近先进方法的显著优越性。

Methods


Overview

CPRFL方法包括两个子网络,即提示初始化(PI)网络和视觉-语义交互(VSI)网络。首先,利用预训练的CLIP的文本嵌入来初始化PI网络中的类别提示,利用类别语义编码不同类别之间的语义关联。随后,这些初始化的提示通过VSI网络中的Transformer编码器与提取的视觉特征进行交互。这个交互过程有助于解耦类别特定的视觉表示,使框架能够辨别与每个类别相关的上下文相关的视觉信息。最后,在类别层面计算类别特定特征与其对应提示之间的相似性,以获得每个类别的预测概率。为了减轻视觉-语义领域偏差,采用了一个逐步的双路径反向传播机制,由类别提示学习引导,以细化提示并在训练迭代中逐步净化类别特定的视觉表示。为进一步解决负样本与正样本的不平衡问题,采用了重加权策略(即非对称损失(ASL)),这有助于抑制所有类别中的负样本。

  • Feature Extraction

  给定来自数据集 $D$ 的输入图像 $x$ ,首先利用一个主干网络提取局部图像特征 $f_{loc}^x \in \mathbb{R}^{h \times w \times d_0}$ ,其中 $d_0,h,w$ 分别表示通道数、高度和宽度。论文采用了如ResNet-101的卷积网络,并通过去除最后的池化层来获取局部特征。之后,添加一个线性层 $\varphi$ ,将特征从维度 $d_0$ 映射到维度 $d$ ,以便将其投影到一个视觉-语义联合空间,从而匹配类别提示的维度:

$$ \begin{equation} \mathcal{F} = \varphi(f_{loc}^x) = \{f_1,f_2,...,f_v\} \in \mathbb{R}^{v \times d}, v = h \times w. \label{eq:1} \end{equation} $$

  利用局部特征,我们在它们与初始类别提示之间进行视觉-语义信息交互,以辨别类别特定的视觉信息。

  • Semantic Extraction

  形式上,预训练的CLIP包括一个图像编码器 $f(\bullet)$ 和一个文本编码器 $g(\bullet)$ 。为了论文的目的,仅利用文本编码器来提取类别语义。具体来说,采用一个经典的预定义模板 "a photo of a[CLASS]" 作为文本编码器的输入文本。然后,文本编码器将输入文本(类别 $i$ , $i=1,...,c$ )映射到文本嵌入 $\mathcal{W} = g(i) =\{w_1,w_2,...,w_c\}\in \mathbb{R}^{c \times m}$ ,其中 $c$ 表示类别数, $m$ 表示嵌入的维度长度。提取的文本嵌入作为初始化类别提示的类别语义。

Category-Prompt Initialization

  为了弥合语义领域和视觉领域之间的差距,近期的研究尝试使用线性层将语义词嵌入投影到视觉-语义联合空间。论文选择了非线性结构来处理来自预训练CLIP文本嵌入的类别语义,而不是直接使用线性层进行投影。这种方法能够实现从语义空间到视觉-语义联合空间的更复杂的投影。

  具体来说,论文设计了一个提示初始化(PI)网络,该网络由两个全连接层和一个非线性激活函数组成。通过PI网络执行的非线性变换,将预训练CLIP的文本嵌入 $\mathcal{W}$ 映射到初始类别提示 $\mathcal{P} = \{p_1,p_2,...,p_c\}\in \mathbb{R}^{c \times d}$ :

$$ \begin{equation} \mathcal{P} = GELU(\mathcal{W}W_1+b_1)W_2+b_2, \label{eq:2} \end{equation} $$

  其中, $W_1$ 、 $W_2$ 、 $b_1$ 和 $b_2$ 分别表示两个线性层的权重矩阵和偏置向量,而 $GELU$ 表示非线性激活函数。这里, $W_1 \in \mathbb{R}^{m \times t}$ , $W_2 \in \mathbb{R}^{t \times d}$ , $t = \tau \times d$ , $\tau$ 是控制隐藏层维度的扩展系数。通常情况下, $\tau$ 被设置为0.5

PI网络在从预训练CLIP的文本编码器中提取类别语义方面发挥了至关重要的作用,利用其强大的语义表示能力,在不依赖真实标签的情况下建立不同类别之间的语义关联。通过用类别语义初始化类别提示,PI网络促进了从语义空间到视觉-语义联合空间的投影。此外,PI网络的非线性设计增强了提取类别提示的视觉-语义交互能力,从而改善了后续的视觉-语义信息交互。

Visual-Semantic Information Interaction

  随着Transformer在计算机视觉领域的广泛应用,近期的研究展示了典型注意力机制在增强视觉-语义跨模态特征交互方面的能力,这激励论文设计了一个视觉-语义交互(VSI)网络。该网络包含一个Transformer编码器,以初始类别提示和视觉特征作为输入。Transformer编码器执行视觉-语义信息交互,以辨别与每个类别相关的上下文特定视觉信息。这个交互过程有效地解耦了类别特定的视觉表示,从而促进了每个类别的更好特征分类。

  为了促进类别提示与视觉特征之间的视觉-语义信息交互,将初始类别提示 $\mathcal{P} \in \mathbb{R}^{c \times d}$ 与视觉特征 $\mathcal{F} \in \mathbb{R}^{v \times d}$ 进行连接,形成一个组合嵌入集 $Z = (\mathcal{F},\mathcal{P}) \in \mathbb{R}^{(v+c) \times d}$ ,输入到VSI网络中进行视觉-语义信息交互。在VSI网络中,每个嵌入 $z_i \in Z$ 通过Transformer编码器固有的多头自注意力机制进行计算和更新。值得注意的是,仅关注更新类别提示 $\mathcal{P}$ ,因为这些提示代表了类别特定视觉表示的解耦部分。注意力权重 $\alpha_{ij}^p$ 和随后的更新过程计算如下:

$$ \begin{equation} \alpha_{ij}^p = softmax\left((W_qp_i)^T(W_kz_i)/\sqrt{d}\right), \label{eq:3} \end{equation} $$

$$ \begin{equation} \bar{p}_i = \sum_{j=1}(\alpha_{ij}^pW_vz_j), \label{eq:4} \end{equation} $$

$$ \begin{equation} p_i'' = GELU(\bar{p}_iW_r+b_3)W_o+b_4, \end{equation} $$

  其中, $W_q, W_k, W_v$ 分别是查询、键和值的权重矩阵, $W_r, W_o$ 是变换矩阵, $b_3, b_4$ 是偏置向量。为了简化VSI网络的复杂度,选择了单层Transformer编码器而不是堆叠层。VSI网络的输出结果和类别特定的视觉特征分别记作 $Z'' = \{f_1'', f_2'', ..., f_v'', p_1'', p_2'', ..., p_c''\}$ 和 $\mathcal{P}'' = \{p_1'', p_2'', ..., p_c''\}$ 。在自注意力机制下,每个类别提示嵌入综合考虑了其对所有局部视觉特征和其他类别提示嵌入的注意力。这种综合注意力机制有效地辨别了样本中的上下文相关视觉信息,从而实现了类别特定视觉表示的解耦。

Category-Prompt Refined Feature Learning

  在通过VSI网络实现视觉特征与初始提示的交互后,得到的输出 $\mathcal{P}''$ 作为分类的类别特定特征。在传统的基于Transformer的方法中,从Transformer获得的具体输出特征通常通过线性层投影到标签空间,用于最终分类。与这些方法不同,将类别提示 $\mathcal{P}$ 作为分类器,并计算类别特定特征与类别提示之间的相似性,以在特征空间内进行分类。类别 $i$ 的分类概率 $s_i$ 可以通过以下计算:

$$ \begin{equation} s_i = sigmoid(p_i'' \cdot p_i). \label{eq:6} \end{equation} $$

  在多标签设置中,由于数据特性的独特性,需要计算每个类别的类别特定特征向量与相应提示向量之间的点积相似度来确定概率(softmax一下),这种计算方法体现了绝对相似性。而论文偏离了传统的相似性模式,而是使用类别特定特征向量与所有提示向量之间的相对测量。这种做法的原因在于减少了计算冗余,因为计算每个类别的特征向量与无关类别提示之间的相似度是不必要的。

  初始提示缺乏关键的视觉上下文信息,导致在信息交互过程中语义域与视觉域之间存在显著的数据偏差。这种差异导致初始提示不准确,从而影响类别特定视觉表示的质量。为了解决这个问题,论文引入了一种由类别提示学习引导的渐进式双路径反向传播机制。该机制在模型训练过程中涉及两个梯度优化路径(如图2a所示):一条通过VSI网络,另一条直接到PI网络。前者路径还优化VSI网络,以增强其视觉语义信息交互的能力。通过采用一系列双路径梯度反向传播,提示在训练迭代中逐渐得到优化,从而逐步积累与上下文相关的视觉信息。同时,优化后的提示指导生成更准确的类别特定视觉表示,从而实现类别特定特征的渐进净化。论文将这一整个过程称为“提示精炼特征学习”,反复进行直到收敛,如图2b所示。

Optimization

  为了进一步解决多类别中固有的负样本与正样本不平衡问题,论文整合了在这种情况下常用的重新加权(Re-Weighting, RW)策略。具体而言,采用不对称损失(Asymmetric Loss, ASL)作为优化目标。ASL是一种焦点损失(focal loss)的变体,对正样本和负样本使用不同的 $\gamma$ 值。给定输入图像 $x_i$ ,模型预测其最终类别概率 $S_i = \{s_1^i,s_2^i,...,s_c^i\}$ ,其真实标签为 $Y_i = \{y_1^i,y_2^i,...,y_c^i\}$ 。

  使用ASL训练整个框架,如下所示:

$$ \begin{equation} \mathcal{L}_{cls} = \mathcal{L}_{ASL} = \sum_{x_i \in X}\sum_{j=1}^c \begin{cases} (1-s_j^i)^{\gamma^{+}}log(s_j^i),&s_j^i=1,\\ (\tilde{s}_j^i)^{\gamma^{-}}log(1-\tilde{s}_j^i),&s_j^i=0,\\ \end{cases} \label{eq:7} \end{equation} $$

  其中, $c$ 是类别的数量。 $\tilde{s}_j^i$ 是ASL中的硬阈值,表示为 $\tilde{s}_j^i = \max(s_j^i - \mu, 0)$ 。 $\mu$ 是一个用于过滤低置信度负样本的阈值。默认情况下,设置 $\gamma^{+} = 0$ 和 $\gamma^{-} = 4$ 。在论文的框架中,ASL有效地抑制了所有类别中的负样本,可能改善了LTMLC任务中的头尾类别性能。

Experiments




如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.

HTML5标签分类

HTML5标签分类

HTML5常用标签分类

标签(空格分隔): HTML 前端开发

  • HTML5常用标签分类
    • 一HTML文档标签
    • 二布局标签语义化
    • 三表格标签
    • 四表单标签
    • 五列表标签
    • 六图像链接标签
    • 七音频视频
    • 八框架标签
    • 九格式标签
      • 文章标签
      • 短语元素标签
      • 字体样式标签
    • 十其它

一.HTML文档标签

  1. <!DOCTYPE>: 定义文档类型.
  2. <html>: 定义HTML文档.
  3. <head>: 定义文档的头部.(头部内包含)
    (1). <Meta>: 定义元素可提供有关页面的元信息,比如针对搜索引擎和更新频度的描述和关键词.
    (2). <base>:定义页面上的所有链接规定默认地址或默认目标.
    (3). <title>: 定义文档的标题.
    (4). <link>: 定义文档与外部资源的关系.
    (5). <style>:定义 HTML 文档样式信息.
  4. <body>: 定义文档的主体.(脚本在非必须情况时在主体内容最后)
    (1). <script>: 定义客户端脚本,比如 JavaScript.
    (2). <noscript>:定义在脚本未被执行时的替代内容.(文本)

二.布局标签&语义化

  1. <div>:定义块级元素.
  2. <span>:定义行业元素.
  3. <header>51:定义区段或页面的页眉.(头部)
  4. <footer>5:定义区段或页面的页脚.(足部)
  5. <section>5:定义文档中的区段.
  6. <article>5:定义文章.
  7. <aside>5:定义页面内容之外的内容.
  8. <details>5:定义元素的细节.
  9. <summary>5:定义 <details> 元素可见的标题.
  10. <dialog>5:定义对话框或窗口.
  11. <nav>5:定义导航.
  12. <hgroup>5:定义标题组

三.表格标签

  1. <table>:定义表格.
  2. <thead>:定义页眉.
  3. <tbody>:定义主体.
  4. <tfoot>:定义页脚.
  5. <caption>:定义标题.
  6. <th>:定义表头.
  7. <tr>:定义一行.
  8. <td>:定义单元格.

四.表单标签

  1. <form>:定义表单.(表单包含在form标签中)
  2. <input>:定义输入域.
  3. <textarea>:定义文本域.(多行)
  4. <label>:定义一个控制的标签.(input 元素的标注)
  5. <fieldset>:定义域.
  6. <legend>:定义域的标题.
  7. <select>:定义一个选择列表.
  8. <optgroup>:定义选择组.
  9. <option>:定义下拉 列表的选项.
  10. <button>:定义按钮.(定义围绕表单中元素的边框.)
  11. <fieldset>:定义围绕表单中元素的边框.
  12. <legend>:定义 fieldset 元素的标题.
  13. <fieldset>5:定义选项列表.与input 元素配合使用该元素,来定义 input 可能的值.
  14. <keygen>5:定义表单的密钥对生成器字段.
  15. <output>5:定义不同类型的输出,比如脚本的输出.

五.列表标签

  1. <ul>:定义无序列表.
  2. <ol>:定义有序列表.
  3. <li>:定义列表项.
  4. <dl>:定义自定义列表.
  5. <dt>:定义自定义列表项.
  6. <dd>:定义自定义的描述.

六.图像&链接标签

  1. <img>:定义图像.注意加上alt属性
  2. <a>:定义超链接.
  3. <map>:定义图像映射。
  4. <area>:定义图像地图内部的区域.
  5. <figure>5:定义媒介内容的分组.
  6. <figcaption>5:定义 <figure> 元素的标题.

七.音频/视频

  1. <audio>5:定义声音内容.
  2. <source>5:定义媒介源.
  3. <track>5:定义用在媒体播放器中的文本轨道.
  4. <video>5:定义视频.

八.框架标签

  1. <iframe>:内联框架.

九.格式标签

1.文章标签

  1. <h1>-<h6>:定义 HTML 标题.
  2. <p>:定义段落.
  3. <br>:定义换行.
  4. <hr>:定义水平线.
  5. <bdo>:定义文字方向.
  6. <pre>:定义预格式文本.
  7. <abbr>:定义缩写.
  8. <address>:定义文档作者或拥有者的联系信息.
  9. <ins>:定义被插入文本.
  10. <del>:定义被删除文本.
  11. <time>:定义日期/时间.

2.短语元素标签

  1. <em>:定义强调文本.
  2. <strong>:定义语气更为强烈的强调文本.
  3. <dfn>:定义定义项目.
  4. <code>:定义计算机代码文本.
  5. <samp>:定义计算机代码样本.
  6. <kbd>:定义键盘文本.
  7. <var>:定义文本的变量部分.
  8. <sup>:定义上标文本.
  9. <sub>:定义下标文本.
  10. <cite>:定义引用.
  11. <blockguote>:定义长的引用.
  12. <q>:定义短的引用.

3.字体样式标签

  1. <i>:显示斜体文本效果.
  2. <b>:呈现粗体文本效果.
  3. <big>:呈现大号字体效果.
  4. <small>:呈现小号字体效果.
  5. <mark>5:定义有记号的文本.

十.其它

  1. <canvas>5:定义图形容器,必须使用脚本来绘制图形。
  2. <meter>5:定义预定义范围内的度量.
  3. <progress>5:定义任何类型的任务的进度.
  1. 表示为HTML5新增元素 ↩

关于nolearn用于多标签分类多标签分类 loss函数的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于6 HTML标签分类、AI已经把你看得明明白白,YOLO+ByteTrack+多标签分类网络、CPRFL:基于CLIP的新方案,破解长尾多标签分类难题 | ACM MM''24、HTML5标签分类等相关内容,可以在本站寻找。

本文标签: