FreeAnchor:令anchor自由匹配标签的策略

2023-11-07

前言

本文将要介绍一种为训练样本分配标签的策略,这种策略称作 FreeAnchor,注意不是 anchor free 哦!FreeAnchor 是用于 anchor-based 体系下的策略,那么它到底free在哪里呢?anchor还能玩起freestyle?

是这样的,FreeAnchor 指的是在训练过程中让anchor能够根据模型当前的表现来自由匹配标签,而非基于硬性规则为anchor分配标签。

什么叫基于硬性规则?最常见的就是基于IoU的规则,即当anchor和某个gt box的IoU超过预设的阀值时,就将其作为这个gt的正样本(也就是将这个gt的类别分配给该anchor作为标签)。若anchor匹配到了多个gt boxes,那么可以将IoU最大的那个gt分配给anchor。

OK,与基于硬性规则分配标签相比,FreeAnchor的优势在哪里呢?通常情况下,使用硬性规则来分配标签并无大碍,但是在一些场景下,这样训练出来的模型效果并不好,而使用FreeAnchor却能克服这个问题,下面就让CW为大家开启这场知识盛宴吧!

附:FreeAnchor: Learning to Match Anchors for Visual Object Detection code(文末附链接)

基于硬性规则分配标签带来的问题

用前文提到的基于IoU的规则来举例说明,看下面这张图。目标物是月亮,绿色框代表其gt box,红色框代表anchor,直观上来看两者重叠部分还蛮大的,在这种规则下,通常会将这个gt分配给anchor。

然而我们可以看到,anchor框内的区域几乎不包含有月亮的部分,大部分都是黑色的背景,从而模型在这个框内看到的也大部分是属于背景的特征,但是在这种规则下却硬要这个anchor去负责预测月亮,岂非“强anchor所难”..

FreeAnchor:令anchor自由匹配标签的策略

 

另外,特别是在训练初期,网络接近于随机预测,基于这个anchor回归出来的proposal很可能如下绿色框所示(画工比较有个性别吐槽..):

FreeAnchor:令anchor自由匹配标签的策略

 

但是此时的规则却将这个object标签分配给它去计算loss,模型难免会说:太难了吧~!

因此,对于像上述月亮这种“偏心”(即目标物中心不在gt box几何中心)的物体,这种基于IoU来为训练样本分配标签的做法显得很不友好。

怎样才算是好的方案

和谈恋爱一样,强求是不会有幸福的,那么怎样的匹配方式才好呢?我们推崇自由匹(恋)配(爱)。

保证召回率

首先要保证的是召回率(Recall),就像考试做题,不要留空白,能答上来的就写上,不能答上来的也尽量扯。对于每个gt,至少要有一个anchor去匹配,也就是至少要有一个anchor对应的proposal负责预测它。

提高精度

精度(Precision)的计算公式是TP/(TP+FP),要提高精度最直观的方式是尽量减少FP(False-Positive)。FP就是那些定位错误却预测为目标物体的proposals。因此,对于定位错误(不好)的那些proposals,我们要将其分类为背景。

兼容NMS

大部分目标检测的后处理都会用到NMS,它会将预测框排序,使得分类置信度高的排在前面,然后每次都以置信度最高的为基准,去掉与其重叠度(通常用IoU作评判)高的冗余框。因此,FreeAnchor策略希望能够兼容NMS,避免在这个过程中有预测框定位得很好但是由于在分类上的得分不够高而被干掉了,定位好的才是靓仔,这可是看脸的世界。

极大似然估计

OK,想法是有了,那么具体的方法呢?

作者很优秀,将这个问题设计成极大似然估计问题,极大似然估计是用频率来描述概率的一种思想,在这里就是在训练过程中使用模型的预测结果去寻找合适的目标,从而再反过来推断模型的参数。

在anchor-based体系下的目标检测任务中,loss函数通常设计为如下形式:

FreeAnchor:令anchor自由匹配标签的策略

 

