计算机视觉比赛RANZCR CLiP:Few best public notebook and dataset ensemble学习

代码地址:
https://www.kaggle.com/kiranchaudharyy/few-best-public-notebook-and-dataset-ensemble

代码技术:
1.sys.append.path()
将自定义模块路径添加进python解析器法眼皮子底下。
2.device = torch.device(‘cuda’ if torch.cuda.is_available() else ‘cpu’)学习人家代码的写法,非常简洁。
3.albumentations 数据增强工具
https://zhuanlan.zhihu.com/p/107399127/
https://albumentations.ai/docs/api_reference/pytorch/transforms/#albumentations.pytorch.transforms.ToTensorV2
4.PyTorch的自动混合精度(AMP)技术
5.timm库:
https://blog.csdn.net/fengdu78/article/details/114275137

6

class TestDataset(Dataset):
    def __init__(self, df, transform=None):
        self.df = df
        self.file_names = df['StudyInstanceUID'].values
        self.transform = transform
        
    def __len__(self):
        return len(self.df)

    def __getitem__(self, idx):
        file_name = self.file_names[idx]
        file_path = f'{TEST_PATH}/{file_name}.jpg'
        image = cv2.imread(file_path)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        if self.transform:
            augmented = self.transform(image=image)
            image = augmented['image']
        return image
    

自定义dataset,基本技能。
getitem 顾名思义输入一个idx,返回图片,以numpy格式。

7self.model.global_pool = nn.Identity()
这句话恐怕可以理解成废掉原来模型的全局池化:

self.model.global_pool = nn.Identity()
self.model.fc = nn.Identity()
self.pooling = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Linear(n_features, 11)

思路

一开始确定batch size 以及存放测试集图片的数据. 利用sample 获得这些图片的名称.
后面是直接利用这个来生成dataset.
然后自定义了这个测试用的这个数据集的类
之后采用了一个数据增强工具,然后用工具里头的一些函数来做的一个数据的格式和增强一个函数get transform
:在这个函数里,我们重新定义了它的尺寸,做了归一化,以及把它变成torch tensor格式。
然后定义了三个模型类:都是是resnet这个家族的. 其中有一个基于senet变种。
模型类的初始化:
创造模型,获取全连接层的输出特征的这个维数,把原来模型里的池化层废掉,然后把全连接也废掉,然后定义我们自己的池化层和全连接层
模型类的前向传播的自定义:
首先取出这个一共有多少个输入数据,
然后将这个输入输入输入这个模型里,会得到这个特征,
特征进行池化,我们自定义的池化。
池化完的的特征送到全连接层里,得到输出。
在第七行中,我们定义了一个推断的函数,
这个推断的时候有很多模型,我们对模型进行循环,然后在每个模型当中,我们会对这个图片进行翻转,然后又形成一个内循环。
这里有一个疑问,后面有很多不同尺寸的图片的输入,模型竟然可以直接允许输入(尺寸兼容)。

猜你喜欢

转载自blog.csdn.net/qq_44065334/article/details/114377288