基于机器学习(Machine Learning)的图像分类(Image classification)实现 (2)

基于机器学习(Machine Learning)的图像分类(Image classification)实现

 

 然后训练结果马上就出来了。

第一个Precision,表示模型包含的标签预测的精度,越大越好。

第一个Recall,模型标签外的预测精度,也是越大越好。

当然,你也可以现在试验一下。点击右上方的Quick Test,即可测试。。

 

基于机器学习(Machine Learning)的图像分类(Image classification)实现

 

 

 然后,点击正上方的Export,导出模型。支持4种格式,Android,Ios,ONNX,DockFile。我们选择WIndows标准的ONNX。好了。第一步基本结束。很简单,都是点几下就搞定。

如果你好奇ONNX里面是啥样子,那么恭喜你,你很好学。去 https://github.com/lutzroeder/Netron 下载一个软件,看看吧。

基于机器学习(Machine Learning)的图像分类(Image classification)实现

 

 

 2. 代码实战

模型做好了,就该写代码了。代码也不多,很简单滴。

新建一个UWP 程序,在Assets资产文件夹里面,添加刚才下载的ONNX文件(该文件可以随意重命名,也最好Rename一下,不然文件名字太长了),设置它的生成操作为【Content 内容】。

这是你会发现,多了一个.cs类。

基于机器学习(Machine Learning)的图像分类(Image classification)实现

 

 打开Vincent.cs看看啊,没错,又是有点乱。改一下咯

基于机器学习(Machine Learning)的图像分类(Image classification)实现

using System; using System.Collections.Generic; using System.Threading.Tasks; using Windows.Media; using Windows.Storage; using Windows.AI.MachineLearning.Preview; // e6c82f6e-c60f-422a-97b6-e0406cba82da_6ed0259c-001e-4895-be7a-4a930321a307 namespace VincentML { public sealed class ModelInput { public VideoFrame data { get; set; } } public sealed class ModelOutput { public IList<string> classLabel { get; set; } public IDictionary<string, float> loss { get; set; } public ModelOutput() { this.classLabel = new List<string>(); this.loss = new Dictionary<string, float>() { { "Donald Trump", float.NaN }, { "Yinianpeng", float.NaN }, }; } } public sealed class Model { private LearningModelPreview learningModel; public static async Task<Model> CreateModel(StorageFile file) { LearningModelPreview learningModel = await LearningModelPreview.LoadModelFromStorageFileAsync(file); Model model = new Model(); model.learningModel = learningModel; return model; } public async Task<ModelOutput> EvaluateAsync(ModelInput input) { ModelOutput output = new ModelOutput(); LearningModelBindingPreview binding = new LearningModelBindingPreview(learningModel); binding.Bind("data", input.data); binding.Bind("classLabel", output.classLabel); binding.Bind("loss", output.loss); LearningModelEvaluationResultPreview evalResult = await learningModel.EvaluateAsync(binding, string.Empty); return output; } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfjpx.html