gpt4 book ai didi

iOS:如何手动将 2D Float 数据设置为 MTLTexture 或 MPSImage?

转载 作者:行者123 更新时间:2023-11-30 12:48:48 24 4
gpt4 key购买 nike

我正在尝试手动填充 MPSImage 或 2D Metal 纹理,并将其传递给进行卷积网络操作。 CNN( Metal 性能着色器)的输入通常是图像(像这样 https://developer.apple.com/library/content/samplecode/MPSCNNHelloWorld/Introduction/Intro.html#//apple_ref/doc/uid/TP40017482-Intro-DontLinkElementID_2 ),这就是为什么我可以传递 CGContextUnsafePointer ,但这次我喜欢使用 Float 数组作为输入。

以下是我尝试过的。我将输入数组转换为 NSData,但它不起作用。

var inputData = NSData(bytes: inputFloatArrayOfArray, length: inputFloatArrayOfArray.count * inputFloatArrayOfArray[0].count * MemoryLayout<Float>.size)
// The type of inputFloatArrayOfArray is [[Float]]
network.srcImage.texture.replace(region: MTLRegion( origin: MTLOrigin(x: 0, y: 0, z: 0),
size: MTLSize(width: inputWidth, height: inputHeight, depth: 1)),
mipmapLevel: 0,
slice: 0,
withBytes: &inputData,
bytesPerRow: inputWidth * MemoryLayout<Float>.size,
bytesPerImage: 0)

Manually set a 1D Texture in Metal可能与我的问题有关(仅供引用:它说“通过将加载的 UIImage 转换为原始字节数据来处理加载纹理的 2D 纹理,但创建一个虚拟的 UIImage 感觉就像对我来说是一个黑客。”),但似乎没有足够的答案。现在我不知道如何解决这个问题。如果您有任何想法,请告诉我。

提前非常感谢您。

最佳答案

如果你的张量有 <= 4 个特征 channel ,那么你只需将它们复制到特征 channel 0-3 中,位于纹理中 RGBA 的位置。如果您的张量不止于此,那么您可以使用 MTLTexture2DArray。除了前四个 channel 之外的其他特征 channel 连续进入阵列中后续图像中的相同坐标。

Image[0]: // a.k.a. slice 0
pix[0][0] = {feature channel 0, feature channel 1, feature channel 2, feature channel 3}

Image[1]: // a.k.a. slice 1
pix[0][0] = {feature channel 4, feature channel 5, feature channel 6, feature channel 7}

Image[2]: // a.k.a. slice 2
pix[0][0] = {feature channel 8, feature channel 9, feature channel 10, feature channel 11}

关于iOS:如何手动将 2D Float 数据设置为 MTLTexture 或 MPSImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com