Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >八位“Booth二位乘算法”乘法器

八位“Booth二位乘算法”乘法器

作者头像
huofo
发布于 2022-03-17 00:25:47
发布于 2022-03-17 00:25:47
1.1K01
代码可运行
举报
文章被收录于专栏:huofo's bloghuofo's blog
运行总次数:1
代码可运行

目录

八位“Booth二位乘算法”乘法器

原理

补码乘法器

之前介绍了几篇无符号乘法器或加法器的写法,当然,稍作修改也就可以改成符合有符号数的乘法器或加法器。

但是呢,我们之前写的乘法器或加法器,其实都是默认是正数来写的,而且是以正数的原码来写的,所以上面说稍作修改也就可以成为有符号数的乘法器或加法器,其实就是对我们以为的原码进行取补码,再进行乘法或加法的运算。

随着计算机硬件部件的升级,处理器技术的发展,现代处理器中的定点数(小数点位置固定)都是按照补码形式来存储的。

所以在之前写的无符号加法器中,只要利用:

\[X_补+Y_补=[X+Y]_补 \]

就可以轻易将原先的加法器改写成有符号加法器——只要对结果再取一次补码即可。

但是乘法器呢?稍作学习可以知道,补码的乘法是这样的:

\[X*Y_补=[X*Y]_补 \]

我们再考虑一下之前所说的:在现代处理器中的定点数都是按照补码形式来存储的

所以我们要想得到两个数的乘法结果,首先应该知道被乘数的原码和补码,再对最终结果取补码,即可得到我们期望的乘法结果。

那么如何求“X*Y补”呢?在处理器中,一个二进制数Y补形如y7y6y5y4y3y2y1y0,也就是表示一个数的补码,那么它的原码是多少呢?

补码的计算方法,除了“首位不变,余位取反再加一”的方式,还有一种就是“用溢出条件来减这个数”,在我们之前第一节课说二进制的时候,以钟表为例——“十二进制”,得到结论——“4-8的补码”。

我们用第二种取补码的方式:-8的补码=12-8=4(这里没有考虑符号问题,只是求了补码的值)

所以考虑一下符号的话,-8的补码=8-12=-4

同理:

十进制下,-4的补码=4-10=-6

二进制下,-101补码=1101补码=101-1000=-011=1011

这样解决求补码的方式在接下来的计算方面就更方便了,至于正数嘛,不变就好了。

回到上面的问题,一个二进制数Y补形如y7y6y5y4y3y2y1y0它的原码是多少呢?根据:

\[[X_补]_补=X \]

Y补的原码Y应该为:

\[Y=(y_7*2^7+y_6*2^6+y_5*2^5+……+y_0*2^0)-1*2^8 \]

稍微化简一下:

\[Y=-y_7*2^7+(y_6*2^6+y_5*2^5+……+y_0*2^0) \]

所以我们如果想求X*Y,可以先求其补码:

\[[X*Y]_补=[X*(-y_7*2^7)+X*(y_6*2^6+y_5*2^5+……+y_0*2^0)]_补 \]

根据补码加法“X补+Y补=[X+Y]补”再稍微化简一下:

\[[X*Y]_补=-y_7*[X*2^7]_补+y_6*[X*2^6]_补+y_5*[X*2^5]_补+……+y_0*[X*2^0]_补 \]

再引入一个定理:

\[[X*2^n]_补=X_补*2^n \]

所以上式又可以换一种写法:

\[[X*Y]_补=X_补*(-y_7*2^7+(y_6*2^6+y_5*2^5+……+y_0*2^0))=Y*X_补 \]

哦这不就是上面介绍过的补码乘法嘛:

\[[X*Y]_补=Y*X_补=X*Y_补 \]

如果令一个数Y1补=y6y6y5y4y3y2y1y0,去掉了首位,那么上式是不是可以理解为:

\[[X*Y]_补=X_补*Y1_补-y_7*X_补*2^7 \]

其中的Y1补不就刚好是Y补的后7位嘛?也就是说一个乘法可以分为两部分理解:首位的乘法和其他位的乘法。首位的乘法产生的部分积符号是减,其他位的部分积符号为加

经过上面的推导大家应该会对补码乘法的原理有了一定的概念,我们来把它写成竖式的形式,以(-6)x(-7)为例,原码乘应该是1110x1111,在计算机中是以补码的形式存储,所以补码乘是1010x1001,代入公式,令X补=1010Y补=1001,其运算过程如下:

