【结果分析】之block项目

Qemu Vhost Block架构分析(上) 一.简介 一说到Vhost Block是一个很 阅读详情

block

vqa项目介绍

1.vqaEval

# This code is based on the code written by Tsung-Yi Lin for MSCOCO Python API available at the following link: 
# (https://github.com/tylin/coco-caption/blob/master/pycocoevalcap/eval.py).
import sys
import re

class VQAEval:
	def __init__(self, vqa, vqaRes, n=2):
		self.n 			  = n
		self.accuracy     = {} #精确度
		self.evalQA       = {} #需要评估的问答对
		self.evalQuesType = {} #需要评估的问题类型
		self.evalAnsType  = {} #需要评估的答案类型
		self.vqa 		  = vqa #vqa数据集加载
		self.vqaRes       = vqaRes #vqa结果集加载
		self.params		  = {'question_id': vqa.getQuesIds()} #将问题id作为参数集
		#将答案中出现的缩略词,变换成真正缩略词表示
		self.contractions = {"aint": "ain't", "arent": "aren't", "cant": "can't", "couldve": "could've", "couldnt": "couldn't", \
							 "couldn'tve": "couldn't've", "couldnt've": "couldn't've", "didnt": "didn't", "doesnt": "doesn't", "dont": "don't", "hadnt": "hadn't", \
							 "hadnt've": "hadn't've", "hadn'tve": "hadn't've", "hasnt": "hasn't", "havent": "haven't", "hed": "he'd", "hed've": "he'd've", \
							 "he'dve": "he'd've", "hes": "he's", "howd": "how'd", "howll": "how'll", "hows": "how's", "Id've": "I'd've", "I'dve": "I'd've", \
							 "Im": "I'm", "Ive": "I've", "isnt": "isn't", "itd": "it'd", "itd've": "it'd've", "it'dve": "it'd've", "itll": "it'll", "let's": "let's", \
							 "maam": "ma'am", "mightnt": "mightn't", "mightnt've": "mightn't've", "mightn'tve": "mightn't've", "mightve": "might've", \
							 "mustnt": "mustn't", "mustve": "must've", "neednt": "needn't", "notve": "not've", "oclock": "o'clock", "oughtnt": "oughtn't", \
							 "ow's'at": "'ow's'at", "'ows'at": "'ow's'at", "'ow'sat": "'ow's'at", "shant": "shan't", "shed've": "she'd've", "she'dve": "she'd've", \
							 "she's": "she's", "shouldve": "should've", "shouldnt": "shouldn't", "shouldnt've": "shouldn't've", "shouldn'tve": "shouldn't've", \
							 "somebody'd": "somebodyd", "somebodyd've": "somebody'd've", "somebody'dve": "somebody'd've", "somebodyll": "somebody'll", \
							 "somebodys": "somebody's", "someoned": "someone'd", "someoned've": "someone'd've", "someone'dve": "someone'd've", \
							 "someonell": "someone'll", "someones": "someone's", "somethingd": "something'd", "somethingd've": "something'd've", \
							 "something'dve": "something'd've", "somethingll": "something'll", "thats": "that's", "thered": "there'd", "thered've": "there'd've", \
							 "there'dve": "there'd've", "therere": "there're", "theres": "there's", "theyd": "they'd", "theyd've": "they'd've", \
							 "they'dve": "they'd've", "theyll": "they'll", "theyre": "they're", "theyve": "they've", "twas": "'twas", "wasnt": "wasn't", \
							 "wed've": "we'd've", "we'dve": "we'd've", "weve": "we've", "werent": "weren't", "whatll": "what'll", "whatre": "what're", \
							 "whats": "what's", "whatve": "what've", "whens": "when's", "whered": "where'd", "wheres": "where's", "whereve": "where've", \
							 "whod": "who'd", "whod've": "who'd've", "who'dve": "who'd've", "wholl": "who'll", "whos": "who's", "whove": "who've", "whyll": "why'll", \
							 "whyre": "why're", "whys": "why's", "wont": "won't", "wouldve": "would've", "wouldnt": "wouldn't", "wouldnt've": "wouldn't've", \
							 "wouldn'tve": "wouldn't've", "yall": "y'all", "yall'll": "y'all'll", "y'allll": "y'all'll", "yall'd've": "y'all'd've", \
							 "y'alld've": "y'all'd've", "y'all'dve": "y'all'd've", "youd": "you'd", "youd've": "you'd've", "you'dve": "you'd've", \
							 "youll": "you'll", "youre": "you're", "youve": "you've"}
		self.manualMap    = { 'none': '0',
							  'zero': '0',
							  'one': '1',
							  'two': '2',
							  'three': '3',
							  'four': '4',
							  'five': '5',
							  'six': '6',
							  'seven': '7',
							  'eight': '8',
							  'nine': '9',
							  'ten': '10'
							}
		self.articles     = ['a',
							 'an',
							 'the'
							]
 

		self.periodStrip  = re.compile("(?!<=\d)(\.)(?!\d)")
		self.commaStrip   = re.compile("(\d)(\,)(\d)")
		self.punct        = [';', r"/", '[', ']', '"', '{', '}',
							 '(', ')', '=', '+', '\\', '_', '-',
							 '>', '<', '@', '`', ',', '?', '!']

	
	#评估函数
	def evaluate(self, quesIds=None):
		"""
		quesIds: 要在其上计算的问题id列表评估。通常情况下,如果你的预测没有进行下去整个数据集,
		只需传递问题id列表,你在这里有一个答案
		"""
		if quesIds == None:
			quesIds = [quesId for quesId in self.params['question_id']]
		gts = {}
		res = {}
		for quesId in quesIds:
			gts[quesId] = self.vqa.qa[quesId]
			res[quesId] = self.vqaRes.qa[quesId]
		
		# =================================================
		# 计算的准确性
		# =================================================
		accQA       = []
		accQuesType = {}
		accAnsType  = {}
		#print "computing accuracy"
		step = 0
		for quesId in quesIds:
			resAns      = res[quesId]['answer'] #按问题id选中答案
			resAns      = resAns.replace('\n', ' ') #去掉\n,\t符号
			resAns      = resAns.replace('\t', ' ')
			resAns      = resAns.strip() #去掉最后一个空符号
			resAns      = self.processPunctuation(resAns) #对答案预处理1
			resAns      = self.processDigitArticle(resAns)#对答案预处理2
			gtAcc  = [] #准确度列表
			gtAnswers = [ans['answer'] for ans in gts[quesId]['answers']] #获取答案字典中每一个answer
			if len(set(gtAnswers)) > 1:  #如果答案词数大于1
				for ansDic in gts[quesId]['answers']: 
					ansDic['answer'] = self.processPunctuation(ansDic['answer']) #处理后的答案列表
			for gtAnsDatum in gts[quesId]['answers']: 
				otherGTAns = [item for item in gts[quesId]['answers'] if item!=gtAnsDatum] #??item难道不等于gtAnsDatum
				matchingAns = [item for item in otherGTAns if item['answer']==resAns] #匹配答案
				acc = min(1, float(len(matchingAns))/3) #3个答对就是对
				gtAcc.append(acc) #将准确度保存在gtAcc在
			quesType    = gts[quesId]['question_type'] #获取问题类型
			ansType     = gts[quesId]['answer_type'] #获取答案类型
			avgGTAcc = float(sum(gtAcc))/len(gtAcc) #获取平均准确度
			accQA.append(avgGTAcc) #将其加入accQA列表中
			if quesType not in accQuesType: #将问题类型添加到问题类型准确度计算列表中
				accQuesType[quesType] = []
			accQuesType[quesType].append(avgGTAcc) #将其的准确度添加相应位置
			if ansType not in accAnsType:
				accAnsType[ansType] = []
			accAnsType[ansType].append(avgGTAcc)
			self.setEvalQA(quesId, avgGTAcc)
			self.setEvalQuesType(quesId, quesType, avgGTAcc) #评估问题类型准确度:传入问题id,问题类型,平均准确度
			self.setEvalAnsType(quesId, ansType, avgGTAcc) #评估答案类型:传入问题id,答案类型,平均准确度
			if step%100 == 0:
				self.updateProgress(step/float(len(quesIds)))
			step = step + 1

		self.setAccuracy(accQA, accQuesType, accAnsType)
		#print "Done computing accuracy"
	
	def processPunctuation(self, inText):
		outText = inText
		for p in self.punct:
			if (p + ' ' in inText or ' ' + p in inText) or (re.search(self.commaStrip, inText) != None):
				outText = outText.replace(p, '')
			else:
				outText = outText.replace(p, ' ')	
		outText = self.periodStrip.sub("",
									  outText,
									  re.UNICODE)
		return outText
	
	def processDigitArticle(self, inText):
		outText = []
		tempText = inText.lower().split()
		for word in tempText:
			word = self.manualMap.setdefault(word, word)
			if word not in self.articles:
				outText.append(word)
			else:
				pass
		for wordId, word in enumerate(outText):
			if word in self.contractions: 
				outText[wordId] = self.contractions[word]
		outText = ' '.join(outText)
		return outText

	def setAccuracy(self, accQA, accQuesType, accAnsType):
		self.accuracy['overall']         = round(100*float(sum(accQA))/len(accQA), self.n)
		self.accuracy['perQuestionType'] = {quesType: round(100*float(sum(accQuesType[quesType]))/len(accQuesType[quesType]), self.n) for quesType in accQuesType}
		self.accuracy['perAnswerType']   = {ansType:  round(100*float(sum(accAnsType[ansType]))/len(accAnsType[ansType]), self.n) for ansType in accAnsType}
			
	def setEvalQA(self, quesId, acc):
		self.evalQA[quesId] = round(100*acc, self.n)

	def setEvalQuesType(self, quesId, quesType, acc):
		if quesType not in self.evalQuesType:
			self.evalQuesType[quesType] = {}
		self.evalQuesType[quesType][quesId] = round(100*acc, self.n)
	
	def setEvalAnsType(self, quesId, ansType, acc):
		if ansType not in self.evalAnsType:
			self.evalAnsType[ansType] = {}
		self.evalAnsType[ansType][quesId] = round(100*acc, self.n)

	def updateProgress(self, progress): #更新步骤
		barLength = 20
		status = ""
		if isinstance(progress, int):
			progress = float(progress)
		if not isinstance(progress, float):
			progress = 0
			status = "error: progress var must be float\r\n"
		if progress < 0:
			progress = 0
			status = "Halt...\r\n"
		if progress >= 1:
			progress = 1
			status = "Done...\r\n"
		block = int(round(barLength*progress))
		text = "\rFinshed Percent: [{0}] {1}% {2}".format( "#"*block + "-"*(barLength-block), int(progress*100), status)
		# sys.stdout.write(text)
		# sys.stdout.flush()

