[EDIT 06/11/2019] 5 soluções (uma com código ) para usar as técnicas de Transfer Learning do fastai com imagens com mais de 3 canais (com 1 solução do Jeremy).
Para as pessoas que gostam de usar o Deep Learning no Geoespacial, existem 2 tópicos muito interessantes no fórum:
-
Geospatial Deep Learning resources & study group; tópico dedicado para compartilhamento de know-how, perguntas, colaborações de projetos, novas idéias para aplicar o Deep Learning com fast.ai para melhorar nossa compreensão geoespacial do mundo.
-
Como transferir o aprendizado com entradas diferentes: tópico dedicado sobre como usar imagens com mais de 3 canais RGB (como imagens de satélite) enquanto usar o Transfer Learning para não treinar um classificador do zero.
Além disso, existem competições interessantes no Kaggle:
- Dstl Satellite Imagery Feature Detection (leia “Dstl Satellite Imagery Competition, 1st Place Winner’s Interview: Kyle Lee”)
- Understanding Clouds from Satellite Images
- Satellite Pose Estimation Dataset + Challenge
No entanto, um problema recurrente com as imagens satélite é o numero de canais (band) que é geralmente mais que 3 (RGB) até 16 ou 20. Com imagens com mais de 3 canais, não é possível usar direitamente as técnicas de Transfer Learning do fastai. Como resolver isso?
Eu pedi dicas no fórum, e em particular ao @henripal, @radek e @daveluo. As respostas deles contem soluções legais
-
A primeira ideia é de treinar na entrada do modelo uma rede neural para reduzir os x canais das imagens para 3 canais. Uma boa opção é de usar um
ConvNe
t (pelo menos um). Desenvolvei o código correspondente que eu publiquei no meu github (Images | Reduction of images channels to 3 in order to use the normal fastai Transfer Learning techniques). Isso permite de usar todas as técnicas de Transfer Learning do fastai -
A segunda ideia é de treinar modelos em paralelo a partir de imagens em 3 canais (e ai, pode usar aqui um modelo já treinado) e colocar uma rede totalmente conectada na extremidade para decidir das classes de classificação. Ainda não testei.
Exemplo: se imagens tiverem 4 canais (A, B, C, D):
- Modelo 1 - Treinamento com imagens A, B, C
- Modelo 2 - Treinamento com imagens B, C, D
- Modelo 3 - Treinamento com imagens C, D, A
- Modelo 4 - Treinamento com imagens D, A, B
-
(from @daveluo) customize the image dataloader to concat the extra channels and then change the input conv layer to n channels with weights copied from the first 3 channels.The code from this notebook by @ste is here: fastai-samples/kaggle/lesson2-protein-human-protein-atlas-384-resnet50_data_block.ipynb at master · artste/fastai-samples · GitHub
-
(from @daveluo) recent set of notebooks by @simonjhb who did multiclass segmentation with a 48-channel input of satellite bands over time using the eo-learn library which is handy for accessing and working for Sentinel-2 multispectral sat data (also some cool stuff with cutout augmentation and mixup on segmentation that I haven’t seen in too many places): What’s growing there?. Using eo-learn and fastai to identify… | by Simon Grest | Towards Data Science and farm-pin-crop-detection-challenge/notebooks/Train Unet Model.ipynb at master · simongrest/farm-pin-crop-detection-challenge · GitHub
-
Na lição 3, o Jeremy dá uma solução respondendo à questão seguinte:
Question : Some satellite images have 4 channels. How can we deal with data that has 4 channels or 2 channels when using pre-trained models? [1:59:09]
(…) For 4 channel, you probably don’t want to get rid of the 4th channel. So instead, what you’d have to do is to actually modify the model itself. So to know how to do that, we’ll only know how to do in a couple more lessons time. But basically the idea is that the initial weight matrix (weight matrix is really the wrong term, they’re not weight matrices; their weight tensors so they can have more than just two dimensions), so that initial weight tensor in the neural net, one of its axes is going to have three slices in it. So you would just have to change that to add an extra slice, which I would generally just initialize to zero or to some random numbers. So that’s the short version. But really to understand exactly what I meant by that, we’re going to need a couple more lessons to get there.
E vocês? O que pensam? Pode ser soluções para processamento das imagens satélite pelo Deep Learning?