这里可能有一些迷惑的是:为什么第一步运算得到的结果是11111010?为什么要在前面填充1111

这也就是所谓的符号填充,我们之前的设计中都没有涉及到符号位,所以默认都是填充0,现在遇到了负数问题,也就需要填充符号了,但是这样看起来是不是一点都觉得很奇怪?如果没办法理解的话,我建议你可以尝试对它求补码,看看是不是可以保持首位符号位不变,余位取反加一。惊叹于设计师的机智。

补码乘法器的原理讲明白了,具体电路实现的话,大家可以尝试一下,本节重点不在于此。

Booth一位乘

在上面已经讨论了补码乘法器的原理,那么什么是Booth乘法器呢?Booth乘法器是由英国的Booth夫妇提出的,并没有什么特殊含义,所以我们直接快进到内容。

经过补码乘法器的推导:

\[[X*Y]_补=X_补*(-y_7*2^7+(y_6*2^6+y_5*2^5+……+y_0*2^0)) \]

参考中学数学:

\[2^n=2*2^{n-1} \]

其核心计算思想是括号里的形式,也就是Y补的原码Y所以我们对括号里的内容再进行分解合并,也就是对Y分解合并。先分解:

\[Y=-y_7*2^7+((2-1)y_6*2^6+(2-1)y_5*2^5+……+(2-1)y_0*2^0) \]

这样应该挺直观了吧:

\[Y=-y_7*2^7+(y_6*2^7-y_6*2^6)+(y_5*2^6-y_5*2^5)+……+(y_0*2^1-y_0*2^0) \]

再合并:

\[Y=(y_6-y_7)*2^7+(y_5-y_6)*2^6+(y_4-y_5)*2^5+……+(0-y_0)*2^0 \]

最后有个0-y0的项,看起来有点不合群,所以令:

\[y_{-1}=0 \]

代入上式,即:

\[Y=(y_6-y_7)*2^7+(y_5-y_6)*2^6+(y_4-y_5)*2^5+……+(y_{-1}-y_0)*2^0 \]

这也就是Booth一位乘算法的原理。其优点就在于不用再像补码乘法器那样,不需要专门对最后一次部分积采用补码减法

根据上式,还可以列出Booth一位乘的规则:

y(i-1)

y(i)

y(i-1) - y(i)

操作

0

0

0

加0

0

1

-1

减X补

1

0

1

加X补

1

1

0

加0

再举个例子来计算,仍以(-6)x(-7)为例,补码乘是1010x1001,列出竖式:

可是这里为什么还是有减法呢?和常规的补码乘法器相比,简直是老和尚抹洗头膏,大可不必。甚至由于每次判断两位数字,增大了电路的复杂度,那么为什么booth乘法器如此好用呢?

其实booth一位乘算法并不常用,但是booth二位乘就不一样了,通过增加一定的空间复杂度,将运算周期减为一半!

Booth二位乘

还是根据补码乘法器,我们将Y的表达式再进行变换——先分解:

\[Y=-2*y_7*2^6+y_6*2^6+(y_5*2^6-2*y_5*2^4)+……+y_0*2^0+y_{-1}*2^0 \]

再整合:

\[Y=(y_5+y_6-2*y_7)*2^6+(y_3+y_4-2*y_5)*2^4)+……+(y_{-1}+y_0-2*y_1)*2^0 \]

好了Booth二位乘算法也完事了,类比于Booth一位乘,我们也可以列出Booth二位乘的规则:

y(i-1)

y(i)

y(i+1)

y(i-1) + y(i) - 2*y(i+1)

操作

0

0

0

0

加0

0

1

0

1

加X补

1

0

0

1

加X补

1

1

0

2

加2*X补,即X补<<1

0

0

1

-2

减2*X补,即X补<<1

0

1

1

-1

减X补

1

0

1

-1

减X补

1

1

1

0

加0

再举个例子来计算,仍以(-6)x(-7)为例,补码乘是1010x1001,列出竖式:

运算周期减半了!

好了,那Booth乘法器有没有三位乘呢?可以有,但是三位的时候就会出现加3*X补2*X补可以通过左移一位得到,而3*X补就有点麻烦了,所以不再介绍,至于四位乘、八位乘,想挑战的同学可以挑战一下。

