10 / 24 · Conceito
im2col e multiplicação de matrizes
Para H=W=4,C=1 e um kernel 3×3 sem preenchimento, calcule os elementos originais da entrada, P,K e os elementos expandidos dos recortes.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Reescreva a operação
im2col transforma cada janela de entrada em um vetor para multiplicação de matrizes. Colocamos um recorte em cada linha. A matriz A tem P×K elementos, com P=HoWo e K=CRS. Os pesos linearizados formam colunas da matriz B, de dimensão K×M. O produto AB tem dimensão P×M. Outras convenções colocam recortes em colunas, portanto estabeleça os eixos em vez de deduzi-los pelo nome.
Você pode materializar a matriz completa de recortes ou gerar recortes sob demanda. Ambos podem produzir os mesmos números com armazenamento e largura de banda diferentes. Ter um mecanismo de multiplicação de matrizes não exige escrever uma matriz expandida completa na memória externa.
Matriz resolvida
Para [1,2,3;4,5,6;7,8,9] e janelas 2×2, A tem as linhas [1,2,4,5], [2,3,5,6], [4,5,7,8] e [5,6,8,9]. O kernel [1,2;3,4] dá a coluna de pesos [1,2,3,4]. Os quatro produtos escalares são 37,47,67,77. Assim, 4×4 multiplicado por 4×1 produz 4×1, que é reorganizado em uma saída 2×2.
A entrada original contém nove elementos; a matriz expandida contém dezesseis. O valor central cinco aparece quatro vezes, enquanto o valor de canto um aparece uma vez. A reutilização espacial torna-se duplicação em uma representação materializada. Um vetor de pesos é reutilizado para os quatro recortes. Calcule P×K e compare com C×H×W antes de definir o armazenamento. Uma região de saída maior pode tornar a duplicação substancial.
Para vários canais, linearize o recorte e os pesos na mesma ordem c,r,s. Um recorte 1×1 de dois canais é [x0,x1]; inverter apenas os canais dos pesos muda o resultado. Comece com valores assimétricos de canais. A convolução agrupada forma vetores de grupos separados, em vez de incluir indiscriminadamente todos os canais de entrada.
A concordância com um modelo direto verifica valores aritméticos, não transferências físicas de memória nem operação simultânea de PEs. O próximo capítulo gera janelas equivalentes a partir de um fluxo; a divisão posterior em blocos evita armazenar um tensor expandido inteiro. Registre o tamanho da matriz intermediária e a duplicação além dos valores de saída, para que os custos do mapeamento permaneçam visíveis.
Experimente
Para H=W=4,C=1 e um kernel 3×3 sem preenchimento, calcule os elementos originais da entrada, P,K e os elementos expandidos dos recortes.
Ler a explicação
A entrada tem dezesseis elementos. A saída é 2×2, portanto P=4 e K=9. Uma matriz completa de recortes tem 36 elementos. Janelas sob demanda podem evitar armazenar todos os 36.