论文链接:https://www.semanticscholar.org/paper/MASDF-Net%3A-A-Multi-Attention-Codec-Network-with-and-Fu-Deng/6ab609eb93dfd12596032174ca9603712f5c050a
代码链接:https://github.com/Rayicer/TransFuse
初见面代码:
Q:这几个数据集分别是干嘛的?GroundTruth的数据集是干嘛的?训练集,验证集,测试集区别是什么,分别是干什么的?
A:这几个数据集分别是训练集(Training),验证集(Validation),测试集(Test),
其中训练集是用来训练模型的,
验证集是用于模型选择和超参数调整的数据集,用于研究人员评估模型配置的性能,并选择最佳的模型(参数)。
测试集:是用来最终评估模型性能的数据集。里面的图片具有代表性,独特性,全面,随机的,独立于前两个数据集。
三者可以类比为学生从学习知识到高考。 训练集就是做练习题,验证集就是做月考,查漏补缺,测试集就是高考,最终评估。
#训练集-》训练模型(类似做练习题);验证集-》调整模型,评估性能(类似月考);测试集-》最终评估模型(类似高考)
三者都有GroundTruth,相当于就是作业的参考答案,用于矫正,评估。
Q:三个都是数据集,那可以调换吗?
A:不可以调换,因为不同的数据集具有不同的特点,就像单元练习题,月考题,高考题能一样吗。
Q:文件夹外的这几个文件分别是干啥的,应该运行那个,怎么运行?
A:第一个process.py是数据(预)处理文件:也就是把图片转化成数据数组,这样计算机才能处理。具体怎么处理可以见代码内容。大致就是:黑白的就是不同像素点,按顺序存储0,1.彩色的就是RGB的三个值(到时候会建立三个通道,不同通道代表不同的颜色值)。
第二个是test_isic.py是测试模型的代码
train_isic.py是训练模型的代码。
---------------------------进入process.py----------------
Q: process.py文件里有个set_size,这是干嘛的,里面的数字各有什么含义?
set_size = [2000, 150, 600]
A:set_size
是一个列表,它指定了每个数据集(训练集、验证集、测试集)中图像的数量。分别代表训练集中的图像数量,验证集中的图像数量,测试集中的图像数量
- 2000:训练集中的图像数量。
- 150:验证集中的图像数量。
- 600:测试集中的图像数量
Q:他这里save_name是干嘛的 ?
save_name = ['train', 'val', 'test']
A:#预处理后的文件前缀名,后缀名是.npy。相当于就是保存处理后的数据的文件的文件名。
Q:他这个height和witdth又是干什么的欸?
A:height
和 width
变量用于指定处理后图像的尺寸。这些变量定义了图像在预处理步骤中将被调整到的高度和宽度。在深度学习模型中,通常需要固定尺寸的输入图像,因此预处理步骤中常常包括调整图像尺寸的操作。
在 process.py
脚本中,height
和 width
用于 cv2.resize
函数,该函数将加载的每个图像调整到指定的尺寸:
img = cv2.resize(img, (width, height))
确保了所有处理后的图像都有相同的维度,可以被模型正确处理。同样的方法也适用于掩码图像,以确保图像和其对应的掩码在空间尺寸上是匹配的。
Q:这里我怎么知道像素应该是多少呢?换句话说,这个数值可以任意调整吗?有什么影响不?是有一个标准的答案,还是说像参数一样可以随意调的?
A:一般是不能任意调的,一般就根据原图片像素尺寸来,这样避免信息丢失,或过大。不合适的像素尺寸会影响到模型准确率和泛化能力。
Q:
这个像素一般会调不?或者说一般啥情况会调这个,调的话是宽高同倍增减吗?
A:
Q:imgs = np.uint8(np.zeros([length, height, width, 3]))这一句是在干什么,什么意思?
A:这里是初始化矩阵,创建个0矩阵,这里的3表示就是三个通道。
np.zeros([length, height, width, 3])
创建了一个形状为 [length, height, width, 3]
的数组,其中 length
是图像数量,height
和 width
分别是图像的高度和宽度,3
表示图像的通道数(对于彩色图像,通常是3个通道:红色、绿色和蓝色)。
-
数据类型指定:
np.uint8
指定了数组的数据类型为无符号的8位整数。这是图像处理中常用的数据类型,因为图像的像素值通常是0到255之间的整数。
Q:for i in os.listdir(path):这是在干嘛?
A:os.listdir(path)这个函数是获取该路径下的文件或文件夹的名称(包括后缀名)。也就是说i的值就是一个字符串。
Q:if len(i.split('_'))==2:这一句啥意思?
A:
-
分割字符串:
i.split('_')
使用下划线_
作为分隔符来分割字符串i
。split
函数将字符串分割成一个列表,其中每个元素都是原字符串中由下划线分隔开的部分。 -
当分割后的列表元素为2的时候,说明就是我们要处理的图片文件。
....2024.09.19未完待续。。。
2024.9.20续更。。。
Q:这怎么三个连着的Img不是就覆盖了吗?
A:其实没有直接覆盖,上一个img是作为下一个Img的等式右边函数的参数,来参与运算了的。
这里三个就是对图片进行一定的处理了
--------------------test_isic.py文件---------------
Q:这些这么大几坨是在干嘛啊?这函数的作用是什么,里面的参数什么意思,特别是第一个怎么文件夹里什么地方都没看到啊,起什么作用???
A:这几个是在添加参数,相当于建立一个parser专门用于存储参数,然后后面几个就是用于添加的参数了,便于后面用。而第一个参数,也就是参数的名字罢了,然后-- 是固定格式。
这里就是把这个建立的参数,赋给一个变量。
这里就是在用各个参数名称了,这里这么写,就是相当于加载了参数所代表的内容。一般前面 添加参数时设定的default的值就是这里所说的内容。 有时候还会看到添加参数时 ,写help=。。。。。 意思是,help: 帮助信息,例如help='VGG/ResNet'
提供了关于该参数的帮助信息,当用户使用 -h
或 --help
选项时,该信息将显示在帮助文档中。
关于这个函数可以参考:链接
-----2024.9.20未完待续。。。。
Q:这一句是啥意思?
for i in range(test_loader.size):
A:i取值,从0到test_loader元素总数-1.
size是获取元素总数。以前那个.len是获取长度。
Q:这是在干嘛?
gt = 1*(gt>0.5)
A:把一个概率值转化成一个二元值也就是0,1
--------------------------------------------------------
下面讲一下文章中的模块设计。
其中编译码结构采用的是PVT,也就是金字塔transformer。然后结合U形结构。
同时两边增加跳连接。然后主要新提出的模块就是SIG,MAF,MSCF。
SIG用于筛除跳连接时的不重要信息。
MAF用于更深层次挖掘到全局信息特征
MSCF用于整合各个层级的特征。
Q:SIG怎么实现筛选掉不重要的信息的?