【问题标题】:Properly Load Microsoft.ML model in Xamarin App?在 Xamarin 应用程序中正确加载 Microsoft.ML 模型?
【发布时间】:2021-10-29 15:15:58
【问题描述】:

我正在学习一些机器学习的工作原理,并最终构建了一个小型 C# 应用程序,因为我正在观看一个教程,其中模型确定特定蜜蜂是什么种类的蜜蜂。它在 C# 应用程序中运行良好,但我也在开发一个具有拍照功能的应用程序项目,所以我想“我在第一个项目中保存的模型没有理由不能在第二个项目中工作,对吧?”。显然它不能工作是有原因的,因为这是在应用程序项目中查看的必要代码:

MLContext m_mlObj;
DataViewSchema m_modelSchema;
ITransformer m_loadedTrainedModel;

var folderPath = DependencyService.Get<IFileSystem>().GetExternalStorage();
var fileDir = Path.Combine(folderPath, "trainedModel.zip");

bool testValue = File.Exists(fileDir);

if(testValue)
{
    Console.WriteLine("File in fact exists.");

    try
    {
         m_loadedTrainedModel = m_mlObj.Model.Load(fileDir, out m_modelSchema);
    }

    catch (Exception e)
    {
         Console.WriteLine("\n\n\nInner exception: " + e.InnerException);
    }
}

else
{
     Console.WriteLine("File does not exist");
}

我在“m_loadedTrainedModel = m_mlObj.Model.Load(fileDir, out m_modelSchema);”上有一个断点当然,它总是会触发异常。

异常状态:

---> System.TypeLoadException:无法加载字段'Microsoft.ML.Transforms.DnnRetrainTransformer:_tfInputShapes'(9)的类型,原因是:无法从typeref解析类型为01000060的类型(预期类'Tensorflow.TensorShape ' 在程序集 'TensorFlow.NET, Version=0.20.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51') 程序集:TensorFlow.NET, Version=0.20.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd5 1 类型:Tensorflow.TensorShape 成员: (空)

我认为这意味着它正在检查 TensorFlow.NET 包内的 Tensorflow.TensorShape 并且没有找到它。如果是这种情况,我相信我没有安装正确的包,所以我的 Xamarin 项目将能够正确加载模型,也许?或者如果不是,那么真正的潜在问题可能是什么?代码看起来很简单,所以我有点困惑这是如何失败的。

如果解决方案公然超出我的想象,我很抱歉,并感谢任何愿意提供帮助的人。

【问题讨论】:

  • 更新:只是为了看看我会得到什么,我摆脱了 Tensorflow.NET (v0.60.2) 包,我得到了这个错误:内部异常:System.Reflection.TargetInvocationException:异常已经由调用的目标抛出。 ---> System.Reflection.TargetInvocationException:调用的目标已抛出异常。 ---> System.DllNotFoundException: tensorflow assembly: type: member:(null)" 是否有一个 DLL 我在某个地方丢失了作为潜在问题的地方,或者我应该忽略这个并继续担心关于我的第一个问题?
  • 1) 您正在使用哪些特定 包?2) 您正在使用哪个平台进行测试?
  • 1) 我正在使用 a] Microsoft.ML b] Microsoft.ML.ImageAnalytics c] Microsoft.ML.Tensorflow d] Microsoft.ML.Vision e] NumSharp.Lite f] Syncfusion.Xamarin .SfImageEditor g] TensorFlow.NET h] Xam.Plugin.Media i] Xamarin.Essentials j] Xamarin.Forms 2) 如果我理解您的问题,我正在 Android 平台上开发此应用程序,但我正在尝试加载共享项目中的模型。希望这也不是问题
  • 粗略搜索似乎表明您应该将 TensorFlow Lite 用于移动设备。我没有看到很多关于在 Xamarin 上使用完整 TensorFlow 库的参考资料。我可能错了,这不是我自己做过的事情
  • 嗯,所以我的错误可能实际上是没有在 Xamarin 上使用 FULL TensorFlow 库?有趣的。好吧,如果我使用的是 TensorFlow Lite,我不认为这是我安装的软件包是公然的。我再检查一下看看。

标签: machine-learning xamarin model ml.net machine-learning-model


【解决方案1】:

在 ARM 上使用 ML.NET 时,TensorFlow 是撰写本文时的限制之一。

https://devblogs.microsoft.com/dotnet/ml-net-june-updates-model-builder/#ml-net-on-arm

与此同时,您可能需要考虑将模型部署为 Web API 并从您的移动应用程序向该 API 发出请求。

https://docs.microsoft.com/dotnet/machine-learning/how-to-guides/serve-model-web-api-ml-net

【讨论】:

  • 感谢您的回复,我会在 Jason 给出关于 TensorFlow Lite 的其他回复后进行调查!此外,我现在对 ARM 不太熟悉,但第一个链接指出“它支持移动和嵌入式设备以及基于 ARM 的服务器的平台支持”。所以我确信我可以让它与 Xamarin 一起使用。
  • 你也可以考虑使用ONNX序列化,你可以把你的TF模型转成ONNX。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多