其中A_{+}和A_{-}分别表示正负样本anchor集,B表示目标物体集合,L^{cls}和L^{loc}分别表示正样本anchor对应的类别预测和回归预测的损失,C_{ij}的是非0即1,等于1代表anchor j 和object i 匹配,反之亦然。L^{bg}代表负样本anchor对应到背景的分类预测损失。
作者构思的最大似然估计也是从这个公式下手进行设计的:

FreeAnchor:令anchor自由匹配标签的策略

 

由于C_{ij}非0即1,因此上式可继续转化为如下:

FreeAnchor:令anchor自由匹配标签的策略

 

其中各形式的P就代表对应损失的似然概率,似然概率越大,损失函数越小。

到目前为止,以上还是基于硬性规则来分配标签的,C_{ij}就是根据IoU的规则来确定其值是0还是1的,而且P^{cls}和P^{loc}是分开优化的,FreeAnchor希望的是,能够在训练过程中让anchor根据模型当前表现自由地匹配相应的标签,同时定位好的proposal在分类上的得分也要高,于是还需要进一步的设计。

召回率似然函数

在上一节说过,首先要保证召回率。对于每个目标物体,我们都为其选择k(原作中k=50)个和其IoU最大的anchor作为候选正样本,然后定义优化召回率对应的似然函数如下:

FreeAnchor:令anchor自由匹配标签的策略

 

P(\theta){ij}^{cls}表示分类置信度,代表候选anchor j 属于object i 的概率;P(\theta){ij}^{loc}表示定位置信度,代表候选anchor j 定位object i的得分;

FreeAnchor:令anchor自由匹配标签的策略

 

代表的是,对于每个object i,计算其k个候选anchors的分类置信度与定位置信度乘积,然后取最大值;整体来看,P(\theta)_{recall}就是所有object所得最大置信度的乘积。
从这个公式可以看出,FreeAnchor将分类置信度与定位置信度放在一起进行优化。

精度似然函数

接着,为了提高精度,定义精度似然函数如下:

FreeAnchor:令anchor自由匹配标签的策略

 

FreeAnchor:令anchor自由匹配标签的策略

 

代表anchor j(对应的proposal)属于背景的置信度,注意这个置信度是从定位方面去衡量的,反映的是定位的好坏程度,定位得越差(proposal与object的IoU越小),这个值就越大;P(\theta){j}^{bg}代表anchor j (对应的预测结果)属于背景的概率,对应背景的分类置信度。

虽然明白了公式中各项的意义,但你可能还是有点懵,为什么优化精度要这样设计呢?

这样来看,若一个anchor定位比较差,明明深圳在广东省你却将bbox定位到北京去了,它对应的

FreeAnchor:令anchor自由匹配标签的策略

 

值就比较大,那么我们肯定希望将它分类成背(北)景(京),即它对应的P(\theta){j}^{bg}要尽可能大,否则它将成为一个FP(定位差却分类成前景),这样才能使乘积

FreeAnchor:令anchor自由匹配标签的策略

 

降下来,从而让

FreeAnchor:令anchor自由匹配标签的策略

 

的值变大,而P(\theta)_{precision}就是对每个anchor j都进行这样的计算,最后乘起来,有联合概率的意思。
总地来说,就是希望定位差的anchor(对应的预测结果)被分类成背景。

Saturated Linear 函数

作者定义

FreeAnchor:令anchor自由匹配标签的策略

 

的公式如下:

FreeAnchor:令anchor自由匹配标签的策略

 

P{a_{j}->b_{i}}表示anchor j 能匹配object i 的概率,而max_{i}P{a_{j}->b_{i}}表示anchor j与每个物体计算匹配概率,取其中的最大值。作者认为,P{a_{j}->b_{i}}的定义应该满足以下3个性质:

i). anchor j 与 object i 的IoU越大,这个概率值应该越大;
ii). anchor j 与 object i 的IoU小于预设的阀值时,这个值应该被置为0;
iii). 对于每个object i,有且只有一个anchor j 满足P{a_{j}->b_{i}}=1

