Vision Transformer多波段影像分类

计算机视觉总用三波段RGB影像做分类,代码也是三波段影像作为输入做的。

对多波段影像处理需要做一些代码改进。其实也不难,pytorch包兼容性很高,所以只是对自编代码修改就可以解决问题。

这次改的是vision transformer的官方代码,就是论文里附的代码GitHub - google-research/vision_transformer

将三波段改为四波段,也会备注n波段怎么改。首先做的就是现有四波段影像,替换路径直接运行,依次会遇到三个BUG,一个个修就好,其实没有很难:

1
UnidentifiedImageError: cannot identify image file

有文章说PIL图像库不支持的16位图像(uint16)。本以为需要将tif转为png,拉伸到0-255,但其实发现PIL只是不支持16位TIF影像,直接将16位TIF转为16位png就可以了。

2
The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0:

修改augdata.py:

transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])

=>
transforms.Normalize([0.5, 0.5, 0.5, 0.5], [0.5, 0.5, 0.5, 0.5])

这个是在归一化的时候,三波段均值和标准差矩阵需要三个变量,四波段就是四个,n波段就是需要n个0.5。

3
RuntimeError: Given groups=1, weight of size [768, 3, 16, 16], expected input[32, 4, 224, 224] to have 3 channels, but got 4 channels instead

model.py:

self.embedding = nn.Conv2d(3, emb_dim, kernel_size=(fh, fw), stride=(fh, fw))

=>
self.embedding = nn.Conv2d(4, emb_dim, kernel_size=(fh, fw), stride=(fh, fw))

这是embedding切图像的时候维度修改,n波段就把第一个参数改为n。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值