2017-02-20 24 views
2

私は金属のcnnコードを書いています。 MetalはMPSCNNLocalContrastNormalization、 を提供します。インスタンス正規化の概念はわずかに異なりますので、私はカーネル関数として実装しようと考えています。インスタンスの正規化を実装したい

しかし、カーネル関数の入力から受け取ったテクスチャ内の特徴がR、G、Bである場合、各R、G、Bの平均と分散を求めるべきであるという問題があります。 これを実装する方法についていくつかのヒントを得たいと思います。

enter image description here

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); 
    } 
} 

答えて

0

Mr.Bista 私はAppleが速いスピードで、このためのいくつかの機能を提供しなかった、このために同じ問題を抱えていました。 そして私は、カーネルの前にcaculate meanのためにMPSCNNPoolingAverageを使用しています。 それは一時的な方法かもしれません。 そして、他のアルゴリズムは、私がコードでテストした後の削減合計アルゴリズムのように、これより優れていません。 このため、私は引き続きより良い実装を追跡していきます。

+0

うわー!良いアイデア..!! 私はmpscnnpoolingaverageで平均した後、分散を得るためのヒントを教えてくれますか? –

+0

mpscnnpoolingaverageの後に、nchannelx1x1(1x1 pixle)でmpstemporaryイメージを取得できます。そして、カーネルを使って、元の画像からサブ画像のサブとパワーを計算し、再び平均をプールすれば、分散が得られます。 – Ericking

+0

そして私はGithubのMetalImageプロジェクトでINVIDA最適化アルゴリズムを参照して、他のアルゴリズムの削減量を求めます。(https://github.com/erickingxu/MetalImage.git) – Ericking

関連する問題