论文链接: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未完待续。。。