As camadas convolucionais e as próprias camadas de pool são independentes das dimensões de entrada. No entanto, a saída das camadas convolucionais terá tamanhos espaciais diferentes para imagens de tamanhos diferentes, e isso causará um problema se tivermos uma camada totalmente conectada posteriormente (uma vez que nossa camada totalmente conectada requer uma entrada de tamanho fixo). Existem várias soluções para isso:
1. Pool Global: Evite camadas totalmente conectadas no final das camadas convolucionais e, em vez disso, use o pool (como o Global Average Pooling) para reduzir seus mapas de recursos de uma forma de (N, H, W, C) (antes do pool global ) com a forma (N, 1,1, C) (após o pool global), em que:
N = Número de amostras de minibatch
H = Altura espacial do mapa de recursos
W = Largura espacial do mapa de recursos
C = Número de mapas de recursos (canais)
Como Como pode ser visto, a dimensionalidade da saída (N * C) agora é independente do tamanho espacial (H, W) dos mapas de recursos. No caso de classificação, você pode usar uma camada totalmente conectada na parte superior para obter os logits para suas aulas.
2. Pool de tamanho variável:Use regiões de pool de tamanho variável para obter o mesmo tamanho do mapa de recursos para diferentes tamanhos de entrada.
3. Recortar / redimensionar / adicionar imagens de entrada: Você pode tentar redimensionar / recortar / adicionar imagens de entrada a todas com a mesma forma.
No contexto do aprendizado de transferência, convém usar entradas de tamanhos diferentes das entradas originais com as quais o modelo foi treinado. Aqui estão algumas opções para fazer isso:
4. Crie novas camadas totalmente conectadas: Você pode abandonar completamente as camadas totalmente conectadas originais e inicializar uma nova camada totalmente conectada com a dimensionalidade necessária e treiná-la do zero.
5. Trate a camada totalmente conectada como uma convolução: Normalmente, remodelamos os mapas de recursos de (N, H, W, C) para (N, H * W * C) antes de alimentá-la na camada totalmente conectada. Mas você também pode tratar a camada totalmente conectada como uma convolução com um campo receptivo de (H, W). Em seguida, você pode simplesmente envolver esse kernel com seus mapas de recursos, independentemente do tamanho (use preenchimento zero, se necessário) [
http://cs231n.github.io/transfer-learning/ ].