设计思路

减法变加法

首先我们来解决一个问题,如何把减法消除?我们知道,减去一个数,等于加上这个数的相反数;减去一个数,也等于加上这个数的补码。这个过程中的减数也默认是正数,因为正数的补码还是正数,只有正数前面加一个符号再去补码才有用。那么如上面竖式所写,减去一个负补码,就应该等于加上“这个负补码的补码的相反数”,比如上面的补码乘法器竖式,就应该变换成如下形式:

再说明一下吧:11010,就相当于加11010的补码的相反数,即加10110的相反数,即00110

所以booth一位乘算法的示例应该变成这样:

booth二位乘算法的示例应该变成这样:

vivado特性

考虑到上述减法变加法的操作后,容易总结出:减法变加法,其实就是对补码的符号位取反,也就是对减数每一位取反后再加一。

再回读一边上述的理论部分,可能你会发现,在乘法运算中,只用到了补码“负补码”两种概念的数字。而在vivado中(相当于在处理器中),数字默认是以补码形式存储的,即输入的乘数默认就是补码形式,这样只需要再求出“负补码”即可。设X[3:0]表示一个乘数,默认是以补码形式存储,则其“负补码”:

\[X_{负补码}=!X + 1 \]

至于其原码:

\[X_{原码}=(X[3],!X[2:0]) + 1 \]

其实根本用不着。

有了以上知识储备,我们就可以写代码啦~

