Una imagen para explicar la mezcla de canales en ShuffleNet (con dos implementaciones de pytorch)

0. No entendí la mezcla de canales de ShuffleNet. Más tarde, lo entendí en el blog del Gran Dios: https://blog.csdn.net/u011974639/article/details/79200559 . Escriba su propio entendimiento a continuación para que sea más fácil para un novato como yo entenderlo con mayor claridad.

1. Arriba : La reproducción aleatoria de canales tiene como objetivo interrumpir el orden de los canales en el mapa de características original.

La imagen de arriba es lo suficientemente clara. Primero determine la cantidad de canales en su mapa de características, luego determine la cantidad de grupos y luego agrupe los canales como entrada.

La salida final todavía tiene la forma de un grupo, y luego, uniéndolo, aparece un mapa de características con la misma forma que la entrada original. Es solo que el pasaje está interrumpido.

2. código pytorch: el código corresponde al número de canales en la imagen de arriba, que es más fragante que mirarlo.

Código 1: Siga estrictamente la sensación del papel, imprima la entrada y la salida y compare la imagen de arriba para verla de un vistazo.

#第一种  严格按论文的感觉
a = torch.randn(1,15,3,3)
batchsize, channels, height, width = a.size()
groups = 3
channels_per_group = int(channels /groups)
x = a.view(batchsize, groups, channels_per_group, height, width)
x = x.transpose(1, 2).contiguous()
x = x.view(batchsize, -1, height, width)

Código 2: el método de escritura es diferente, pero el resultado es exactamente el mismo que el anterior

#第二种  
x = torch.randn(1,15,3,3)
N, C, H, W = x.size()
groups = 3
out = x.view(N, groups, C // groups, H, W).permute(0, 2, 1, 3, 4).contiguous().view(N, C, H, W)

Referencias: 1.  https://blog.csdn.net/u011974639/article/details/79200559 

Supongo que te gusta

Origin blog.csdn.net/gbz3300255/article/details/108530788
Recomendado
Clasificación