Caffe im2col

Caffe Im2col



Gràcies al coneixement profund de Tiger-Gao, aquest article es transfereix des de https://blog.csdn.net/mrhiuser/article/details/52672824.

Aquest article tracta sobre el procés de convolució en cafeïna. És ben sabut que la convolució en cafe es basa en im2col i sgemm. Ja hi ha moltes explicacions sobre im2col a Internet. No tenia intenció d’escriure aquest article. (Hi ha molts articles a Internet que expliquen el procés del caffe im2col. Alguns articles i la implementació específica de caffe no són correctes. Realment no sé si el tenen. En veure la implementació concreta del codi caffe, és a causa d’aquests articles que van perdre molt de temps.)



Aquest article dóna un exemple del procés específic de im2col i sgemm en caffe. Abans d’explicar-ho, les dades de caffe s’emmagatzemen a la fila major.Un: im2coluna imatge input_num = 1 canal d'imatge input_channel = 1 altura de la imatge input_h = 4 amplada de la imatge input_w = 4 del nucli high kernel_h = 3 d'amplada del nucli kernel_w = 3 stride = 1 ; pad = 0 ; Després de la convolució, la fórmula de càlcul de la imatge de sortida: output_h = (input_h-kernel_h) / stride + 1 output_w = (input_w-kernel_w) / stride + 1
com es mostra a continuació (Nota: les dades de la imatge no representen el valor de color de la imatge) La imatge original (Fig. A) es dibuixa d’esquerra a dreta i de dalt a baix, i la matriu de mida 3 * 3 (perquè la mida del nucli és 3 * 3) a (a) es dibuixa a la imatge dreta (Fig. b). una fila. El procés específic es mostra a la figura següent:
Dos: im2col multicanalassumeix que hi ha tres canals (R, G, B) canal d’imatge input_channel = 3 La imatge s’emmagatzema a la memòria: primer, les dades del primer canal s’emmagatzemen contínuament, després s’emmagatzemen les dades del segon canal i, finalment, s’emmagatzemen les dades del tercer canal. Com es mostra a continuació: El procés d’im2col multicanal és primer im2col el primer canal, després el segon canal en im2col i, finalment, el segon canal en im2col. Les dades de cada canal im2col també s’emmagatzemen contínuament a la memòria. Com es mostra a continuació: Tres: nucliCada canal de la imatge correspon a un canal del nucli, com es mostra a continuació (Nota: perquè el càlcul sigui senzill, configureu el valor del nucli a 1 i aquest valor no representa el valor del color). Les dades del canal del nucli també s’emmagatzemen contínuament a la memòria. Per tant, la imatge del nucli anterior també es pot representar com la següent imatge: Tres: multiplicació matricial sgemmLa multiplicació matricial de la imatge i del nucli en caffe és el nucli * img. És a dir: en la multiplicació de matrius M = 1 , N = output_h * output_w K = input_channels * kernel_h * kernel_w
Com es mostra a continuació: Les dades de la imatge s’emmagatzemen contínuament, de manera que la imatge de sortida també pot ser com es mostra a continuació [output_h * output_w] = [2 * 2]:
Quatre: sortida d'imatges multicanalA la matriu caffe i la multiplicació de la matriu del nucli: M = canals_de sortida , N = sortida_h * sortida_w K = canals_entrada * nucli_h * nucli_w
Com es mostra a continuació: De la mateixa manera, les dades de diverses imatges de canals de sortida s’emmagatzemen contínuament, de manera que la imatge de sortida també pot ser com es mostra a continuació [output_channels * output_h * output_w] = [3 * 2 * 2],
(Acabar)