将VNCoreMLFeatureValueObservation结果(3D双精度数组)转换为多个UIImage

我有一个CoreML模型,运行后会返回一个VNCoreMLFeatureValueObservation对象,其中包含一个“MultiArray : Double 10 x IMG_SIZE x IMG_SIZE数组”。

如何将这个结果转换为10个尺寸为IMG_SIZE x IMG_SIZE的UIImage,每个图像的值为灰度?


回答:

经过一番探索后,我发现需要添加这些辅助函数:

https://github.com/hollance/CoreMLHelpers 到我的Xcode项目中。还有一个关于MultiArray初始化的提问: https://stackoverflow.com/a/44462908/403403

然后我拼凑了这个解决方案:

 let request = VNCoreMLRequest(model: model) { (request, error) in            guard let results = request.results as? [VNCoreMLFeatureValueObservation] else {                fatalError("模型处理图像失败")            }            let obs : VNCoreMLFeatureValueObservation = (results.first)!            let m: MLMultiArray = obs.featureValue.multiArrayValue!            var mArrays = [MLMultiArray]()            for i in 0..<10 {                let start = i*(IMG_SIZE*IMG_SIZE)                 guard let tmp : MLMultiArray = try? MLMultiArray(shape:[768,768], dataType:MLMultiArrayDataType.double) else {                    fatalError("运行时意外错误。MLMultiArray")                }                for n in 0..<(IMG_SIZE*IMG_SIZE) {                    tmp[n] = m[start+n]                }                mArrays.append(tmp)            }            self.imagePred0.image = mArrays[0].image(offset: 0, scale: 255)!            self.imagePred1.image = mArrays[1].image(offset: 0, scale: 255)!            self.imagePred2.image = mArrays[2].image(offset: 0, scale: 255)!            self.imagePred3.image = mArrays[3].image(offset: 0, scale: 255)!            self.imagePred4.image = mArrays[4].image(offset: 0, scale: 255)!            self.imagePred5.image = mArrays[5].image(offset: 0, scale: 255)!            self.imagePred6.image = mArrays[6].image(offset: 0, scale: 255)!            self.imagePred7.image = mArrays[7].image(offset: 0, scale: 255)!            self.imagePred8.image = mArrays[8].image(offset: 0, scale: 255)!            self.imagePred9.image = mArrays[9].image(offset: 0, scale: 255)!        }

希望有更简洁的方法,但目前这样可以工作

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注