C# + .Net6 实现TensorFlow图片分类

2023-05-16

微软官网上发现一篇很有意思的文档:
教程:用于对图像进行分类的 ML.NET 分类模型 - ML.NET | Microsoft Learn

这篇教程写的很学院派,但有点碎,属于上课不能打一秒钟瞌睡的那种。好在还是给出了完整的代码:samples/Program.cs at main · dotnet/samples · GitHub

当然自己尝试前必要的先决条件还是要满足的。

1、用于训练的图片和两个tsv,以及最重要的模型文件要准备好。示例:samples/image-classifier-assets.zip at main · dotnet/samples · GitHub

2、模型文件也可以从这里下载:https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip

3、VS2022中,项目 -> 管理NuGet程序包 -> 浏览,添加如下四个包:

Microsoft.ML
Microsoft.ML.ImageAnalytics
Microsoft.ML.TensorFlow
SciSharp.TensorFlow.Redist

 严格按照教程顺利跑通。本着能偷懒就偷懒的原则,开始对代码进行简化:
1、训练图集和tsv就暂先都直接硬编码了。实践证明如果所有文件在同一个目录下是没问题的:

static readonly string _imagesFolder = @"D:\temp\ForTraining";
static readonly string _trainTagsTsv = @"D:\temp\ForTraining\tags.tsv";
static readonly string _testTagsTsv = @"D:\temp\ForTraining\test-tags.tsv";
static readonly string _inceptionTensorFlowModel = @"D:\temp\ForTraining\tensorflow_inception_graph.pb";

否则按照文档的说法在VS开发环境里还要修改这些文件的复制属性。直接给出绝对路径可规避这个问题。

  1. 在“解决方案资源管理器”中,右键单击资产目录和子目录中的每个文件,再选择“属性”。 

  2. 在“高级”下,将“复制到输出目录”的值更改为“如果较新则复制” 。

2、 Demo里并未给出保存训练好的模型的代码。这意味着每次执行都要重新训练一次,效率比较低。所以稍微优化了一下代码:

public static ITransformer GenerateModel(MLContext mlContext)
{
    // 略
    // ......

    // 保存训练好的模型
    mlContext.Model.Save(model, trainingData.Schema, "model.zip");

    return model;
}

3、图片识别的代码另起了一个项目(原项目中屏蔽掉ClassifySingleImage相关代码),同样要导入那堆NuGet:

        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("请输入预测的图片路径。");
                return;
            }

            string fn = args[0].Trim();
            if (!File.Exists(fn))
            {
                Console.WriteLine("文件不存在。");
                return;
            }

            // Create MLContext to be shared across the model creation workflow objects
            MLContext mlContext = new();

            // 识别模式
            // 训练好的模型文件可复制到指定位置
            DataViewSchema modelSchema;
            // Load trained model
            ITransformer model = mlContext.Model.Load(@"D:\temp\ForTraining\model.zip", out modelSchema);


            // <SnippetCallClassifySingleImage>
            ClassifySingleImage(mlContext, model, fn);
            // </SnippetCallClassifySingleImage>

        }

      public static void ClassifySingleImage(MLContext mlContext, ITransformer model,string _predictSingleImage)
        {
            // 无需修改,略
            // ......
        }

        /// 略

所以,接下来开发一个工具,用来生成tags.tsv和test-tags.tsv。嗯,思路已经有了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# + .Net6 实现TensorFlow图片分类 的相关文章