2. 结果分析

由于epoch等于1,只训练了一次所以结果的准确度不是很高,但是主要就是用于我们分析。
在这里插入图片描述

下标只展示结果中准确度低于20的问题类型,

问题类型含义答案类型问题数
(‘what time’, 0.58),几点了?other/number:17092914
(‘what number is’, 3.74),数字是多少?other/number:16321668
(‘how’, 4.47),怎么样?other/number:15964740
(‘where is the’, 5.12),在哪里?other/number:56734
(‘what brand’, 6.09),什么牌子?other/number:41600
(‘where are the’, 6.37),在哪里?other2161
(‘who is’, 6.91),是谁?other/number:162154
(‘why is the’, 7.77),为什么是这样?other/number:31544
(‘why’, 8.42),为什么?other/number:51544
(‘what is on the’, 8.7),那上面是什么?other/number:34254
(‘what is the name’, 9.59),名字是什么?other/number:181618
(‘what is the’, 11.84),这是什么?other/number:145924502
(‘what is’, 12.06),是什么?做什么?other/number:8513561
(‘what are the’, 12.32),什么other/number:1457225
(‘what’, 13.9),什么other/number:155234608
(‘what is in the’, 14.98),什么other3990
(‘what type of’, 15.12),什么other/number:87962
(‘what does the’, 15.67),什么other/number:1754075
(‘what kind of’, 15.69),**什么种类?other/number:811192
(‘what is the woman’, 16.32),这个女人**什么other1706
(‘what are’, 19.09),什么?other/number:1453277

