- 博客(34)
- 收藏
- 关注
原创 损失函数理解(二)——交叉熵损失
通过上面的分析,我们给出了信息量的定义。显然不是,因为如果是加和的话,实力悬殊队伍的比赛结果相对来说是确定的,大概率是实力强的队伍赢得比赛,所以它的不确定性是低的,但此时它的熵却是高的,所以熵并不是信息量的简单加和。至此,我们通过信息量和熵引出交叉熵,并介绍了交叉熵是如何用于损失计算的,希望能够对有需要的伙伴提供帮助,如果文中有歧义或者有错误的地方,欢迎大家在评论区指出!表示每个事件发生的概率,即当前图像是猫的概率和不是猫的概率,在模型训练场景中,我们以人脑中的概率模型为基准,即以标签为基准,所以。
2025-03-22 22:01:38
974
原创 损失函数理解(一)——极大似然估计
对于训练模型来说,模型结构已经预先定义好,我们具体训练的是模型的参数。在ResNet-50这个架构下,对应的模型参数有很多种可能,现在我们有手写数字图像以及对应的真实分类标签(这是我们人类的判断结果),训练的目标就是找到能使得手写数字分类结果正确的那一套模型参数(原因)。确实,形式上看这就是交叉熵损失,但我们是通过最大化似然一步一步推导出来了,可以理解为两者是等价的。参数下模型能正确判断是不是猫的可能性,我们要找到使这个可能性最大的模型参数。看到这里,有的小伙伴可能就发现了:这不就是交叉熵损失么!
2025-03-22 16:49:46
338
原创 使用基于切片的隐式扩散模型生成3D MRI数据:在数据稀缺情况下提高肿瘤分割任务性能
生成模型在医学图像领域的应用目前主要有跨模态图像翻译(例如根据CT生成MRI)和数据扩增(生成额外的数据以提升任务性能)两种。该论文属于后者,其目的是为了提高数据量不足条件下肿瘤分割任务的性能,使用的技术路线是隐式扩散模型(Latent Diffusion Model, LDM),有趣的是模型不是直接生成3D数据,而是一张切片一张切片进行生成,最后形成3D数据。比较好奇该方法是如何保证切片间解剖结构连续性的,让我康康!
2025-02-17 16:11:08
764
原创 Understanding differences in applying DETR to natural and medical images——理解DETR在自然图像和医学图像应用的不同
最近在做一些医学图像目标检测的工作,但DETR-based模型在这个任务上的表现不如传统检测方法FCOS,具体原因我还不是很清楚,恰好看到一篇非常相关的文章,让我看看怎么个事~基于transformer的检测器在自然图像的计算机视觉任务取得了巨大的成功。那这么牛的模型,它能否迁移至其他细分领域——医学图像并展现出相同优越的性能呢?相比自然图像的目标检测任务,医学图像有图像尺寸更大、感兴趣区域(Regions of interest)更少更小、目标特征细微等特点。
2025-01-17 16:06:22
690
原创 DINO对比去噪训练代码分析
上述内容就是对DINO中如何构建对比去噪分支中的正负样本相关代码的解析,由于本人文笔有限,可能在具体变量含义的表述上不够清晰,大家结合博客内容自行调试代码,了解代码的含义和作用,加深自己的理解。文中如有错误或歧义之处欢迎在评论区指出,大家也可以在评论区分享自己的理解。另外像说一下阅读DINO源码的一些个人感悟。通常我们会先阅读论文,了解模型或者某个算法的大致思路,然后再结合代码查看具体的实现过程。
2024-12-23 17:02:24
823
原创 pycharm如何快速查看当前代码属于哪个类
而当我们找到调用该变量的代码,我们应该如何快速地知道当前代码属于哪个class的哪个method呢?以上便是快速查看当前代码逻辑所属关系的方法,该方法可以在学习源码过程中帮我们理清思路,不用浪费时间反复梳理代码的逻辑关系。希望对大家有所帮助~此时我光标位置在deformable_encoder变量上,然后红框处便显示了光标位于哪个class的哪个method中,简单清晰。其实pycharm已经实现了这个功能,当我们将光标放置在代码位置时,pycharm会显示当前代码的逻辑所属关系。
2024-12-23 15:30:39
234
原创 Pytorch分布式训练print()使用技巧
(虽然大部分情况下大多会用logging进行信息输出)在终端打印相关信息。但由于同时运行多个进程,如果不进行限制,每个进程都会打印信息,不但影响观感,而且可能会造成阻塞。实测好用,且思路清奇,果然学习永无止境。在此做一个学习记录,也分享给需要的人。但最近在学习目标检测模型DINO源码时,我发现作者采用。在分布式训练场景中,有时我们可能会需要使用。的方式实现了相同的功能,重写内置print函数。通常的解决方法是利用。
2024-12-11 17:47:52
565
原创 Pytorch训练固定随机种子(单卡场景和分布式训练场景)
模型的训练是一个随机过程,固定随机种子可以帮助我们复现实验结果。接下来介绍一个模型训练过程中固定随机种子的代码,并对每条语句的作用都会进行解释。这是一个自定义函数,函数的参数就是我们传入的种子的数值,类型为int,作用就是消除训练过程中的随机性,以确保实验得可重复性,具体使用方法为在初始化模型和dataset前调用该函数即可。接下来逐句讲解每个语句的作用。
2024-12-09 16:34:09
1450
原创 Python中__repr__()和__str__()的异同
在学习类相关知识时,注意到了__str__()和__repr__()这两种方法,但对两者的异同不是很了解,因此写这篇博客记录一下学习过程,也供其他小伙伴参考。文中如有错误或者表述不当之处欢迎在评论区指出。首先,__repr__()和__str__()都属于特殊方法(也称魔术方法,magic method),且作用都是根据对象的状态返回字符串。那两者的具体应用场景以及区别是什么呢?接下来一一进行介绍。
2024-11-17 22:26:52
1208
原创 Co-DETR:协作式混合分配训练的DETR
文章对于每张图像中的一个GT框,可视化了原始正样本query和定制化正样本query的位置分布,其中红色表示由匈牙利匹配算法得到的正样本,蓝色表示由Faster R-CNN辅助检测头确定的正样本,橙色表示由ATSS辅助检测头确定的正样本。可以看到定制化的正样本query分布在物体的中心区域,可以为检测器提供足够的监督信号。正如文章所说,我个人也一直感觉相比于传统检测器的正负样本分配策略,原始DETR的正负样本分配策略产生的正样本数量太少。DN-DETR通过对GT添加噪声构造额外的正样本,提升了检测性能。
2024-11-08 16:41:02
1316
原创 DETR:使用Transformer进行端到端的目标检测
V 是顶点(结点)的有穷集合。E是连接V中两个不同顶点(顶点对)的边的有限集合。如果E中的顶点对是有序的,即E中的每条边都是有方向的,则称G为有向图。如果顶点对是无序对,则称G是无向图。实验部分应该很好理解,这里就不再分析,最后做个总结。DETR提出了一种简洁的端到端的目标检测框架,通过匈牙利算法在训练过程中实现了预测框与GT的一对一匹配,同时decoder中的自注意力机制可起到类似于NMS的作用,因此实现了集合预测的效果。
2024-10-30 14:26:07
1253
2
原创 ND-DETR:通过引入Query去噪加速DETR训练
DETR算法训练速度慢是很多工作的motivation,本文同样也是为了解决这个问题。但不同于之前工作聚焦于query设计及其具体含义的理解,本文从另一个角度——二分图匹配在训练前期的不稳定性,分析了DETR收敛速度慢的原因,并提出一种去噪训练方法加速DETR收敛。摘要部分简单说明了去噪训练方法的思路:将带有噪声的GT标注框喂入decoder,训练模型预测原始的GT标注框,这有效降低了二分图匹配的难度,从而加速收敛。给GT添加的噪声是什么?
2024-10-28 17:34:22
1017
原创 Anchor DETR:Transformer-Based目标检测的Query设计
根据anchor point得到object query,使其具有明确物理意义,每个object query关注特定区域;针对第一点可能面临的“一个区域多个目标”的挑战,进一步将多个pattern整合到了一个object query,可实现一个位置多个目标的检测;提出行列解耦注意力机制,在降低显存使用的同时,性能可媲美甚至超过标准注意力机制。上述改进使得模型收敛速度提高了10倍,性能也有较为显著提升。
2024-10-24 09:24:26
785
2
原创 DAB-DETR:对DETR而言,动态anchor box要优于query
详细分析并证明了cross-attention中query的位置部分造成了DETR收敛速度慢,进而说明了位置先验对模型收敛速度具有重要影响;考虑了视觉任务中,位置编码温度系数需要调整,并可视化了其对于位置注意力的影响;其他的比如将query建模成坐标形式、query层层迭代优化以及引入高宽信息等,先前的工作都有所涉及,不能算特别有创新。
2024-10-22 15:17:43
1407
原创 Deformable DETR:结合多尺度特征、可变形卷积机制的DETR
针对上述两个问题,文章提出Deformable-DETR,将可变形卷积(deformable convolution,不了解原理的同学可自行查阅)处理稀疏空间位置的机制和transformer的全局建模能力结合起来,缓解了收敛速度慢的问题(),同时提出的机制可扩展到多尺度特征,从而进一步提高了小目标的检测性能,一举两得。
2024-10-20 20:54:47
1868
1
原创 VesselTransGAN:无对比剂CTA成像方案
这同样是一个使用GAN生成CTA图像的工作。与之前分享的一篇工作不同的是,该工作聚焦于颅底小血管,理论上来说更加困难。论文发表在IEEE Access。代码地址:https://github.com/Flora-huay/VesselTranGAN。
2024-10-17 16:47:59
1219
原创 CTA-GAN:基于生成对抗网络对颈动脉和主动脉的非增强CT影像进行血管增强
目前只分析了文章的大体内容和我个人认为的比较重要的细节,代码实现还没仔细看,后续有时间会补充代码细节部分。PS:代码仓库并未提供详细的环境依赖项说明,但文章在补充材料中说明了环境的主要配置:python3.8 + pytorch1.7.1 + cu110,想要复现的小伙伴可以参考一下。
2024-10-16 10:19:25
1512
原创 目标检测DINO算法——添加无标注(纯阴性)图像训练
对于假阳性较多的情况,理论上,添加一些没有目标的“纯阴性”样本进行训练可缓解该问题。但通过查阅issue并未发现相关的添加方法。为此我自己尝试添加无标注样本进行训练,训练过程可正常执行,但该添加无标注样本方法的有效性待进一步验证。如果有问题后续会订正。
2024-09-20 15:27:12
337
4
原创 目标检测DINO算法——环境配置&Bash脚本解析
requirement.txt文件中包含以下两个命令,分别用于安装cocoapi和panopticapi,但由于网络原因,可能会导致安装过程出错,因此将这两行注释掉,在运行pip install命令。运行test.py结果为True,则表明环境安装成功,可以基于你自己的数据集调试算法了。这里按照官方提供的版本进行按照,也可自己根据硬件兼容性进行安装;将cocoapi和panopticapi项目下载到本地,通过。3.安装其他依赖库,安装前首先到cd到项目路径下;1. 创建虚拟环境;4.编译cuda算子。
2024-09-14 11:16:40
466
原创 Python路径问题解析
获取当前路径命令当前路径是输入运行命令所在的路径,而非py文件所在路径。上述示例而言,当前路径和py文件所在路径不一致,需要注意。下面的例子两者一致。
2024-09-02 10:38:46
642
原创 argparse使用教程+代码说明
深度学习项目会涉及较多的参数设置,argparse库是命令行选项、参数和子命令的解析器,因此也常用于指定训练脚本的模型参数或者数据路径。下面是一个简易的示例教程,以快速熟悉基本概念和常用方法。helptypedefaultchoices短选项action关键字;action:"store_true":对应参数被指定时,变量被赋值为True,不指定时为False;"store_false":对应参数被指定时,变量被赋值为False,不指定时为True;"count":记录一个参数出现的次数;
2024-08-28 18:06:51
253
原创 git reset命令常用功能
把缓存区的修改撤销(unstage),重新放回工作区。,将当前仓库回退到上个版本,可使用。命令查看历史命令,获取对应版本的。
2024-07-24 00:11:25
263
原创 MMdetection安装教程
到此为止,mmdet3.3所需要的mmcv、cuda和torch版本都确定好了,接下来就是根据mmdet官网提供的安装教程进行安装即可。官方教程的安装顺序跟我们确定版本的顺序是相反的,即官方首先建议创建虚拟环境并安装pytorch和cuda,然后安装mmcv,最后安装mmdet,但是这种顺序往往会出现各个包版本兼容性问题,因此建议首先根据本文提供的思路确定各个包的版本,再根据官方教程进行安装。查找本地设备支持的torch和cuda的版本(如下图所示),其中v1.13.1是torch的版本。
2024-03-02 16:26:34
2355
6
原创 MMdetection中Backbone的实现-ResNet50
ResNet50的源码路径为mmdet/models/backbones/resnet.py。1文件整体结构1.1BasicBlock
2022-05-06 16:20:10
1792
2
原创 MMCV-Registry类代码详解(1)
目录1.功能简介2.初始化函数参数说明:构造函数优先级:2.1self.infer_scope()方法2.2_add_children()方法源码在工程中的路径为mmcv/utils/registry.py,可对照源码阅读本文。1.功能简介简单地说,Registry类实现了字符串到类的一种映射。目的是仅使用字符串(例如某个模型的名字)来方便快捷地创建一个类实例。源码注释中给了这么一个例子:"""Example: >>> MOD
2022-03-30 15:38:38
2376
原创 MMdetection中backbone的实现-MobileNetV2
以MobileNet_V2为例,看一下在mmdet中backbone是如何实现的,在此之前需要对MobileNet_V2的架构有所了解,可参考MobileNet教程。一、整体框架源码路径为mmdet/models/backbones/mobilenet_v2.py,代码内容及粗略注释如下:# Copyright (c) OpenMMLab. All rights reserved.import warningsimport torch.nn as nnfrom mmcv.cnn impo
2022-03-29 15:02:45
8085
4
原创 MMdetection3.3使用技巧
先来看用训练好的checkpoint文件跑test.py脚本的输出结果最下方会输出一个有序字典OrderedDict,我们可以指定相关的键来保存最好的模型。需要的操作就是在配置文件中进行如下修改:evaluation = dict(interval=1, metric='bbox', save_best='auto')save_best用于指定对应的键,'auto'是指保留第一个键对应最大值的checkpoint文件,即'bbox_mAP'(对应coco评价指标的第一行),也可以指定s
2022-03-25 11:19:02
8902
2
翻译 MMdetection-教程5:自定义运行设置
目录自定义优化设置自定义pytorch支持的优化器自定义自主实现的优化器1.定义一个新的优化器2.添加优化器到注册表3.在配置文件中指定优化器自定义优化器构造函数(optimizer constructor)其他设置自定义训练策略(training schedules)自定义工作流(workflow)自定义钩子(hooks)定义自主实现的钩子使用MMCV实现的钩子修改默认的runtime钩子自定义优化设置(optimization settin
2022-03-16 20:29:34
3292
翻译 MMCV-Registry
目录什么是注册表实例自定义构造函数多层级注册表MMCV通过操作注册表实现对例如backbone,head和necks等在检测器中拥有相似功能的模块的管理。OpenMMLab中的很多工程通过使用注册表来管理数据集和模型中的模块。什么是注册表在MMCV中,注册表可被当做类到字符串的一种映射。这些被包含在单个注册表中的类通常有类似的API,但是执行不同的算法或者支持不同的数据集。有了注册表,用户可以通过其对应的字符串来查询和实例化类,并且使用他们所想使用的实例化模块。典型的例子就是
2022-03-16 10:50:29
2101
原创 制作自己的COCO格式数据集,附代码!
最近做了一个细胞检测的练习项目。之前的思路是参考其他大神的代码,后来发现其他人的代码有很多自定义的内容,包括读取的数据格式等等,小白表示看不懂所以改变思路,用最简单的方法——选择mmdetection2.0中自带的Faster RNN网络进行训练。但是网络对数据格式有要求,有VOC、COCO等几种格式,我选择了COCO格式。一、COCO2017数据集格式COCO_ROOT #根目录 ├── annotations # 存放json格式的标注 │ ...
2021-09-25 20:12:26
25867
44
原创 目标检测中的常见指标
最近在做一个目标检测的练习项目——阿里天池的宫颈癌检测初赛任务,用了MMDetection中自带的Faster RNN网络,好不容易把网络跑通,但是测试网络的时候发现自己看不懂评价指标...在此将相关的评价指标及其含义记录一下,供自己和其他初学者参考。1.TP(True Positive):IoU>0.5的检测框数量(同一Ground Truth只计算一次)。2.FP(False Positive):IoU<=0.5的检测框数量(或者是检测到同一个GT的多余检测框的数量)...
2021-09-22 21:00:47
1255
原创 机器学习实战-第五章 Logistic回归笔记
def loadDataSet(): dataMat = []; labelMat = [] fr = open(r'data\MLiA_SourceCode\machinelearninginaction\Ch05\testSet.txt') for line in fr.readlines(): # 按照空格分割文本,返回列表 lineArr = line.strip().split() dataMat.append([1.0, .
2021-07-27 10:29:25
330
原创 百万富翁模拟器!!!(自己写的彩票模拟小程序)
import randomfrom lotteryH import isWholet1 = '开始游戏't2 = '结束游戏'print(t1.center(50,'*'))money = 100rou = 1print('您的初始余额为 %d 元。' % money)while 1: print('第 %d 轮游戏:' % rou) result_r = random.sample(range(1,34),6) result_r.sort() result.
2021-07-13 09:59:01
4613
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人