내가 수동으로 값을 MPSImage
또는 2D 금속 질감을 작성하고 길쌈 네트워크 작업을 할 것을 전달하는 데 노력하고있어. CNN (금속 성능 쉐이더)에 대한 입력 내가 CGContext
의 UnsafePointer
을 전달할 수 그 이유는, 일반적으로 (이 https://developer.apple.com/library/content/samplecode/MPSCNNHelloWorld/Introduction/Intro.html#//apple_ref/doc/uid/TP40017482-Intro-DontLinkElementID_2 같은) 이미지이지만, 이번에는 내가 입력으로 float 배열을 사용하고 싶습니다.iOS : 2D Float 데이터를 수동으로 MTLTexture 또는 MPSImage로 설정하는 방법은 무엇입니까?
다음은 내가 시도한 것입니다. 입력 배열을 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
변환하지만, 더미
UIImage
을 만들어 텍스처를로드 2D 텍스처와 거래 나를 위해 해킹 같은 느낌."라고),하지만 충분한 대답이없는 것 같습니다. 이제 나는이 문제를 해결할 아이디어가 없습니다. 아이디어가 있으면 알려 주시기 바랍니다.
대단히 감사합니다. 당신의 텐서가 < = 4 기능 채널이있는 경우
나는 당신이 이미 솔루션에 매우 가까운 것 같아요,하지만 난 당신이 여기 중개자'NSData'를 사용할 필요가 있다고 생각하지 않는다; 단지 불필요한 사본을 만듭니다. 중요한 것은 배열의 데이터가 예상 된 순서대로 연속적으로 배치된다는 것입니다. 즉, "종료 종료"배치 이미지 데이터의 행을 포함하는 하나의 배열 (안 배열의 배열)을 만든 다음 스위프트 배열 때문에 (바이트 매개 변수로 직접 그 배열을 전달해야 함을 의미하는 것으로 보인다 수 암시 적으로 적절한 안전하지 않은 원시 포인터 유형으로 캐스팅됩니다. – warrenm
고맙습니다. 배열 배열을 배열로 변환했습니다. 텍스처가 올바른 숫자를로드 할 수 있는지 여부를 확인할 수있는 방법이 있습니까? – kangaroo
바이트를 프로그래밍 방식으로 읽고이를 확인하거나 Xcode 내에서 렌더 루프를 만들고 GPU 프레임 캡처를 수행하여 모든 기존 리소스를 볼 수 있습니다. – warrenm