结果预测值大于20的

('what is the man', 21.24),
('which', 24), 
('what is this', 24.9), 
('what is the person', 25.09), 
('how many people are in', 32.2),  
('what color are the', 32.59), 
('what color', 33.25), 
('how many people are', 34.58),  
('how many', 35.86),  number
('what color is the', 36.14), 
('what color is', 38.62), 
('what is the color of the', 38.82), 
('none of the above', 40.6),  
('what animal is', 43.06), 
('is the person', 55.66), 
('is that a', 57.48), 
('is it', 59.16), 
('is the', 59.57), 
('is this person', 59.81), 
('what room is', 60.63), 
('is he', 61.01), 
('is this', 61.06), 
('are the', 61.46), 
('are there any', 61.47), 
('is the man', 61.48), 
('are they', 61.48), 
('is the woman', 61.55), 
('was', 61.88), 
('is this a', 62.08), 
('are there', 62.18), 
('is there a', 62.21), 
('can you', 62.48), 
('is this an', 62.67), 
('are', 63.01), 
('is there', 63.03), 
('is', 63.1), 
('do you', 63.14), 
('are these', 63.22), 
('does the', 63.68), 
('has', 63.88), 
('do', 64.63), 
('does this', 64.82), 
('what sport is', 67.96), 
('could', 71.98)

