windows 如何创建一个自定义的Winrt::Microsoft::AI::机器学习::TensorFloat16Bit?

xxe27gdn  于 2023-02-05  发布在  Windows
关注(0)|答案(1)|浏览(177)

手动对数据进行张化时,如何创建TensorFloat16Bit
我们根据这个Microsoft示例对数据进行了张化,在该示例中,我们将255 - 0转换为1 - 0,并更改RGBA顺序。

...
        std::vector<int64_t> shape = { 1, channels, height , width };
        float* pCPUTensor;
        uint32_t uCapacity;

        // The channels of image stored in buffer is in order of BGRA-BGRA-BGRA-BGRA. 
        // Then we transform it to the order of BBBBB....GGGGG....RRRR....AAAA(dropped) 
        TensorFloat tf = TensorFloat::Create(shape);
        com_ptr<ITensorNative> itn = tf.as<ITensorNative>();
        CHECK_HRESULT(itn->GetBuffer(reinterpret_cast<BYTE**>(&pCPUTensor), &uCapacity));

        // 2. Transform the data in buffer to a vector of float
        if (BitmapPixelFormat::Bgra8 == pixelFormat)
        {
            for (UINT32 i = 0; i < size; i += 4)
            {
                // suppose the model expects BGR image.
                // index 0 is B, 1 is G, 2 is R, 3 is alpha(dropped).
                UINT32 pixelInd = i / 4;
                pCPUTensor[pixelInd] = (float)pData[i];
                pCPUTensor[(height * width) + pixelInd] = (float)pData[i + 1];
                pCPUTensor[(height * width * 2) + pixelInd] = (float)pData[i + 2];
            }
        }

参考:www.example.comhttps://github.com/microsoft/Windows-Machine-Learning/blob/2179a1dd5af24dff4cc2ec0fc4232b9bd3722721/Samples/CustomTensorization/CustomTensorization/TensorConvertor.cpp#L59-L77
我刚刚将我们的.onnx模型转换为float16,以验证在可用硬件支持float16时,这是否会在推断方面提供一些性能改进。但是,绑定失败,这里的建议是传递一个TensorFloat16Bit
如果我把TensorFloat换成TensorFloat16Bit,我会在pCPUTensor[(height * width * 2) + pixelInd] = (float)pData[i + 2];处得到一个访问冲突异常,因为pCPUTensor的大小是原来的一半。看起来我应该把_cast重新解释为uint16_t**或这些行中的其他内容,所以pCPUTensor的大小与它是TensorFloat时的大小相同,但随后我得到了进一步的错误,它只能是uint8_t**BYTE**
有什么想法可以修改这个代码,以便我可以得到一个自定义的TensorFloat16Bit?

ilmyapht

ilmyapht1#

TensorFloat16Bit上试用factory methods
但是,您需要将数据转换为float16
https://stackoverflow.com/a/60047308/11998382
另外,我可能建议您在onnx模型中进行转换。

相关问题