随机推荐

  • 树莓派:安装WordPress

    之前尝试了在树莓派OS下安装Discuz 成功 xff0c 今天再试下安装WordPress 过程差不多 xff0c 毕竟都是基于LAMP的应用 一 安装操作系统 xff1a 1 刷卡灌系统略 我选择64位的系统 注意自2022 04 04
  • 树莓派:解决4B升级到Bullseye后xrdp不响应的问题

    相较于VNC xff0c 我更喜欢RDP xff0c 因为偷懒更容易 xff0c 在Windows里直接mstsc v IP地址 即可启动远程桌面 所以玩树莓派也一样 xff0c 如果装了桌面版的RPI OS xff0c 那么一定sudo
  • 不忘初心,能偷懒就偷懒:C#操作Word文件

    换了一家公司 xff0c 新单位的信息化建设仍然在路上 OA也正在建设中 xff0c 目前项目发票报销等流程仍然是手工的 xff0c 只能线下填单子 至于是电脑上填好打印出来还是直接空白模板打出来手写倒是不管 xff0c 随意 疫情期间积压
  • Python读写JSON格式数据

    文章目录 JSON格式数据简介使用Python读写JSON格式数据1 读取json文件2 写入json文件 自己编写一个JsonUtils JSON格式数据简介 JSON文件的读写应算成Python基础知识的内容 xff0c 但是由于在编写
  • 银河麒麟初体验

    国产替代及信创看样子是个趋势了 本行业尽管暂未强制 xff0c 但是也被吹风了 xff0c 因此技术储备也要准备起来了 在此大背景及机缘巧合之下 xff0c 接触到了银河麒麟 不吹不黑 xff0c 初体验的感觉就是换壳CentOS 特别申明
  • openEuler@树莓派

    前几天跟华为的销售 售前兄弟探讨国产信创替代 xff0c 话题自然包含了open欧拉操作系统 周末突然又想起这茬儿了 xff0c 就去官网浏览了一下 本想只是随便再进一步了解下 xff0c 没想到居然看到了这个 xff1a 嗯 xff0c
  • 使用树莓派做Apache2 HA实验

    听闻树莓派也已经是个理财产品了 xff0c 默默关闭了某宝网页的我不禁陷入了沉思 xff0c 然后翻出了之前买的一堆3B 话说回来 xff0c 虽然账面上浮盈了 xff0c 但乐不出来 按郭德纲的说法 xff0c 真乐出来这堆树莓派治不好我
  • 真拿树莓派做Linux学习机靠谱不?

    反方辩友 xff1a 不靠谱 xff0c 太贵 干嘛不直接跑个虚拟机 xff1f 我很欣赏一个观点 xff1a 入门的第一奥义是不折腾 就这个方面而言 xff0c 树莓派官方OS确实做的不错 但树莓派的初心毕竟是个学习机 xff0c 跟其他
  • 灌水时间:树莓派4+Lakka做怀旧游戏机

    大力出奇迹 忘了树莓派里还插着TF卡就要想把主板从外壳里取下 xff0c 这把杯具 xff0c TF卡槽都被扯了下来 xff0c 这块理财产品瞬间就失去了投资属性 xff0c 变成了自用的 产品 好在使用价值还在 xff0c USB启动不影
  • 树莓派4:安装 .NET 6 SDK 并测试连接 MSSQL SERVER(无 mono)

    本文基于 2022 09 06 raspios bullseye arm64 首先安装操作系统 xff0c 推荐再 修改国内源 并sudo apt y update amp amp sudo apt y upgrade 如果喜欢在windo
  • 使用树莓派学习PostgreSQL

    知乎上刷到一个口水仗 xff0c 大意是mysql和postgresql哪个好 这种问题 xff0c 正如Java和C 哪个好之类的 xff0c 我一向都是当八卦浏览的 xff0c 只看不参与 xff0c 又不是豆花该吃甜还是该吃咸这种原则
  • 使用树莓派学习PostgreSQL(二):通过MSSQL Linked Server导入数据

    作为曾经呆过证券公司营业部的从业未遂人员 xff0c 兼十年老韭菜 xff0c 对我大A还是有蜜汁感情的 看着树莓派里空空荡荡的PGSQL xff0c 突发奇想 xff0c 尝试把今天的A股数据导进来 xff1f 之前写过一个基于MSSQL
  • 试图在WinPE下用cmd.exe调包sethc.exe/utilman.exe/osk.exe来重置管理员密码,但是无法调出命令行

    忘记windows密码 xff0c 最简单的办法就是使用自带账号工具的第三方winpe xff0c 直接重置密码完事儿 xff08 但如果有基于该账号加密的东西那就回不来了 xff09 xff1b 如果手头没有这样的pe盘也没关系 xff0
  • 树莓派:在VSCode中使用C#开发.Net软件(console)

    树莓派官方桌面系统支持VSCode xff0c 我们也可以在树莓派上使用C 开发 Net软件 本文作为一个笔记简单记录 1 安装VSCode xff1a 首先打开首选项中的Recommended Software xff0c 找到Progr
  • Debian DNS完整配置

    DNS服务 执行下面的命令安装 apt install y bind9 dnsutils 这些文件分别对应的作用如下 xff1a db 127 反向区域数据库 xff0c 用于将ip解析为对应的域名 db local 正向区域数据库 xff
  • 树莓派4B:跑通Paddle-Lite-Demo

    上周跟以前单位的大神见面 xff0c 期间大神聊到了百度飞桨框架 xff0c 并建议我看看能不能做点什么有意思的东西跑在树莓派上 大神就是大神 xff0c AI是我等学渣也配玩的吗 不过既然大神都这么推荐了那就尝试一下 xff0c 大不了从
  • 在NUC8上折腾安装Windows Server 2019

    整理我的吃灰物资时意外发现还有个八代的NUC迷你主机 想着现在内存和SSD都不贵 xff0c 干脆升级了然后装个Windows Server 2019玩玩 xff0c 跑个Hyper V做些实验 于是买了2根16G 2400的内存和1条1T
  • Ubuntu上跑通PaddleOCR

    书接上文 刚才说到我已经在NUC8里灌上了Windows Server 2019 接下来也顺利的启用了Hyper V角色并装好了一台Ubuntu 22 04 LTS 的虚机 由于自从上回在树莓派上跑通了Paddle Lite Demo之后想
  • 树莓派4:跑通Tensorflow的Sequential模型用于图片分类

    重要提示 xff1a 由于树莓派相对孱弱的性能 xff0c 直接在其上训练模型可能花 xff08 lang4 xff09 费非常长的时间 本文仅作为示例性的可行性参考 xff0c 请酌情考虑实验平台 著名的Tensorflow框架也可以运行
  • C# + .Net6 实现TensorFlow图片分类

    微软官网上发现一篇很有意思的文档 xff1a 教程 xff1a 用于对图像进行分类的 ML NET 分类模型 ML NET Microsoft Learn 这篇教程写的很学院派 xff0c 但有点碎 xff0c 属于上课不能打一秒钟瞌睡的那