由结果可以看出:what time,what number is,how,where is the,what brand
预测结果是top5最差的,其中前两个答案类型是number,后几个是other。

3.提出问题

由此可知,导致结果平均准确率的原因可能是:针对询问图片中“几点了?”,“那个数字是什么?”这类问题类型预测不够准确?

所以我个人理解针对number类型的回答,平均准确率不高的原因不是关于图像中询问’how many’这类回答,而是针对图像中出现的数字识别?

针对‘where is the’的提问,主要是识别图像中的对象的位置,所以添加了关系之后,我们再分析下其结果。添加了关系的murel结果分析

又见block(一):block是什么? block的原理实质问题是一道分水岭,区分中高级程序的试金石,一般的大公司,他可能不会问你内存管理甚至多线程编程与简单的一笔带过,但是block一定会仔细问。无奈的是平时只知使用,对其原理与实质没有深究,因此数次面试倒在这道坎上,真是心有不甘,这次好好理理关于block的前因后果,以供后续随手翻阅查证。... 阅读详情

相关推荐

Qemu Vhost Block架构分析(下)

一. 概述 在上半部已经将VirtIO-blk

u012377031的专栏 5054

VQAv2评估代码 - 使用教程

视觉问答VQA 评估系统

2301_78651472的博客 5344

MySQL中的Block Nested Loop优化分析

前言 一般在MySQL规范中,都会规定如果两张表进行join查询,那么join的字段一定要有索引,在之前的文章中我们分析了MySQL join大小表前后顺序影响分析,这是在有索引的情况下,今天我们再来看看如果没有索引MySQL会如何处理。 数据准备 新建了两张表,分别为t1,t2。 t1和t2表都是一个id字段作为主键,一个c字段,没有索引。 分别插入10条数据 t1,t2表数据都如下 Join查询 EXPLAIN select * from t1 LEFT JOIN t2 on t1.c = t2.c

自律使我自由 5391

VQA评测evaluation代码:gqa / aokvqa / vqav2 / scienceQA

vqa评测

joyce_peng的博客 3419

Halcon实战:基于图像清晰度自动筛选最佳对焦图片

本文详细介绍了如何使用Halcon实现基于图像清晰度的自动筛选最佳对焦图片技术。通过分析灰度值统计和标准差等核心指标,结合实战代码示例,帮助开发者高效处理工业检测中的对焦问题,提升自动化检测的准确性和效率。

weixin_27015733的博客 442

高通410刷OpenWRT后网络共享配置全攻略

本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。

grafana6viz的博客 572

【结果分析】之murel项目结果分析