前面说到过,P{a_{j}->b_{i}}反映的是anchor定位的好坏程度,以上性质与这个考虑也是相吻合的。另外,这些性质也能兼容NMS。
最终,其计算方式被设计为一个称作saturated linear的函数,形式如下:

FreeAnchor:令anchor自由匹配标签的策略

 

FreeAnchor:令anchor自由匹配标签的策略

 

从似然函数到损失函数

最终的似然概率函数是召回率似然概率函数与精度似然概率函数乘积:

FreeAnchor:令anchor自由匹配标签的策略

 

讲似然概率函数讲得有点high..我们还是要回到模型训练中来,既然要训练就离不开loss函数,因此需要将这个似然函数转换为loss的形式去优化:

FreeAnchor:令anchor自由匹配标签的策略

 

Mean-Max 函数

你有没有发现,对于

FreeAnchor:令anchor自由匹配标签的策略

 

,每个object只会从其候选anchors中选出最大的

FreeAnchor:令anchor自由匹配标签的策略

 

参与训练。这样,对于训练初始阶段来说,参与训练的anchors样本貌似就太少了。另外,在训练初期,网络参数随机初始化,所有anchors的置信度都比较低,具有最高置信度的anchor也不一定是匹配程度最好的anchor。

因此,需要让更多的anchors参与到训练中来,待训练得差不多(模型已经成为老司机)了,再选max的来训练。

为了解决这个问题,作者机智地设计了一个Mean-Max函数来取代Max函数,公式如下:

FreeAnchor:令anchor自由匹配标签的策略

 

在各项值都较小趋近相同时,函数输出值近似于均值;当其中某项值较大,而其它项较小,并且差异明显时,函数输出值就倾向于这个较大的值。相当于从mean过渡到max的效果,正好与训练前期和后期模型输出的置信度对应起来,妙哉妙哉~!

FreeAnchor:令anchor自由匹配标签的策略

 

除了使用Mean-Max函数取代Max函数,还对loss中的第二项使用Focal Loss,同时为loss中的每项都加上相应的权重:

FreeAnchor:令anchor自由匹配标签的策略

 

源码实现

费了不少口水(抱歉,忘了我是在码字,不需要动嘴..),对于coder来说,只知道理论不会写代码相当于什么都不知道,来吧,看看代码怎么写。哦,对了,添一句,以下实现基于Pytorch框架。

这里我使用一个类来封装,先把需要的参数进行初始化:

FreeAnchor:令anchor自由匹配标签的策略

 

然后loss的计算封装在__call__()方法里,这样能将这个类对象当作函数来调用:

FreeAnchor:令anchor自由匹配标签的策略

 

这里我的实现兼容了FPN多尺度,classifications和regressions分别代表分类和回归预测,anchors包含了特征金字塔所有层级的anchors,annotations是图像的标注,包括目标物体的bbox和类别。

输入进来的是一个batch的数据,为了思路更清晰,对每张图片依次进行计算:

FreeAnchor:令anchor自由匹配标签的策略

 

由于在标签制作时,为了使得一个batch的标注能组成一个tensor,于是我将各张图片的目标物体数目填充到一致,对于填充的物体,其类别标签设置为-1,这样就能将其和真实的物体区分出来。

接下来先计算P(\theta)_{ij}^{cls},也就是候选anchors(对应的proposals)的分类置信度。注意这里要将每个object的候选anchors对应的置信度设置到object的对应类别下(这里使用了Pytorch的gather()方法)。

FreeAnchor:令anchor自由匹配标签的策略

 

然后计算P(\theta)_{ij}^{loc},代表候选anchors(对应的proposals)的定位好坏程度。

FreeAnchor:令anchor自由匹配标签的策略

 

红框部分与前文所述的公式对应:

FreeAnchor:令anchor自由匹配标签的策略

 

顺便贴下smooth l1 loss的实现:

FreeAnchor:令anchor自由匹配标签的策略

 

有了以上两个似然概率,我们已经可以将loss公式中的第一项计算出来了,这部分称作positive loss,因为其是针对正样本的,要求它对应的似然概率越大越好(loss当然还是越小越好):

