- 博客(34)
- 收藏
- 关注
原创 一文教授你如何快速提取模型某层特征且可视化显示
引 言 当可视化模型某层处理后的特征效果或模型出现BUG时调试模型的运行结果时候,常用的策略是在函数中在某层后调用或者函数打印特征输出的尺寸或效果,并在部分返回下游任务模块需要使用的特征。此类方法需要掌握模型内部的结构特点提取某个中间层的特征。本博客介绍两种方法从模型外部提取模型的某层特征。hook是pytorch中一个常用的机制,其本质就是一个可调用对象(Callable).hook的书写格式与普通的函数或类的书写没什么区别,主要作用是将写好的函数或类注册到模型的某层layer(nn.Module)上。这
2025-02-14 15:04:08
673
原创 图像篡改检测数据集修正(Image Tampering Detection Dataset)
CASIAv1 、CASIAv2、COVERAGE、NIST16 作为图像篡改检测的公开数据集,用于训练和测试模型。然而,公开数据集中存在不同情况的问题,本仓库主要解决这些问题,原始数据集CASIAv1 和 CASIAv2来自,CASIAv1的mask来自[github],CASIAv2的mask来自[github]。COVERAGE数据集来自[github]。本人在[github]中提供了处理后的数据集百度网盘下载链接,方便用户直接下载使用。
2025-01-07 23:34:37
1167
原创 从ground_truth mask中获取图像的轮廓图
在图像取证领域,主要分为检测和定位两个方面。检测就是判断一张图片是否为伪造图,定位与传统意义上的语义分割任务相近,就是定位伪造像素的区域。如果单纯使用语义分割网络训练,只能获得次优解,而像多任务学习那样结合边缘检测的网络分支则可以实现较好的检测和定位效果。边缘检测就需要获取从ground_truth mask中获取图像的轮廓信息。在本文中主要讲解如何用open-cv 的built-in内置形态学函数获取轮廓图以及一篇文章编写的代码获取轮廓图。
2024-12-06 16:16:17
1002
原创 JPEG图像的DCT(Discrete Cosine Transform)变换公式代码详解
本文只是描述了将YCbCr图像变成DCT系数矩阵的过程,对于传统RGB图变成YCbCr图像过程的代码没有介绍。请浏览者自己查阅资料。
2024-09-27 00:23:42
838
1
原创 手把手教你安装pytorch包
Pytorch作为一个开源框架对于深耕于深度学习的小伙伴来说是一个必备工具。本文主要讲解pytorch包的安装流程。
2024-09-12 13:41:48
2004
原创 kaggle竞赛平台上数据集下载详解
从kaggle 网站上下载数据集既保证了速度又避免了网络的不稳定造成下载失败问题。该平台也可以上传代码作为自己的代码库,不过本人更习惯将代码上传到github上。希望本人整理的kaggle库使用技巧能够帮助到正在阅读本博客的你。此外还有一篇博客针对kaggle数据集下载问题的几个问题的相关文章进行了整理【博客链接】。
2024-09-09 00:44:48
13964
10
原创 Image-to-Image Translation 图像翻译任务中的输入成对图像拼接成一张图技术详解
在视觉项目中,图像数据集的预处理是一个非常重要的关键环节,在CycleGAN的项目代码中除本文 描述的一个小细节外,还有很多图像数据预处理代码值得大家学习和引用。在引言部分给出了项目代码的 hub库。想要阅读项目代码的同学可以自行下载学习。
2024-08-20 23:10:20
605
原创 图像加载【Image.open(),cv2.imread()】和转换格式【Image.convert(format_str),cv2.cvtColor()】详解
视觉任务处理的图片常用类型有RGB图、grayscale灰度图、binary二值图、PNG图等图像形式。图像打开和格式转换需要使用PIL库。本文主要讲解PIL库图像格式转换以及如何提取RGB每个通道的图片。
2024-08-06 17:23:33
885
原创 详解深度模型的评价指标top-1和top-5的原理和实现代码
input:输入数据张量k:要获取几个数值dim:确定在哪个维度上获取数据largest:控制获取最大值还是最小值,largest=True返回最大值。sorted:控制返回值是否按顺序输出。topk的返回值分为两部分,前部分是数值,后部分是数值对应的索引号。
2024-07-10 23:55:48
2044
原创 详解Python中【*args】和【**kwargs】的使用
在函数定义阶段分为:位置参数,默认值参数和可变长参数(*args和**kwargs后面详细介绍)。在函数调用阶段分为:关键字参数和解包参数列表。*args在函数传参时可接收任意数量的位置参数。在函数定义时作为占位符,代表没有被显示定义的可变数量的位置参数。在函数调用时,args会接收这些参数并存入元组中。**kwargs在函数传参时可接收任意数量的关键字参数。在函数调用时,kwargs会接收任意数量的在函数定义中没有对应名称的关键字参数并存入字典中。
2024-07-07 21:40:36
856
原创 Pytorch中的split()和chunk()函数功能和使用区别
torch.split()函数和torch.chunk()都是用来对数据按照某个维度进行切分,语法形式类似但是参数实际表达含义略有不同。本文通过具体使用案例生动说明两个函数的区别。
2024-06-24 22:17:27
1033
原创 深度学习项目配置参数(三)yaml和json配置文件的使用
将python对象(列表或字典)序列化成YAML流并存储到文件中。data:需要存储到文件的python对象stream:打开数据需要写入的文件。若为空,则直接返回生成的字符串示例:(1)将字典对象变成yaml格式数据####显示####lr_1: 0.3(2)将列表对象变成yaml格式数据####显示####- cifar10- cifar100- imagenet(3)python对象写进文件,若多个字典对象可以嵌入一个列表文件内容。
2024-06-21 14:42:07
1731
原创 深度学习项目配置参数(二) yacs库的使用教程
yacs库作为一个管理系统配置的轻量级库,解析yaml配置文件使整个项目结构更清晰。yacs库与argparse库类似,argparse库需要在运行程序文件中定义配置参数,而yacs将配置参数可以放置在其他文件中。
2024-06-20 17:20:21
1004
原创 深度学习项目配置参数(一) argparse.ArgumentParser的使用教程
创建对象后,调用函数定义模型需要使用的单个参数名称以及如何解析。定义位置参数语法定义可选参数语法parser.add_argument(‘-flag’,‘–flag’),例如-m或者–model。
2024-06-19 17:44:54
1687
5
原创 Python推导式生成列表、集合、元组、字典
引言Python推导式以简便快捷而著称,可以用短短一行代码实现for循环语句几行代码的工作。众所周知的是推导式的简洁性,其实推导式还具有较强的逻辑性,可以增强代码的可读性。推导式不光有大家熟悉的列表推导式,还有集合、元组、字典的推导式。本文通过列举典型代码示例让读者领略推导式的应用魅力。
2024-05-26 22:19:03
489
原创 Python列表常用方法五:元素如何去掉重复项
列表作为一个容器可以存储不同类型的数据元素,而且可以存储重复元素。在项目应用中,提取列表中唯一元素提出重复项是一个常规操作,实现方法多种多样。列举几种常用方法方便遗忘时回忆。使用集合set数据结构可以去重复,但会造成数据无序性,改变原始列表的有序性。如果像保持列表去重复后数据的有效顺序可以使用列表推导式与if语句的组合。三、numpy.unque()去重复。一、set()去重复。二、列表推导式去重复。
2024-05-26 15:50:45
4913
原创 Python列表常用方法四:count()、index()函数
引言列表作为python常用的数据结构,内置方法的灵活使用显著提高了项目代码的编写效率。本文主要介绍count函数和index函数的使用。
2024-05-25 22:27:54
4167
原创 json.dumps()和json.dump(),json.loads()和json.load()的区别
1.字符串操作:json.dumps()是将python对象变成json格式字符串,而json.loads()功能与其相反是从字符串中获得json数据并变成python字典对象。2.文件操作:json.dump()是将python对象直接写入json文件中,而json.load()是从文件中读取出json数据转换成python字典对象。
2024-05-25 00:02:06
677
原创 Python列表常用方法三:sort()和sorted(),reverse()和reversed()的区别
sort()函数是列表对象的方法, key为可选参数,传入一个函数指定列表元素按照什么标准进行比较,默认值为None,表示按照元素本身排序。两者都是对列表排序主要区别是sort函数直接对列表进行修改,而sorted()函数则是返回一个排序后的新列表,需要额外的内存空间,但是不会破坏原始列表内容。reversed函数是python的一个内置函数,将列表反转后返回一个新列表迭代器,若要显示结果需要用list(iterator)函数转换为列表。(3) reverse()和reversed()的区别。
2024-05-24 23:01:32
1417
1
原创 Attention-mask 在transformer模型框架中的作用
注意力机制的解释性博客比较多质量良莠不齐,推荐大家观看李宏毅老师关于注意力机制的讲解视频以及本人觉得对注意力机制讲解比较透彻的一篇博客[为更好解读注意力机制中attention-mask 的作用,现将注意力机制的原理进行总结。假设两个输入经过Wq、Wk、Wv矩阵(可训练)线性变换后获得q1=(1,2),q2=(0,1),k1=(1,0),k2=(0,1),v1=(1,0),v2=(0,1)向量。注意力机制核心就是向量q与向量k点乘后获得相似性分数(一个标量)。同理 q2也与所有的k向量点乘获得。
2023-11-19 13:18:54
6746
1
原创 GitHub操作宝典让你快速上手实践
选择要存放仓库的本地文件夹,在文件夹中打开git bash后,输入命令git clone git@github.com:yan-hero/git_demo.git,该文件夹下创建与仓库同名文件夹。//例如: git remote add origin git@github.com:yan-hero/git_demo.git。(1)在git bash中输入ssh-keygen -t rsa -C "你的邮箱",连续回车创建新的keys。进入git_demo文件夹,将要上传的项目代码拷贝进文件夹。
2023-08-22 21:43:28
524
1
原创 EndNote快速上手教程
其次,在新库里加载参考文献,文献加载操作按照 File ->Import->file,打开加载界面,choose选择从网站导出的enw文件,Import Optioin选择 EndNote Import(注:如果是PDF,则选择PDF导入)。方法一:首先在EndNote软件中选中该文献,在word中,鼠标点击插入位置后,按照下图指示箭头操作就可以加载参考文献了。Citations指的是在正文中出现参考文献引用时的格式,Bibliography指的是位于文章最后面的参考文献列表的格式。
2023-08-21 17:38:23
5394
1
原创 HuggingFace的Transformers库Tokenizer和Model使用技巧
Bert模型作为一个强大的双向Transformer模型,已经在NLP领域广泛使用并作为word embeddding 预训练模型深受青睐。Hugging Face的transformers框架包含BERT、GPT、GPT2、ToBERTa、T5等众多模型,同时支持pytorch和tensorflow 2两个框架,本博客主要介绍如何从Hugging Face加载预训练模型及高效使用。
2023-08-09 14:31:40
14498
1
原创 预训练模型微调(Fine-tuning pre_trained model)
在设计新模型的时候,尤其是CV领域设计语义分割、目标检测模型通常将已有的图像分类模型作为backbone,可以对原始模型结构实施增删改模块操作。由于目标任务的数据规模有限,为防止出现模型训练过拟合现象的发生,对于backbone部分权重参数采用在大规模数据集ImageNet上预训练好的模型权重参数。模型参数加载后冻结部分网络层开展finetune操作。本博文主要讲述常用的模型设计和加载预训练模型权重参数的方法及如何冻结部分权重参数对新模型进行微调操作。
2023-06-06 01:30:08
2487
1
原创 model.train()、model.eval()和torch.no_grad()以及detach()区别
一、model.train()、model.eval()区别model.train()和model.eval()函数主要用于将模型中的training属性设置为True或False两种状态,training属性会直接影响BatchNorm层)和Dropout层的运行机理。
2023-06-05 23:35:32
891
1
原创 nn.Sequential、nn.ModuleList、nn.ModuleDict区别及使用技巧
nn.ModuleList里面储存了不同 module,并自动将每个 module 的 parameters 添加到网络容器内容(注册),里面的module是按照List的形式顺序存储的,但是在forward中调用的时候可以随意组合。可以任意将 nn.Module 的子类 (比如 nn.Conv2d, nn.Linear 之类的) 加到这个 list 里面,方法和 Python 自带的 list 一样,也就是说它可以使用 extend,append 等操作。
2023-06-02 01:08:21
2232
原创 read()、readline()、readlines()区分
在python读取文件的时候,经常使用read函数读取文件内容。read()、readlines()函数使用起来看起来相似,但是还有很多细微差别。结合阅读代码时候的一些经验总结,对以上函数的不同进行总结。
2023-05-28 22:54:59
2195
1
原创 conda和pip 安装python依赖包区别和使用技巧
引言Conda 作为一种跨平台的包和虚拟环境管理器,使用的时候功能与pip类似。安装python依赖包的时候经常将两种方法混合使用,但一直没有进行具体区分其差别。重新安装python依赖包的时候出现各种不兼容的bug。经历一天烦躁的安装、卸载和查阅资料的痛苦过程,将自己的学习收获梳理一下,以便自己未来回顾查看,同时公开分享帮助遇到同样难题的朋友们。Anaconda下载链接:Anaconda可以通过官网下载,但是速度较慢。大家一般是从国内镜像网站进行下载安装。下载。
2023-05-17 12:11:51
7282
1
原创 zip()和zip(*)函数的使用详解
Zip()函数既可以压缩序列(列表、元组、字典、集合、range())到一个zip文件,也可以用于拆分序列。具体使用案例会结合部分代码进行描述。两个序列长度不同时,zip函数会按照最短序列长度截取对齐。新生成的元素构成元组对。二、zip()函数用于提取两个序列的数据。一、zip()函数将两个序列压缩。
2023-05-14 15:08:11
1576
1
原创 Python列表常用方法一:append()、extend()和insert()的详解
Python中的列表添加元素操作经常出现在代码中,添加元素的常用方法有三种:append、extend和'+='操作。本博文主要梳理三种方法如何使用。查阅网络一些资料,现将自己的理解梳理一下,仅供参考,如果有描述不清晰或错误之处,请批评指正。
2023-05-14 00:49:27
40719
3
原创 详解torch.dot()、torch.outer()、torch.mul()、torch.mm()和torch.matmul()等函数使用技巧
torch.matmul()函数可以用于1维向量×1维向量,1维向量×2维矩阵,2维矩阵×1维向量,矩阵相乘等不同情况。现将相关案例进行介绍方便日后回顾。
2023-03-24 20:02:39
5342
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人