1.murel:视觉问答VQA中的多模态关系推理 项目介绍 本次结果是第20个epoch,采用的是验证集的results文件,由于中途断了,导致没有执行测试集test. 2.结果分析 我们评估采用的使官网提供的eval, 2.1 结果 Overall Accuracy is: 64.50 Per Question Type Accuracy is the following: none of the above : 58.44 what are the : 50.41 what is : 43.08

snow_maple521的博客 449

STM32----SPI+DMA高效读写外部Flash的配置与实战

本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。

pea55的博客 1031

BLOCK项目使用教程

BLOCK项目使用教程 1. 项目介绍 BLOCK项目是一个用于深度学习模型的多模态融合库,主要用于视觉问答(VQA)和视觉关系检测(VRD)任务。该项目在AAAI 2019会议上发表,并提供了一个名为BLOCK的新模块,用于融合两种表示形式。BLOCK模块在实验中表现优于现有的融合方法,并提供了理论基础分析。 项目的主要特点包括: 提供多种强大的融合方法,如MLB、MUTAN、MCB、MFB、...

gitblog_00491的博客 895

STM32cube HAL库两条命令实现i2c通信---Nucleo L476RG用I2C实现tmp117模块温度读取并串口打印

Getting Started with STM32 - I2C Example

m0_54706625的博客 1834

Python爬虫经典案例第67篇:社交媒体平台爬取:Twitter数据采集实战

Twitter(现更名为X)是全球最具影响力的社交媒体平台之一,拥有超过3.3亿月度活跃用户。作为一个实时信息传播平台,Twitter上的数据涵盖了新闻、政治、娱乐、科技等各个领域,具有极高的研究价值:本文将深入探讨Twitter数据采集的技术方案,包括官方API调用、网页爬取和浏览器自动化三种方式。Twitter采用现代化的微服务架构,主要特点包括:Twitter作为全球最大的社交媒体平台,拥有完善的反爬机制:在开始爬取前,需要明确合法的数据采集方式:重要提示:未经授权爬取Twitter数据可能违反服务条

2201_76125261的博客 659

block原理探索

1 block的常用写法分类 在讲解block原理之前,先介绍绝大部分block的使用类型。 1.1 不访问外部变量的带参的block 1.2 不访问外部变量的不带参的block 1.3 访问外部的全局变量的block 1.4 访问外部的局部变量的block #1.5 访问外部的静态局部变量 2 从C++代码中窥探block的实现 2.1 block本质上是一个OC对象 在窥探block的实现之前,请先看下图的demo的运行结果,从代码及其运行结果可以看出block就是一个OC对象,通过调用该对象的

u010919133的专栏 525

lammps教程:非晶sio2建模方法

大家好,我是小马老师。 本文介绍非晶sio2的建模方法。 sio2的建模方法有很多,可以下载cif文件使用atomsk转为data文件,也可以直接在ms中导入sio2结构,这些方法建的sio2都是标准的sio2晶体。 如果要建立非晶状态的sio2,就是把排列规则的sio2变成无序排列的sio2。 非晶建模方法有很多,在lammps中,可以通过高温高压的方法打乱sio2的排列实现非晶建模。 代码中的温度和步数可根据需要自己调整。 下面给出in文件案例代码。 units metal atom

lammps_jiayou的博客 5269

计算机辅助正畸学模型分析,计算机辅助数学模型分析Twin-block功能矫治后的组织相关性...

《中国组织工程研究与临床康复》杂志2011年22期中国组织工程研究与临床康复第15卷第22期 2011–05–28出版Journal of Clinical Rehabilitative Tissue Engineering Research May 28, 2011 Vol.15, No.22 ISSN 1673-8225 CN 21-1539/R CODEN: Z LKHAH4073 ...

weixin_28339527的博客 267

从源码编译CesiumForUnreal

从源码编译CesiumForUnreal插件

专注GIS开发 5644

Holosoma 开源人形机器人强化学习训练部署框架

