J'écris un code cnn métallique. Metal fournit MPSCNNLocalContrastNormalization, Étant donné que le concept de normalisation d'instance est légèrement différent, j'ai l'intention de l'implémenter en tant que fonction noyau.Je souhaite implémenter la normalisation d'instance
Cependant, le problème est que la moyenne et la variance pour chaque R, G, B devraient être obtenues lorsque la caractéristique est R, G, B dans la texture reçue de l'entrée dans la fonction du noyau. Je veux obtenir quelques conseils sur la façon de mettre en œuvre cela.
kernel void instance_normalization_2darray(texture2d_array<float, access::sample> src [[ texture(0) ]],
texture2d_array<float, access::write> dst [[ texture(1) ]],
uint3 tid [[thread_position_in_grid]]) {
}
kernel void calculate_avgA(texture2d_array<float, access::read> texture_in [[texture(0)]],
texture2d_array<float, access::write> texture_out [[texture(1)]],
uint3 tid [[thread_position_in_grid]])
{
int width = texture_in.get_width();
int height = texture_in.get_height();
int depth = texture_in.get_array_size();
float4 outColor;
uint3 kernelIndex(0,0,0);
uint3 textureIndex(0,0,0);
for(int k = 0; k < depth; k++) {
outColor = (0.0, 0.0, 0.0, 0.0);
for (int i=0; i < width; i++)
{
for (int j=0; j < height; j++)
{
kernelIndex = uint3(i, j, k);
textureIndex = uint3(tid.x + i, tid.y + j, tid.z + k);
float4 color = texture_in.read(textureIndex.xy, textureIndex.z).rgba;
outColor += color;
}
}
outColor = outColor/(width * height);
texture_out.write(float4(outColor.rgba), tid.xy, textureIndex.z);
}
}
Wow! Bonne idée..!! Après je moyenne avec mpscnnpoolingaverage, pouvez-vous me donner quelques conseils sur la façon d'obtenir la variance ..? –
Après mpscnnpoolingaverage, vous pouvez obtenir une image mpstemporary avec nchannelx1x1 (1x1 pixle). Et puis vous pouvez utiliser un noyau pour calculer la sous-puissance et la puissance de la sous-image à partir de l'image originale, et faire une moyenne de regroupement à nouveau, vous obtiendrez la variance. – Ericking
Et je vais donner un autre algorithme avec la somme de réduction se référer à l'algorithme d'optimisation INVIDA dans mon projet MetalImage dans Github. (Https://github.com/erickingxu/MetalImage.git) – Ericking