FreeAnchor:令anchor自由匹配标签的策略

 

其中positive_bag_loss的实现如下:

FreeAnchor:令anchor自由匹配标签的策略

 

先将联合概率输入Mean-Max函数计算,得到转换后的概率,然后使用二元交叉熵计算损失,这里直接将目标值设置为1,因为此处输入到交叉熵函数的预测变量是概率,我们希望这个概率越大越好。

loss中的第一项已经搞定,是时候从第二项下手了,先计算P{a_{j}->b_{i}}:

FreeAnchor:令anchor自由匹配标签的策略

 

注意这里要取消梯度!因为FreeAnchor的思想正是根据网络的预测结果来动态分配标签,所谓似然估计正是如此。另一个红框部分对应的就是saturated linear函数。有了P{a_{j}->b_{i}},计算max_{i}P{a_{j}->b_{i}}自然水到渠成:

FreeAnchor:令anchor自由匹配标签的策略

 

这里可能有点绕,在实现的时候,这个概率并不是如公式般将anchor与object对应起来,而是将这个值设置在anchor与object对应的类别下,这是因为这个概率需要与网络的分类预测输出乘在一起(element-wise multiply),维度需要对应起来。

作者在实现这部分时用了稀疏矩阵(torch.sparse_coo_tensor),没那么好理解,CW改成了这种比较low的形式,虽然计算速度可能稍受影响,但相对来说更直观、易理解。

至此,每张图像需要的计算已完工,下面可以来汇总下结果,还是先处理loss中的第一项:

FreeAnchor:令anchor自由匹配标签的策略

 

接着是loss中的第二项,称作negative loss,最后把两项loss乘上对应权重加起来得到最终的loss:

FreeAnchor:令anchor自由匹配标签的策略

 

注意这里实现的时候,对应于公式中1-P(\theta)_{j}^{bg}的部分,我们直接使用网络的分类预测就OK了。哦,放心,CW不会漏了negative_bag_loss的:

FreeAnchor:令anchor自由匹配标签的策略

 

别被名字骗了,实质上就是一个focal loss,与positive_bag_loss类似,其中也用到了二元交叉熵,不同的是,这次的目标值设置为0,因为这里针对的是FP,既然是FP当然希望它输出的置信度越小越好。

至于以上box_encode和box_decode的部分,这里就不贴出来了,了解anchor-based算法的应该都知道,随便三两下就码出来了。

如今,像FreeAnchor这种在训练过程中引导网络自由学习匹配标签的策略越来越多,突破了传统基于hard规则分配标签的束缚,咋一看倒是越来越智能了,希望这个世界早日从人工弱智进化到人工智能,干巴爹酷纳塞!

参考链接

https://arxiv.org/abs/1909.02466

作者简介

CW,毕业于中山大学(SYSU)数据科学与计算机学院,就职于腾讯技术工程与事业群(TEG)从事Devops工作,曾在AI LAB实习,实操过道路交通元素与医疗病例图像分割、视频实时人脸检测与表情识别、OCR等项目。

目前在一些自媒体平台上参与外包项目的研发工作,项目专注于CV领域(传统图像处理与深度学习方向)。