Holosoma是一个综合性人形机器人框架,支持强化学习策略的训练、部署和动作重定位。该框架兼容多种模拟器(IsaacGym、IsaacSim、MuJoCo等)和机器人(Unitree G1、Booster T1),提供运动控制和全身追踪功能。主要特性包括:跨模拟器训练评估、Wandb集成、多GPU支持、自定义奖励权重和观测噪声配置。推理模块支持实体机器人部署和MuJoCo仿真测试。动作重定位工具可将人体动作数据转换为机器人动作,支持单序列和批量处理。文档详细介绍了训练配置、评估方法和高级功能,如课程学习和

2506_90492529的博客 1829

时间序列预测实战(十一)用SCINet实现滚动预测功能(附代码+数据集+原理介绍)

这篇文章给大家带来的是关于SCINet实现时间序列滚动预测功能的讲解,SCINet是样本卷积交换网络的缩写(Sample Convolutional Interchange Network),SCINet号称是比现有的卷积模型和基于Transformer的模型准确率都有提升(我实验了几次效果确实不错)。本篇文章讲解的代码是我个人根据官方的代码总结出来的模型结构并且进行改进增加了滚动预测的功能。模型我用了两个数据集进行测试,一个是某个公司的话务员接线量一个是油温效果都不错,我下面讲解用油温的数据进行案例的讲解

Snu77的博客 5224

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Objc Block实现分析

Objc Block实现分析 Block在iOS开发中使用的频率是很高的,使用的场景包括接口异步数据的回调(AFN)、UI事件的回调(BlockKits)、链式调用(Masonry)、容器数据的遍历回调(NSArray、NSDictionary),具体的用法以及使用Block的一些坑这里就不一一赘述了,本文会从源代码的层面分析我们常用的Block的底层实现原理,做到知其然知其所以然。 本文会从如下...

weixin_34256074的博客 137

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Block笔记(6)— __block的深入分析

a

RUNNING-NIUER的博客 865

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Block从简单到高级的使用,以及项目中经常使用的场景

Block从简单到高级的使用,以及项目中经常使用的场景 一、Block的简单使用        使用Block的三个步骤:1.定义Block变量;2.定义Block(即创建block代码块)3.调用block匿名函数; 1>以下是使用的两个简单的例子: 无参数,无返回值 有参数有返回值 2>定义Block变量的时候一般大家都是用typedef重定义,

u014536527的专栏 8026

LibreDWG项目中DXF文件BLOCK名称缺失问题的分析与修复

在使用LibreDWG工具将DWG文件转换为DXF格式时,用户发现生成的DXF文件中存在BLOCK实体名称缺失的问题。具体表现为: 1. 使用dwg2dxf工具将2018版本的DWG文件转换为2004版本的DXF文件后 2. 生成的DXF文件无法被AutoDesk TrueView应用程序打开 3. 第三方库ezdxf也无法解析该文件,报错提示缺少名称标签 ## 技术分析 经过深入分析,发现问

gitblog_07770的博客 553

【iOS】Block底层分析

Block在iOS开发中极为重要,非常适合处理异步操作、回调、集合操作等场景,本文重点学习Block的底层结构、内存管理、变量捕获、相关修饰符和循环引用解决方案

XY_Mckevince的博客 1518

iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)

说在前面 Block你知道几种?Block的循环引用你有几种解决办法呢? 在上一篇博客结束了多线程的锁篇章的内容,最后也带大家手写了读写锁,那么从现在开始,将开启Block的探索篇章! 1. 什么是 Block? Block就是一个代码块, Block是将函数及其执行上下文封装起来的对象,是一个匿名的函数对象, Block也有isa。既然Block内部封装了函数,那么它同样也有参数和返回值,本身也可以被作为参数在方法和函数间传递。具体的内容,后续的博客中会重点分析,这里就先不展开了! 2. 你知道几种 bl

俊而不逊的博客 1298

block与top的时序差异分析,建议收藏

我们经常会遇到这样的情况,block把timing修干净之后,交给做顶层的同事,结果会发现,仍然会有很多新的违例。这个现象比较常见,但是其中的原因其实比较复杂。为了把这个问题解释清楚,我...

graymount的博客 2660
上一篇: VQA-ReGat 项目运行遇到的错误
下一篇: 【结果分析】之murel项目结果分析
snow5618
博客等级 码龄9年 141粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值