弱监督目标定位 | TS-CAM:用于弱监督目标定位的token语义耦合注意力图

关于论文<TS-CAM: Token Semantic Coupled Attention Map for Weakly Supervised Object Localization>学习笔记 

总结:这里就像是vision transformer,做一个分类任务。然后引入分类loss。 

总结:

得到197×768大小的class token+patch token矩阵, 将图像块的特征向量即patch token部分取出来,记作x_patch,我们将它按照在图像中的位置进行reshape,操作如下图所示:

然后经过一个卷积层,将通道数变为类别数,再由全局平均池化得到最终的类别分数。卷积层之后的特征层论文中记为feature_maps。作者在文中提 到,这个feature_maps富含语义信息,可以和不含语义信息的注意力图相乘得到类别激活图。注意力图由我们在每个transformer block(一共12个)得到 的attention matrix获得。具体做法如下图:  

在得到注意力矩阵joint_attention后,作者只取了第一行(第一行第一列的元素也不要)向量,叫做class token的注意力向量,将这个向量按照patch在图像中的位置进行reshape操作,得到cams_re, 如下图所示:


参考:TS-CAM: Token Semantic Coupled Attention Map for Weakly Supervised Object Localization_宇宙小琦的博客-CSDN博客

TS-CAM: Token Semantic Coupled Attention Map for Weakly Supervised Object Localization_feng3355的博客-CSDN博客

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是使用递归下降分析算法实现的表达式解析器的代码(使用Python语言实现): ```python class Lexer: def __init__(self, text): self.text = text self.pos = 0 def get_next_token(self): while self.pos < len(self.text) and self.text[self.pos].isspace(): self.pos += 1 if self.pos < len(self.text) and self.text[self.pos].isdigit(): start = self.pos while self.pos < len(self.text) and self.text[self.pos].isdigit(): self.pos += 1 return int(self.text[start:self.pos]) if self.pos < len(self.text) and self.text[self.pos] in "+-*/()": token = self.text[self.pos] self.pos += 1 return token return None class Parser: def __init__(self, text): self.lexer = Lexer(text) self.current_token = self.lexer.get_next_token() def error(self): raise Exception("Invalid syntax") def eat(self, token_type): if self.current_token == token_type: self.current_token = self.lexer.get_next_token() else: self.error() def factor(self): if self.current_token == "(": self.eat("(") result = self.expr() self.eat(")") else: result = self.current_token self.eat("number") return result def term(self): result = self.factor() while self.current_token in "*/": op = self.current_token self.eat(op) if op == "*": result *= self.factor() else: result /= self.factor() return result def expr(self): result = self.term() while self.current_token in "+-": op = self.current_token self.eat(op) if op == "+": result += self.term() else: result -= self.term() return result def parse(self): return self.expr() if __name__ == "__main__": while True: try: text = input("calc> ") except EOFError: break if not text: continue parser = Parser(text) result = parser.parse() print(result) ``` 这个解析器首先使用词法分析器 Lexer 来获取下一个 token,然后根据语法规则进行递归下降分析。其中,factor 表示最基本的表达式,可以是一个括号包含的表达式或一个数字。term 表示乘法和除法运算,expr 表示加法和减法运算。在解析的过程中,如果发现语法错误,会抛出异常。最后,程序会计算输入表达式的值并输出结果。 下面是一些测试用例: ``` calc> 2+3*4 14 calc> (2+3)*4 20 calc> 2*3/(1+2) 2.0 calc> 2*(3+4)/5 2.8 calc> 1+2+3+4+5 15 calc> 1+2*3+4*5 27 calc> 1++2 Invalid syntax ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程日记✧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值