本文来自作者CW的原创投稿,如有任问题请及时留言,我们会第一时间处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeAnchor:令anchor自由匹配标签的策略 的相关文章

  • 解决git分支切换时遇到的问题

    Please commit your changes or stash them before you switch branches问题的解决 在项目开发的过程中 有时候会遇到一个分支上的BUG还没解决 另一个分支上的BUG又急需解决 这
  • docker 安装mysql总是报错

    完全卸载mysql 把所有的mysql 相关的文件全部删除 find name mysql 查到文件全部删除
  • OpenGL 入门 19:内建变量、接口块、Uniform缓冲

    一 内建变量 查询所有的内建变量的话 请查看OpenGL的wiki 顶点着色器 Input 变量名称 变量类型 变量语义 作用 gl VertexID int 索引 当使用glDrawElements 存储的是正在绘制顶点的当前索引 当使用
  • linux下多线程的创建和结构体传参

    下面总结一下linux下多线程的创建和传参 这里的传的参数是结构体的地址 然后在子线程中输出所传结构体对象的值 实现过程非常简单 其中pthread create 创建子线程 pthread join 是等待阻塞子线程结束 pthread
  • 在Python学习中遇到的一个疑问(可能已解决)

    文章目录 问题 分析 问题 从网上扒拉出来一段代码 是关于函数重写的 输出结果比较正常 但某些函数不太懂 python usr bin python3 class Vector def init self a b self a a self
  • Vue组件之间的通信方式

    六种方式 1 props emit 适用于 父子组件通信 略 2 ref 与 parents children 适用于父子组件通信 不好维护 不推荐使用 3 EventBus 适用于 父子 隔代 兄弟组件通信 这种方法通过一个空的 Vue
  • 每日sql-复购率问题count+case+timediff类函数

    记录一下案例 下次直接拿起来用
  • Python异常捕获及自定义异常类

    Python异常捕获及自定义异常类 一 什么是异常 异常是一个与业务逻辑无关的BUG 一个潜在错误或者网络错误事件等 如 尚未实现的函数 缩进错误 Python语法错误等 该事件可能会在程序执行过程中发生 影响程序的正常执行 在Python
  • 4.单链表ADT模板简单应用算法设计:单链表中前 m 个元素和后 n 个元素的互换

    问题描述 目的 使用C 模板设计单链表的抽象数据类型 ADT 并在此基础上 使用单链表ADT的基本操作 设计并实现单链表的简单算法设计 内容 1 请使用模板设计单链表的抽象数据类型 由于该环境目前仅支持单文件的编译 故将所有内容都集中在一个
  • HJ77 火车进站

    Powered by NEFU AB IN Link 文章目录 HJ77 火车进站 题意 思路 代码 HJ77 火车进站 题意 给定一个正整数N代表火车数量 0
  • C# WPF+skyline可视化学习笔记(一)------在WPF中加载fly地图

    我是学Java的 校招进了公司 是做这个的 我就只有现学了 还好有耐心的师傅和同事们友好帮助 不然我可能就凉了 好了 话不多说 本章内容就是使用vs2017 创建一个WPF项目并且一步一步手把手加载fly地图文件吧 前提准备 你得有这个软件
  • Java聊天--聊天界面

    import java awt import javax swing public class myMain extends JFrame JTextField tsend 在外部声明文本框 用来写留言 Choice clist 声明下拉框
  • 分享一个自媒体副业,认真做可以月入6000+

    做的这个副业并不难 每天花费2 3小时做视频剪辑 上个月一个新账号收益6000多 如果你现在每天的空闲时间比较多 也可以去尝试着做一下视频剪辑 这期内容来把方法分享给粉丝们 如果对你有所帮助 记得点赞支持一下大周 很多人都不知道我们在自媒体
  • Jenkins配置及插件安装

    Jenkins里应该如何把master节点以及slave节点搞到一起 进行一个联系 首先应该访问到安装好Jenkins的机器 下图是Jenkins首页的内容 暂时没有任何的流水线及agent 完善一下基本的信息 root jenkins m
  • TVM(一):简介与安装

    简介 TVM是一个用于深度学习系统的编译器堆栈 它旨在缩小以生产力为中心的深度学习框架与以性能和效率为中心的硬件后端之间的差距 TVM与深度学习框架合作 为不同的后端提供端到端编译 换句话说 TVM就是一种将深度学习工作负载部署到硬件的端到
  • 【Endnote20】批量导入enw格式,便捷快速

    1 将所有参考文献的enw文件整理到同一文件夹内 2 command a全选 我是mac win的话应该ctrl a全选 3 右键点击打开 4 完成
  • FreeRTOS-定时器详解

    作者简介 嵌入式入坑者 与大家一起加油 希望文章能够帮助各位 个人主页 rivencode的个人主页 系列专栏 玩转FreeRTOS 保持学习 保持热爱 认真分享 一起进步 目录 前言 一 软件定时器的简介 二 软件定时器的创建 1 软件定
  • 对登录接口的简单图形验证码进行识别 20221004

    Python黑客编程原理与实战 作业 二 1 编程题 1 语言限定为python3 环境准备 使用虚拟python3环境 pip3 install virtualenv virtualenv python 3 10 vpy3 10 sour
  • 什么是持续集成的自动化测试

    如今互联网软件的开发 测试和发布 已经形成了一套非常标准的流程 最重要的组成部分就是持续集成 Continuous integration 简称CI 目前主要的持续集成系统是Jenkins 那么什么是持续集成 持续集成指的是 频繁地 一天多
  • RainDiffusion: When Unsupervised Learning Meets Diffusion Models for Real-world Image Deraining

    一 摘要 介绍及相关工作 传统方法 图像去雨的传统方法通常利用不同的先验 例如稀疏编码 高斯混合模型和低秩表示 然而 这些手工制作的先验表现出有限的代表性能力 导致在复杂和多变的下雨情况下的结果不佳 监督 通过从大量合成的无雨 下雨图像对中

