- 博客(19)
- 收藏
- 关注
原创 基于Yolov5s和TT100K数据集的交通标志检测算法
TT100K 数据集是由清华大学与腾讯实验室联合发布的基于真实场景的交通标志公开数据集,其中共有 9176 张包含交通标志的图像,6105 张用于训练,3071 张用于测试。经过统计分析,整个数据集一共出现了 151 种不同的类别,各类别实例数存在严重的不均衡现象,实例数为个位数的类别高达73 个,实例数在 50 个以下的类别数更是占到总类别数的 2/3。因此,筛选出实例数大于 50 的 45 个类别作为基础数据。使用指令:pip install -r requirements.txt。
2023-10-06 20:14:21
698
2
原创 TT100K数据集增强方法:替换法、黏贴法以及常规扩充方法
TT100K数据集,是由清华与腾讯的联合实验室整理并公布的,提供的 10 万张图像包含了 30000 个交通标志,图像来源于由 6 个像素很高的广角单反相机在中国的多个城市拍摄的腾讯街景全景图,拍摄地点的光照条件、天气条件有所不同。原始的街景全景图分辨率为 8192x2048,再将全景图裁剪分为四份,最终数据集的尺寸为 2048x2048。TT-100K 数据集所含交通标志的类别较为全面,整个数据集共出现 221 种不同的类别,标注了的有128类。
2023-09-25 22:20:08
1167
3
原创 AMBA协议之AXI协议
(3) 再考虑到复杂系统的总线设计,master依次接收到RDATA2_0,RDATA1_0,RDATA1_1,RDATA1_2,RDATA2_1,RDATA2_2,RDATA1_3,RDATA2_3这样的数据是有可能的,(2) 对于由宽度大于一个字节的数据传输组成的任何突发,必须访问的第一个字节可能与自然数据宽度边界不对齐。定义:Master也许需要对不同的地址和Slave进行访问,这样,由于Slave的响应时间不同,其返回给Master的数据也有先后,可能并不是按照Master发出的控制先后返回的,
2023-09-25 09:46:20
335
1
原创 IC面试知识点之SystemVerilog部分
program对数据的采样会发生在。(6) SV中仿真的timeslot,在SV中,数据的采样、驱动以及信号变化等都是在时钟沿上完成的,但是在软件的仿真环境中无法做到真正的并行执行,因此在一个时间片中划分不同的阶段。(3) 为什么会有多个时钟块:因为对于不同的组件,他的总线的输入和输出方向有可能是不一致的,因此针对这些不同的组件,应该添加不同的时钟块加以区分,这里的时钟块起到了。因此,想要采样到稳定的设计的值,应该在时钟沿的上一个时钟片中的postpone区域采样(使用1step延时),然后在时钟沿后。
2023-09-24 22:27:55
641
1
原创 SV理论知识六:代码覆盖率、功能覆盖率以及断言覆盖率
单独列出每个covergroup实例的覆盖率,/*-----------------------------断言和断言覆盖率-------------------------------------------------(1) 采样monitor监听到的事务,由于monitor监听的事务是动态变化的,也就是说虽然采样的是某种事务类型的某个变量,但是具体所属的实例是会变化的。2. 覆盖组的覆盖点可以会自动建仓或者自定义仓,对于自动建仓,会根据采样点的取值范围来生成仓,例如一个N比特的就有2的N次方个仓,
2023-09-24 22:24:36
2118
1
原创 SV理论知识五:随机和约束
(2) 动态数组 : 可以使用 size()约束数组的大小,使用 sum()约束数组的和,使用 product()约束数组的积。与在类中定义约束,并且通过对象调用随机化函数 randomize() 相对的是,一些细碎的场景并不需要像类那么全面支持随机约束的方式,而是需要一种更简单的机制来随机化一些在类之外的变量。(2) 可以直接把数组当成一个集合,然后使用inside进行约束,注意,如果数组中某个元素出现多次,那么出现的概率是相同的,也就是说不管元素重复出现多少次,求解的概率都是一样的;
2023-09-24 22:22:36
1654
1
原创 SV理论知识四:线程以及线程间通信
注意,使用fork语句块可以在父线程开辟多条子线程,子线程间是并行运行的,父线程可以暂停或者取消子线程,而子线程终止时,父线程中的其他子线程不受影响,当父线程终止时,现在有定义好的三个子线程do1,do2,do3,在task中并行运行这三个子线程,其中只要有任何一个线程结束,都退出并行运行块,并打印DONE。生产端将数据put进信箱1,阻塞在get 信箱2中,消费端从信箱1get到事务后,向信箱2 put一个rsp信号,相当于一个握手协议;消费端消费等待事件1,消费完一个数据后触发事件2;
2023-07-28 11:51:33
377
1
原创 SV理论知识三:类与对象
如果该对象内又包含了另一个类的句柄,(2) 深拷贝:自定义一个copy()函数,先使用new()创建一个实例,然后复制实例的所有变量,如果有其他类的句柄那么调用该类的copy()函数,层次调用就能开辟一个新的对象。那么仅仅是拷贝了该句柄而已,没有创建一个新的对象,因此拷贝出来的对象和原来的对象是共享一个下层对象的,对该句柄指向的对象进行修改会影响拷贝后的对象。回调更多的是拓展某个方法,如果使用继承的话,需要先复制原来的方法的代码,再添加新的代码,这样如果父类的方法改了,子类拓展的方法也得修改。
2023-07-28 11:49:45
594
1
原创 SV理论知识二:过程语句和子程序
(5) 函数只能返回一个值,函数不能有输出(output)或者双向(inout)变量,任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值。2)如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,而在离开该进程/方法后,automatic变量会被销毁。1)动态变量的生命周期同其所在域共存亡,如function/task中的临时变量,在其方法调用结束后,临时变量的生命也将终结,所以它们是动态生命周期。
2023-07-28 11:48:13
195
1
原创 SV理论知识一:数据类型
4)使用exists(index)来判断数组是否存在某个元素(不存在则返回缺省值),使用first(index)来获取数组的第一个元素索引,使用next(index)来获取下一个索引值。非合并数组:仿真器来存储数组元素时通常是使用32位宽,也就是一个字来存放数据,如果数组的元素位宽小于32,那么高位的将不被使用,只是用低位,这样会造成浪费;合并数组:可以将数组定义为合并数组,那么数组的元素在存储空间中就是连续存放的,任何数组类型都可以定义成合并数组,定义合并数组必须给出该合并数组的位宽和大小。
2023-07-28 11:45:44
967
1
原创 IC面试知识点之Verilog设计部分
else if((empty==1'b0&read==1'b1) && (full==1'b0&write==1'b1)) //同时读写,计数器不变。if(full==1'b0&write==1'b1) //这段代码的意思是非满写使能,将输入数据写到写指针对应的ram中。在多级DFF中,每个DFF都需要一定的时钟到输出延迟时间。else if(empty==1'b0&read==1'b1) //这段代码的意思是非空读使能,将读指针对应的数据取出,送往输出。
2023-07-21 11:29:14
317
1
原创 UVM知识之基本组件
如果要验一个模块,通常对定义一个master agent和一个slaver agent,master掌握主动权,发出命令,而slave就是去响应master的指令。不同的模块验证均需要搭建一个env来进行验证,这个env会包括master agent,slave agent以及scb等组件,构成一个小型的验证环境。各自的优点:方法二可以复用scb,每个子模块单独验自己的功能即可,但需要控制例化各个组件,方法一需要重新定义scb,费时费力。就需要回应状态寄存器的信息,如果是写指令,则需要将信息存放起来。
2023-07-19 17:24:07
387
原创 UVM知识之phase机制
注意,这里domain只能把run_time的phase给隔离开来,对于其它的phase,其实还是同步的,即两个domain的run_phase依然是同步的,其它的function phase也是同步的。(2) 结束仿真,主要是根据run_phase()来决定是否结束仿真的,通常的做法是在顶层的run_phase()中,调用phase.raise_objection()来挂起。(1) 开始仿真,在顶层的uvm_root中,调用run_test(),例化顶层的uvm_test。
2023-07-19 17:22:54
486
原创 UVM知识之寄存器模型
一个uvm_reg_map:uvm_reg_map通过使用add_reg对uvm_reg_block中定义的reg与实际硬件中的寄存器模型的地址做映射。例如在配置寄存器时,在顶层的寄存器模型中调用uvm_reg的build函数,而uvm_reg的build函数会进一步调用uvm_reg_field的configure函数,从而实现配置。在没有寄存器模型时,寄存器的访问是靠sequence来挂载到reg的sequencer上的,然后在sequence的body里面发送item数据,但是有了寄存器模型之后,
2023-07-19 17:20:56
692
原创 UVM知识之TLM通信
因为在自己的类里面没有mailbox句柄会报错),且如果你按照绝对的规范,每一层都有port、export做过渡,那么你总是维护当前层次下的连接就行了,再底层的连接是由那个模块的人负责,复用性变好了。实际上,将(1)包装起来就是一个uvm_tlm_fifo,内置的端口都是imp类型的,如果要实现一端对多端,则使用uvm_tlm_analysis_fifo。如果是TLM,一方面,即使后面组件层次有修改,对于维护当前组件的人来说,并不需要在组件内部做修改,只需在顶层的connect_phase修改端口的连接,
2023-07-19 17:19:04
356
原创 UVM知识之UVM序列
(3) 若要返回rsp,可以通过item_done(rsp)传递,回传的rsp会压入sequencer的tlm fifo中,每个rsp需打上标号,否则无法得知是从哪个sequencer来的。sequencer端: uvm_seq_item_pull_imp #(REQ, RSP, this_type) seq_item_imp。(1) 采用各自例化好的TLM端口以及成对的方法get_next_item()/item_done()
2023-07-19 17:14:47
379
原创 深度学习之数据集转换脚本(voc的xml格式转yolo的txt格式篇)
在做目标检测时,有些代码库采用的是yolo的txt格式,有些则采用的是voc的xml格式,下面提供了一个脚本,可以自动将voc格式的数据集转化为yolo格式的数据集。
2022-09-23 21:13:34
3244
5
原创 深度学习之数据增强脚本(支持Cutout,旋转,平移等操作并自动生成新的xml文件)
在学习目标检测时,有时会发现数据量不够,这时候便需要对数据进行扩充,这里给出一个数据增强脚本,可用于使用目标检测算法时数据量太少的情况。该脚本支持对输入的图片进行Cutout,旋转、翻转、平移、加噪声、调整亮度、剪裁、镜像等操作,输入图片文件夹的路径、以及对应xml文件的路径,运行代码即可进行数据增强,新生成的图片以及xml文件会保存在原图片以及xml路径下,对图片进行随机的操作后,会对xml文件的内容进行相应的修改,不需要自己手动重新标注。
2022-04-12 20:24:46
2335
2
原创 Python中argparse.ArgumentParser()用法解析
一、定义argparse是python用于解析命令行参数和选项的标准模块,用于解析命令行参数,目的是在终端窗口(ubuntu是终端窗口,windows是命令行窗口)输入训练的参数和选项。二、使用步骤1:parser = argparse.ArgumentParser()2:parser.add_argument()3:parser.parse_args()上面三个步骤解释如下:1. 创建一个解析对象;2. 向该对象中添加你要关注的命令行参数和选项,每一个add...
2021-11-19 15:13:53
6929
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人