如果我必须在 pytorch 中为只有单通道的图像创建一个模型。我怎样才能将我的模型转换为采用这种新架构,而无需妥协它已经训练过的预训练权重。
PyTorch:如何使用 pytorch 预训练单通道图像
数据挖掘
计算机视觉
火炬
迁移学习
2021-09-18 05:54:14
2个回答
我遇到了一个代码,用户可以使用这种非常创新的方法来解决这个问题。这是将任何预训练网络转换为接受 1 通道图像而不丢失相关权重的小技巧。
arch = models.resnet50(num_classes=1000, pretrained=True)
arch = list(arch.children())
w = arch[0].weight
arch[0] = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=2, bias=False)
arch[0].weight = nn.Parameter(torch.mean(w, dim=1, keepdim=True))
arch = nn.Sequential(*arch)
基本上在这里,第一个 Conv2d 的权重被获取并存储在w中。之后,我们正在创建具有 1 个通道的新 Conv2d,并将其参数替换为我们取平均值的 w。我很确定这也可以在 keras 或 tenserflow 中实现。
如果你碰巧尝试过,请告诉我。
您可以将 1 通道图像转换为具有相同值的 3 通道图像,因此它仍然是黑白的。这样您就不会在其他频道上丢失过滤器。