设计文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//由于实力不够,没能设计成改一个数字变一个规模的程序
`define size 8
module mul_booth_signed(
    input wire [`size - 1 : 0] mul1,mul2,
    input clk,
    input wire [2:0] clk_cnt,//运算节拍,相当于状态机了,8位的话每次运算有4个拍
    output wire [2*`size - 1 : 0] res
    );

    //由于传值默认就是补码,所以只需要再计算“负补码”即可
    wire [`size - 1 : 0] bmul1,bmul2;
    assign bmul1 = (~mul1 + 1'b1) ;
    assign bmul2 = (~mul2 + 1'b1) ;//其实乘数2的负补码也没用到。
	//其实可以把状态机的开始和结束状态都写出来,我懒得写了,同学们可以尝试一下啊~
    parameter   zeroone       =   3'b00,
                twothree      =   3'b001,
                fourfive      =   3'b010,
                sixseven      =   3'b011;
    //y(i-1),y(i),y(i+1)三个数的判断寄存器,由于有多种情况,也可以看成状态机(也可以改写成状态机形式,大家自己试试吧)
    reg [2:0] temp;

    //部分积
    reg [2*`size-1 : 0] A;
	//每个节拍下把相应位置的数据传给temp寄存器
    always @ (posedge clk) begin
        case(clk_cnt)
            zeroone  : temp <= {mul2[1:0],1'b0};
            twothree : temp <= mul2[3:1];
            fourfive : temp <= mul2[5:3];
            sixseven : temp <= mul2[7:5];
            default : temp <= 0;
        endcase
    end
	
    always @(posedge clk) begin
        if (clk_cnt == 3'b100) begin//如果节拍到4就让部分积归0,此时已经完成一次计算了
            A <= 0;
        end else case (temp)
            3'b000,3'b111 :   begin//这些是从高位到低位的判断,别看反了噢
                A <= A + 0;
            end
            3'b001,3'b010 : begin//加法操作使用补码即可,倍数利用左移解决
                A <= A + ({{8{mul1[`size-1]}},mul1} << 2*(clk_cnt-1));
            end
            3'b011 : begin
                A <= A + ({{8{mul1[`size-1]}},mul1} << 2*(clk_cnt-1) + 1);
            end
            3'b100: begin//减法操作利用“负补码”改成加法操作,倍数利用左移解决
                A <= A + ({{8{bmul1[`size-1]}},bmul1} << 2*(clk_cnt-1) + 1);
            end
            3'b101,3'b110 : begin
                A <= A + ({{8{bmul1[`size-1]}},bmul1} << 2*(clk_cnt-1));
            end
            default: A <= 0;
        endcase
    end
	//当节拍到4的时候写入结果寄存器。
    assign res = (clk_cnt == 3'b100) ? A : 0;
endmodule

这是一个八位Booth二位乘算法的乘法器,至于Booth一位和Booth四位的乘法器,大家各自尝试就好。

此外在这个文件当中,我用到了clk_cnt这个寄存器,大家是不是以为我会多用一个模块用来产生clk_cnt的波形?

身为一个懒人,我直接在测试文件里写了吼吼吼~

综合电路

37个元件,36个IO口,318根线

测试文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`timescale 1ns / 1ps
module mul_tb(
    );
    reg [7:0] mul1,mul2;
    wire [15:0] res;
    reg clk;
    wire clk_en;
    reg [2:0] clk_cnt;

    initial begin
        mul1 <= -8'd7;
        mul2 <= -8'd3;
        clk <= 0;
        clk_cnt <= 3'b0;
    end

    always # 10 clk = ~clk;
	//clk_cnt发生器,懒人版
    always @(posedge clk) begin
        clk_cnt <= clk_cnt + 1'b1;
        if (clk_cnt == 3'b100)
            clk_cnt <= 3'b00;
    end
	//每次运算结束后,让乘数变化,以便产生不同的数据用以观察
    assign clk_en = (clk_cnt == 3'b100) ? 1'b1 : 1'b0;
    always @ (posedge clk_en) begin
        mul2 <= mul2 + 1'b1;
    end

    mul_booth_signed try(.mul1(mul1),.mul2(mul2),.res(res),.clk(clk),.clk_cnt(clk_cnt));
endmodule

仿真波形

将其改成有符号十进制数形式显示,可以验证电路设计正确。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TPAMI 2024 | 逐点监督下的噪声标注建模
在计算机视觉任务中,如人群计数和人体姿态估计,广泛采用了逐点监督。在实践中,点注释中的噪声可能会显著影响算法的性能和鲁棒性。在本文中,我们研究了逐点监督中注释噪声的影响,并为不同任务提出了一系列鲁棒的损失函数。特别是,点注释噪声包括空间位移噪声、遗漏点噪声和重复点噪声。空间位移噪声是最常见的一种,存在于人群计数、姿态估计、视觉跟踪等场景中,而遗漏点和重复点噪声通常出现在密集注释中,如人群计数。在本文中,我们首先通过将真实位置建模为随机变量,将注释点视为真实位置的噪声观测,来考虑位移噪声。中间表示(由点注释生成的平滑热图)的概率密度函数被推导出来,并使用负对数似然作为损失函数,以自然地模拟中间表示中的位移不确定性。遗漏和重复噪声进一步通过经验方式建模,假设噪声以高概率出现在高密度区域。我们将该方法应用于人群计数、人体姿态估计和视觉跟踪,为这些任务提出了鲁棒的损失函数,并在广泛使用的数据集上实现了优越的性能和鲁棒性。
小白学视觉
2024/09/18
1310
TPAMI 2024 | 逐点监督下的噪声标注建模
CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了
大语言模型(LLMs)的成功激发了计算机视觉领域探索分割基础模型的兴趣。这些基础分割模型通常通过 Prompt Engineer 来进行 zero/few 图像分割。其中,Segment Anything Model(SAM)是最先进的图像分割基础模型。
机器之心
2024/04/12
2350
CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了
SAM-Med | 英伟达基于SAM提出医学图像标注效率神器
使用即时学习方法展示了SAM对下游医学分割任务的泛化能力。结果显示,仅使用大约5个输入点就显著提高了分割精度。
集智书童公众号
2023/09/04
1.4K0
SAM-Med | 英伟达基于SAM提出医学图像标注效率神器
清华/上海AI Lab/东南大学/武大联合提出 POINTOBB-V2 迈向更简单、更快速、更强劲的目标检测 !
定向目标检测对于准确 Token 小而密集的目标至关重要,尤其是在远程感测图像、零售分析和场景文本检测等场景中,定向边界框(OBBs)能够提供精确的标注。然而,标注OBBs的工作量较大且成本较高。因此,近年来出现了许多弱监督方法,包括水平边界框监督和点监督。
未来先知
2024/11/25
3120
清华/上海AI Lab/东南大学/武大联合提出 POINTOBB-V2 迈向更简单、更快速、更强劲的目标检测 !
SAMTooth:利用 SAM 实现稀疏监督下的牙齿点云细分 !
准确地从口腔扫描仪(IOS)的网格数据中提取3D牙点的牙齿分割在许多正畸应用中起着关键作用,包括详细分析牙齿形态学、治疗计划、个性化装置设计等。然而,现有的牙齿点云分割模型 主要依赖于大量的标注数据集进行训练,这涉及到牙点云标注的劳动密集型任务。例如,一个有经验的牙科医生手动标注半个下颌大约需要15到30分钟 [30]。这种耗时过程对建立大规模、高质量标注数据集极具挑战性并且降低了诊断系统的泛化性 。
未来先知
2024/09/11
3100
SAMTooth:利用 SAM 实现稀疏监督下的牙齿点云细分 !
医疗SAM也来啦 | AutoSAM告诉你如何在医疗领域更快更好开发大模型
生成预训练Transformer(Generative Pre-trained Transformer,GPT)系列模型的成功表明,如果在大规模数据上进行训练,大型语言模型在零样本和非可视域中的少量快照任务上的性能与最新技术相当。
集智书童公众号
2023/09/04
9620
医疗SAM也来啦 | AutoSAM告诉你如何在医疗领域更快更好开发大模型
复旦大学提出SemiSAM | 如何使用SAM来增强半监督医学图像分割?这或许是条可行的路!
医学图像分割的目标是从医学图像(如器官和病变)中识别特定的解剖结构,这是为提供可靠的体积和形状信息并协助许多临床应用(如疾病诊断和定量分析)提供基础和重要的一步。尽管基于深度学习的方法在医学图像分割任务上表现出色,但大多数这些方法都需要相对大量的优质标注数据进行训练,而获取大规模的仔细 Token 数据集是不切实际的,尤其是在医学成像领域,只有专家能够提供可靠和准确的分割标注。此外,常用的医学成像模式如CT和MRI是3D体积图像,这进一步增加了手动标注的工作量,与2D图像相比,专家需要逐层从体积切片进行分割。
集智书童公众号
2024/01/03
2K0
复旦大学提出SemiSAM | 如何使用SAM来增强半监督医学图像分割?这或许是条可行的路!
SAMReg 基于多类分割的通用图像配准解决方案 !
定分和配准都是医学影像分析中的基本任务,广泛应用于临床实践。传统上,定分任务需要一个输入图像,并寻找一个或多个感兴趣区域(ROIs)。定分通常用二进制 Mask 或ROI边界表示,而配准任务需要两张图像作为输入,输出一个空间上对齐的结果。这种空间变换可以表示为密集位移场(DDF)或其他参数函数(如刚性、仿射和控制点基曲线)。
未来先知
2024/11/11
3920
SAMReg 基于多类分割的通用图像配准解决方案 !
SAM究极进化版开源 | SAM与CLIP互相学习,带来最强Open-Vocabulary SAM,万物皆可
SAM和CLIP在各种视觉任务中取得了显著的进展,展示了在分割和识别方面令人瞩目的泛化能力。SAM特别之处在于,它使用了一个庞大的带有Mask标签的数据集进行训练,使得它可以通过交互式Prompt对广泛的下游任务进行高度适应。另一方面,CLIP通过训练数十亿个文本-图像对,获得了前所未有的在零样本视觉识别方面的能力。这导致了大量研究探索将CLIP扩展到开放词汇任务,例如检测和分割。
集智书童公众号
2024/01/10
3.5K0
SAM究极进化版开源 | SAM与CLIP互相学习,带来最强Open-Vocabulary SAM,万物皆可
ICCV 2021 | 腾讯优图17篇论文入选,含跨模态检索与分割、车辆识别、视频理解等领域
计算机视觉世界三大顶会之一的ICCV 2021论文接收结果出炉!本次大会收到来自全球共6236篇有效投稿,最终有1617篇突出重围被录取,录用率约为25.9%。此次ICCV 2021接收的论文分为检测、分割、跟踪、视觉定位、底层图像处理、图像视频检索、三维视觉等多个方向。本次腾讯优图实验室共有17篇论文被收录,其中Oral论文2篇,涵盖跨模态检索、分割、行人识别、神经网络、人群计数、车辆识别、物体识别、视频偏好推理、多标签识别等前沿领域。
优图实验室
2021/08/02
1.1K0
ICCV 2021 | 腾讯优图17篇论文入选,含跨模态检索与分割、车辆识别、视频理解等领域
韩国高研院优化CLIP | 通过全局-局部训练方案解决CLIP中小目标丢失和Mask噪声问题
值得注意的是,所提出的该方法在Cityscapes测试数据集上实现了51.8%的“mIoU”,展示了其在驾驶场景数据集上的强大WSSS Baseline 的潜力。在CamVid和WildDash2上的实验结果表明,作者的方法在各种数据集上具有有效性,即使数据集较小或具有视觉挑战性条件。 代码:https://github.com/k0u-id/CARB
集智书童公众号
2024/04/12
9230
韩国高研院优化CLIP | 通过全局-局部训练方案解决CLIP中小目标丢失和Mask噪声问题
弱监督三维点云语义分割研究综述
作者:Jingyi Wang, Yu Liu, Hanlin Tan, Maojun Zhang
一点人工一点智能
2023/11/15
6450
弱监督三维点云语义分割研究综述
Nice Trick | 不想标注数据了!有伪标签何必呢,Mixup+Mosaic让DINO方法再继续涨点
在深度学习时代,目标检测取得了显著的进展,但高度依赖昂贵的人工标注。因此,半监督学习越来越受到研究兴趣的青睐,它利用 未标注 数据来提高检测器性能,而不只是依赖标注。
集智书童公众号
2023/12/19
1.5K0
Nice Trick | 不想标注数据了!有伪标签何必呢,Mixup+Mosaic让DINO方法再继续涨点
RS 视觉定位中的跨任务难题与 GeoGround 的解决方案 !
在遥感和(RS)社区中,早期的视觉定位任务[26, 37]特指在卫星图像和相关文本 Query 的基础上,给出特定物体的水平边界框(HBBs)的位置。随着RS数据集[12, 25, 34]的日益丰富,研究行人开始使用定向边界框(OBBs)[9]或分割 Mask [36]来更准确地描绘所指物体。RS视觉定位使得人类能够以更直观的方式与计算机进行互动,这在提高智能RS解释系统的效率方面具有巨大的潜力[29]。
AIGC 先锋科技
2025/01/07
2290
RS 视觉定位中的跨任务难题与 GeoGround 的解决方案 !
台湾大学 & 英伟达提出 SAM4MLLM 用于指代表达式分割的增强多模态大语言模型 !
随着生成式AI的快速发展,大语言模型(LLM) 成为研究和应用的关注焦点。它们在理解和生成文本方面展现出强大的能力,推动了机器学习和人类机交互的演变。
未来先知
2024/09/30
5290
台湾大学 & 英伟达提出 SAM4MLLM 用于指代表达式分割的增强多模态大语言模型 !
ReliableStudent | 减轻噪声伪标签的半监督3D目标检测方法,超越 KITTI 3D目标检测在点云水平!
在深度学习近期发展的推动下,图像分类和目标检测领域已取得显著进展。大量数据集的可用性有助于加速这些进步。然而,为大规模数据集标注仍然是瓶颈,特别是对于2D和3D目标检测。半监督方法(SSA)已提出以解决此问题。与监督方法不同,这些方法仅需要有限数量的标注数据进行训练,其余数据未标注。
AIGC 先锋科技
2024/07/08
3690
ReliableStudent | 减轻噪声伪标签的半监督3D目标检测方法,超越 KITTI 3D目标检测在点云水平!
CVPR 2020丨ADSCNet: 自纠正自适应膨胀率计数网络解读
编者按:在CVPR 2020上,商汤团队提出的自纠正自适应膨胀率计数网络,针对计数任务中点标注位置不一致和透视现象造成巨大的尺度变化的问题提出了有效的网络设计和监督方法。在监督方式方面,ADSCNet利用网络学习的结果来纠正不一致的人工标注从而更有效的训练;在网络设计方面,ADSCNet提出自适应膨胀率的卷积结构,不同位置采用不同的膨胀率来适应尺度的变化。ADSCNet在四个公开数据集上均有显著的提升。
马上科普尚尚
2020/07/17
6800
CVPR 2020丨ADSCNet: 自纠正自适应膨胀率计数网络解读
小样本利器5. 半监督集各家所长:MixMatch,MixText,UDA,FixMatch
在前面的几个章节中,我们介绍了几种基于不同半监督假设的模型优化方案,包括Mean Teacher等一致性正则约束,FGM等对抗训练,min Entropy等最小熵原则,以及Mixup等增强方案。虽然出发点不同但上述优化方案都从不同的方向服务于半监督的3个假设,让我们重新回顾下(哈哈自己抄袭自己):
风雨中的小七
2023/01/11
3.5K0
小样本利器5. 半监督集各家所长:MixMatch,MixText,UDA,FixMatch
【综述笔记】一些弱监督语义分割论文
这里的弱监督信息为image-level的类别信息,即没有像素级的语义分割标签,而仅有图像级的类别标签,即知道每张图里有哪些类别。
公众号机器学习与AI生成创作
2020/04/28
1.8K0
CLIP-EBC:通过增强的逐块分类,CLIP能够准确计数
https://arxiv.org/pdf/2403.09281v1 CLIP(Contrastive Language-Image Pretraining,对比语言-图像预训练)模型在识别问题中表现出了卓越的性能,如零样本图像分类和对象检测。然而,由于其固有的挑战——即将计数(一项回归任务)转化为识别任务,CLIP在计数方面的能力仍然研究不足。在本文中,我们研究了CLIP在计数方面的潜力,特别是聚焦于人群规模估计。现有的基于分类的人群计数方法遇到了包括不恰当的离散化策略在内的问题,这些问题阻碍了CLIP的应用并导致性能次优。为了解决这些挑战,我们提出了增强的分块分类(Enhanced Blockwise Classification,EBC)框架。与以往方法不同,EBC依赖于整数值的箱(bins),这有助于学习稳健的决策边界。在我们的与模型无关的EBC框架内,我们引入了CLIPEBC,这是第一个能够生成密度图的完全基于CLIP的人群计数模型。通过对不同人群计数数据集的综合评估,我们方法的先进性能得到了证明。特别是,EBC可以使现有模型的性能提升高达76.9%。此外,我们的CLIP-EBC模型超越了当前的人群计数方法,在上海科技大学A部分和B部分数据集上分别实现了55.0和6.3的平均绝对误差。代码将公开提供。
AI浩
2024/10/22
3320
CLIP-EBC:通过增强的逐块分类,CLIP能够准确计数
推荐阅读
TPAMI 2024 | 逐点监督下的噪声标注建模
1310
CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了
2350
SAM-Med | 英伟达基于SAM提出医学图像标注效率神器
1.4K0
清华/上海AI Lab/东南大学/武大联合提出 POINTOBB-V2 迈向更简单、更快速、更强劲的目标检测 !
3120
SAMTooth:利用 SAM 实现稀疏监督下的牙齿点云细分 !
3100
医疗SAM也来啦 | AutoSAM告诉你如何在医疗领域更快更好开发大模型
9620
复旦大学提出SemiSAM | 如何使用SAM来增强半监督医学图像分割?这或许是条可行的路!
2K0
SAMReg 基于多类分割的通用图像配准解决方案 !
3920
SAM究极进化版开源 | SAM与CLIP互相学习,带来最强Open-Vocabulary SAM,万物皆可
3.5K0
ICCV 2021 | 腾讯优图17篇论文入选,含跨模态检索与分割、车辆识别、视频理解等领域
1.1K0
韩国高研院优化CLIP | 通过全局-局部训练方案解决CLIP中小目标丢失和Mask噪声问题
9230
弱监督三维点云语义分割研究综述
6450
Nice Trick | 不想标注数据了!有伪标签何必呢,Mixup+Mosaic让DINO方法再继续涨点
1.5K0
RS 视觉定位中的跨任务难题与 GeoGround 的解决方案 !
2290
台湾大学 & 英伟达提出 SAM4MLLM 用于指代表达式分割的增强多模态大语言模型 !
5290
ReliableStudent | 减轻噪声伪标签的半监督3D目标检测方法,超越 KITTI 3D目标检测在点云水平!
3690
CVPR 2020丨ADSCNet: 自纠正自适应膨胀率计数网络解读
6800
小样本利器5. 半监督集各家所长:MixMatch,MixText,UDA,FixMatch
3.5K0
【综述笔记】一些弱监督语义分割论文
1.8K0
CLIP-EBC:通过增强的逐块分类,CLIP能够准确计数
3320
相关推荐
TPAMI 2024 | 逐点监督下的噪声标注建模
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验