623. ISIC 2024 - Skin Cancer Detection with 3D-TBP | isic-2024-challenge
感谢组织本次竞赛的人们!
代码:https://github.com/tomo20180402/isic2024_skin-cancer-detection-with-3d-tbp_10th-place-solution
基本上,相信交叉验证(CV)。
即使 CV 略微变差,如果我认为该技术能提高泛化性能,我也会应用它。
# 模式 1
train_transform = A.Compose([
A.Transpose(p=0.5),
A.VerticalFlip(p=0.5),
A.HorizontalFlip(p=0.5),
A.RandomBrightness(limit=0.2, p=0.75),
A.RandomContrast(limit=0.2, p=0.75),
A.OneOf([
A.MotionBlur(blur_limit=5),
A.MedianBlur(blur_limit=5),
A.GaussianBlur(blur_limit=5),
A.GaussNoise(var_limit=(5.0, 30.0)),
], p=0.7),
A.OneOf([
A.OpticalDistortion(distort_limit=1.0),
A.GridDistortion(num_steps=5, distort_limit=1.),
A.ElasticTransform(alpha=3),
], p=0.7),
A.CLAHE(clip_limit=4.0, p=0.7),
A.HueSaturationValue(hue_shift_limit=10, sat_shift_limit=20, val_shift_limit=10, p=0.5),
A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=15, border_mode=0, p=0.85),
A.Resize(128, 128),
A.Cutout(max_h_size=int(128 * 0.375), max_w_size=int(128 * 0.375), num_holes=1, p=0.7),
A.Normalize()
])
valid_transform = A.Compose([
A.Resize(128, 128),
A.Normalize()
])
# 模式 2
train_transform = transforms.Compose([
transforms.Resize((144, 144)),
transforms.RandomResizedCrop(128, scale=(0.8, 1.2), ratio=(0.75, 1.3333)),
transforms.RandomHorizontalFlip(p=0.5),
transforms.RandomVerticalFlip(p=0.5),
RandomApply(transforms.RandomRotation(45), p=0.5),
RandomApply(transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0, hue=0), p=0.5),
RandomApply(transforms.GaussianBlur(kernel_size=3), p=0.3),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
valid_transform = transforms.Compose([
transforms.Resize((128, 128)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
...
# 一些其他特征
).with_columns(
area_age_ratio = pl.col('tbp_lv_areaMM2') / pl.col('age_approx'),
symmetry_eccentricity_interaction = pl.col('tbp_lv_symm_2axis') * pl.col('tbp_lv_eccentricity'),
border_complexity_normalized = pl.col('tbp_lv_norm_border') / (pl.col('tbp_lv_areaMM2').sqrt() + err),
color_variation_index = pl.col('tbp_lv_color_std_mean') * pl.col('tbp_lv_radial_color_std_max'),
lesion_flatness = (pl.col('tbp_lv_x')**2 + pl.col('tbp_lv_y')**2).sqrt() / (pl.col('tbp_lv_z')+ err),
relative_hue_difference = (pl.col('tbp_lv_H') - pl.col('tbp_lv_Hext')).abs() / (pl.col('tbp_lv_H') + pl.col('tbp_lv_Hext') + err),
area_diameter_ratio = pl.col('tbp_lv_areaMM2') / (pl.col('clin_size_long_diam_mm')**2 + err),
color_geometric_mean = (pl.col('tbp_lv_L') * pl.col('tbp_lv_A') * pl.col('tbp_lv_B')) ** (1/3),
tbp_lv_norm_color_per_long_diam = pl.col('tbp_lv_norm_color') / pl.col('clin_size_long_diam_mm').log1p(),
norm_L = (pl.col('tbp_lv_stdL') + pl.col('tbp_lv_color_std_mean')) / pl.col('tbp_lv_L'),
norm_A = (pl.col('tbp_lv_stdL') + pl.col('tbp_lv_color_std_mean')) / abs((pl.col('tbp_lv_A')) + err),
norm_B = (pl.col('tbp_lv_stdL') + pl.col('tbp_lv_color_std_mean')) / abs((pl.col('tbp_lv_B')) + err),
clin_size_long_diam_mm_per_age = pl.col('clin_size_long_diam_mm') / pl.col('age_approx'),
area_ratio = (np.pi * (pl.col('clin_size_long_diam_mm')/2)**2) / pl.col('tbp_lv_areaMM2'),
).with_columns(
weighted_area_ratio = (pl.col('area_ratio') * (pl.col('tbp_lv_areaMM2'))).log1p(),
)
...