zoukankan      html  css  js  c++  java
  • ios MetalPerformanceShaders 使用总结

    MPSCNNConvolution

    1.初始化时传人 UnsafePointer<Float> 时要传入w,不能是 &(w[0]).否则w其实传入失败,卷积的结果是nan或inf.

    原因可能是 &(w[0])其实只引用了w[0]这一个元素,把w[0]当成整体来看.与C不同。。。

      let w:[Float] = xxxx   
      conv = MPSCNNConvolution(device: device,
                       convolutionDescriptor: convDesc,
                       kernelWeights: w, //!!!!! can not assign to &(w[0])
                       biasTerms: b,
                       flags: MPSCNNConvolutionFlags.none)
    

    2. MPSCNNConvolution的kernel只支持half类型,实测MPSImage的format只能是.unorm8 或.unorm16 .float16,.float32不支持 

    3. 权重的排列顺序:

    weights:[outputChannels][kernelHeight][kernelWidth][inputChannels],bias:[outputChannels]

    MPSImage

    1.内存排列顺序:

    a.slices == 1时

    channles >= 3 内存中排列为  [r g b a] [r g b a] [r g b a] ,a通道占位

    else  a通道不占位

    b.slices >1时

    最后一个slice不论多少个channels 都是 [r g b a] [r g b a] [r g b a],都占位

     

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/mlj318/p/6593762.html
Copyright © 2011-2022 走看看