随机推荐

  • 基于Pytorch的深度学习 —— 非线性激活函数

    文章目录 作用 Sigmoid tanh ReLU Leaky ReLU SoftPlus 开发环境 作用 非线性激活函数获取输入 并对其进行数学变换后生成输出 非线性激活函数为神经元引入了非线性因素 使得神经网络可以任意逼近任何非线性函数
  • [编程开发工具-7]:四款功能强大的代码比较工具:Araxis Merge、Beyond compare、DiffMerge、WinMerge

    前言 我们经常会遇到需要比较同一文件的不同版本 特别是代码文件 比如在两个不同的github仓库之间merge代码 如果人工去对比查看 势必费时实力还会出现纰漏和错误 因此我们需要借助一些代码比较的工具来自动完成这些工作 对于专业人员 立即
  • 我制作了python脚本自动抢购淘宝秒杀产品,学会优先享受双十一福利

    这是本文的标题 前言 第一步 第二步 第三步 第四步 零基础Python学习资源介绍 Python学习路线汇总 Python必备开发工具 Python学习视频600合集 实战案例 100道Python练习题 面试刷题 资料领取 好文推荐 前
  • 【笔记:模拟CMOS集成电路】两级运算放大器设计与仿真(带版图)

    笔记 模拟CMOS集成电路 两级运算放大器设计与仿真 带版图 前言 1 电路分析 1 1电路结构 电路描述 1 2小信号分析 1 3公式 2指标设计 2 1预期设计指标参数 2 2参数分析 1 确定gm1 gm6 2 分配电流 3 确定M1
  • 技术管理者培训小结一:内在修养

    经过技术管理者培训课程 将一些内容以小结方式记录下来 既能作为培训沉淀 又能作为备忘 一 管理者的内在修养 1 情绪控制应该脱离 刺激 回应模式 人的终极自由是自己的情绪由自己控制 发挥四大天赋潜能 自我意识 想象力 良知 独立意志 由受制
  • Java线程安全性中的对象发布和逸出

    转自 http www cnblogs com yulinfeng p 5975728 html 发布 Publish 和逸出 Escape 这两个概念倒是第一次听说 不过它在实际当中却十分常见 这和Java并发编程的线程安全性就很大的关系
  • 银行编码规则

    编号 银行名称 001 中国人民银行 011 国家金库 102 中国工商银行 103 中国农业银行 104 中国银行 105 中国建设银行 201 国家开发银行 202 中国进出口银行 203 中国农业发展银行 301 交通银行 302 中
  • 静态编译与动态编译的区别以及为什么需要静态编译

    1 由于博创杯开发板的不可更改性 所以导致的结果是什么呢 那就是无法动态连接 还有一个需要注意的是 板子上面上面用的是4 4 1的gcc 一旦你Ubuntu使用的开发板高于它 都有可能导致运行程序失败 这就是程序失败的例子 2 Linux
  • css 设置段落样式 各种设置方式详细解释

    我本来打算告诉你 当你不在我身边的这段日子里 我遇到的所有糟糕事 但最后我只想告诉你 我很想你 设置段落样式 今天我们详细讲讲设置段落样式的方式 网页的排版离不开对文字段落的设置 这里主要讲述常用的段落样式 包括文字对齐方式 段落首行缩进
  • Java————错误:找不到或无法加载主类

    小编表示WTF 为什么找不到主类dictionary2 0 找不到是什么原因 1 可能是编译的时候后缀带了 class 把后缀去掉 2 可能是因为你的java文件带了package包 但是你还在java文件所在目录运行 返回包的前一目录进行
  • jquery 获取select选中option的索引以及根据索引过滤option

    jquery获取选中option的索引 select可以通过selectedIndex属性快速获取选中option索引 用法如下 select get 0 selectedIndex jquery跟据索引过滤select下的子元素optio
  • Tomcat管理页面配置与访问地址限制修改

    1 增加用户角色和用户 conf tomcat users xml 增加配置
  • UE基础使用

    一 打包 二 显示FPS 三 坐标系 四 第三人称模式 四 筛选物体 五 物体对其到地面 六 UE加载窗口默认布局 七 关闭磁力吸附 关闭后可以自由移动 八 属性变为默认值 九 快速聚焦到物体 按F键或者双击 十 按shift键拖拽坐标轴
  • 机械革命 键盘灯 linux,机械革命x6Ti安装ubuntu(100%成功)

    这个教程是本人亲自试验成功的 方案为ssd不变 ubuntu装在机械硬盘 步骤 1 在电脑的机械硬盘中压缩出一个大小为200G的空间 无论哪个盘 你按自己的需求压缩大小 2 在官网下载系统镜像 解压到U盘中 由于这款电脑的主板新 所以直接解
  • SpringBoot-Thymeleaf-MySQL-SpringMVC实现网页端的数据库信息的增删改查(JavaEE巨详细版)

    Hello 欢迎来到我的博客 既然选择了远方 便只顾风雨兼程 源码已上传资源 0积分获取 觉得有用的点个赞嘛 源码点击这里 上一篇 博客只实现了数据库信息的网页端展示 本篇博客我们来更详细的写一下学生信息管理系统的网页端跳转版增删改查 ht
  • 计算机网络 day8 动态路由 - NAT - SNAT实验 - VMware的网卡的3种模式

    目录 动态路由 IGP 和 EGP 参考网课 4 6 1 路由选择协议概述 哔哩哔哩 bilibili 编辑 IGP Interior Gateway Protocol 内部网关协议 EGP Interior Gateway Protoco
  • 子类实例化对象的全过程

    子类实例化对象的全过程 我们只造了一个对象dog 但是dog的构造器直接或间接的调用了直接父类或间接父类的构造器来加载他们的属性和方法 子类对象实例化全过程图示 从结果上来看 继承性 子类继承父类以后就获取了父类中声明的属性和方法 创建子类
  • 信息隐藏——DCT隐写

    DCT隐写 实验目的 了解DCT的系数隐写 实验内容 Jepg 压缩算法的回顾 用MATLAB实现图像DCT相关操作 完成基于图像DCT的信息隐藏实验 两点法的嵌入和提取 三点法的嵌入和提取 1 Jpeg压缩算法 一 色彩空间转换 RGB空
  • 学习日记--8.5--linux初装

    1 用xmms播放mp3 首先linux自带的xmms缺少一个插件 可以先下载并且安装 xmms mpg123 1 2 7 13 i386 rpm 但是如此之后可能还不可以使用 播放一秒就死住 这时候 在xmms 运行后之上点击 右键 gt
  • FreeAnchor:令anchor自由匹配标签的策略

    前言 本文将要介绍一种为训练样本分配标签的策略 这种策略称作 FreeAnchor 注意不是 anchor free 哦 FreeAnchor 是用于 anchor based 体系下的策略 那么它到底free在哪里呢 anchor还能玩起