提起AI,大家都会先想到Python,确实Python作为一门好几十年的老语言,上一波的AI大流行使它焕发了青春。大家用Phtyon来做AI,最主要的原因无非就是编码量更少,很多数学和AI相关的Api都是现成的。但是随着ML.net的问世,我们现在可以在.netcore平台上使用比Python更少的代码来实现AI的功能了。

ML是Machine Learning的缩写,从命名上可以看出微软对于对于AI的现状还是有非常清醒的认识的。目前我们所有声称的人工智能其实只是机器学习,离真正意义上的人工智能还差的很远。这也是为什么,AI这个概念几乎每十年就火一次,然后陷入沉寂,因为我们在算法上其实始终没有突破,只是硬件比以前强大了,算的比以前快了而已。

上一波的AI创业大军已经纷纷倒下了,这也使我们认识到目前AI的水平是很难独立支撑一块完整的创新业务的,但是作为已有系统的补充,作为数据分析的工具,AI还是很有用的,尤其是在图像识别,语义分析,数值预测等已有成熟算法的领域。

读到这里是不是以为这篇文章是喷概念的?必须不是啊,干货来了:

ML.Net主要特点:

跨平台,开源,使用简单,支持Tensorflow等扩展

一、 使用ML.Net的图形化工具生成机器学习代码

目前的Visual Studio 2019已经包含了ML.Net的图形化工具,只不过还是预览版,需要你手动开启,首先在Visual Studio Installer里安装的功能中勾选ML.Net

然后在visual studio的 工具->选项中,选择展示预览功能

从这里我们也可以看出,微软已经计划在后续的visual studio中将ML.NET作为默认工具集成进来了。

安装完毕之后,随便建一个.netcore的项目,控制台的就可以。右键点击添加就会看到ML.NET的选项,

点击之后会有图形界面,然你从几种常见的需求中选择,比如语义识别,图像识别,数值预测等,后续它还会支持图片中物体识别等更复杂的需求。整个过程非常直观,按照它的界面一步一步走就可以,它最终会帮你训练模型并生成使用模型和再次训练模型的代码。

二、 手动引用Nuget包进行开发

在已有项目中手动添加AI的支持,只需要从Nuget上手动引用Microsoft.ML包,以及其他任务相关的包,如果需要使用tensorflow训练的模型,则需要引用SciSharp.TensorFlow.Redist包。训练和使用模型的代码都比较简单,根据机器学习的类型不同,少则10几行,多则几十行代码就可以完成训练的编码。

三、 实战演示

公司内部已有app需要增加一些额外功能,用户用手机截图上传的时候,系统需要判断图片有没有最上方的状态栏。由于手机本身系统的不同,再加上安卓手机状态栏基本上都能自定义,所以状态栏的样式是五花八门的,传统方式很难实现这个需求。最终我们使用WTM+ML.NET快速搭建了一个AI图片分类的平台,这个平台的功能包括:

  1. 可维护多种图片识别的任务。虽然目前的需求只有状态栏识别这一个,但是系统应该支持多种图片任务。
  2. 每种任务可以自定义具体分类
  3. 每种任务可以指定不同的图片预处理操作,比如状态栏识别这个任务应该在训练和识别之前对原始图片进行裁剪,只判断上方80像素高的区域。
  4. 提供后台界面允许管理人员对数据进行标注
  5. 允许在线增量训练
  6. 提供对外API接口,使其他系统可以使用该api来进行图片识别的工作
  7. 其他通用模块,如日志,用户,权限等

以上的需求我们用了不到一个工作日,使用WTM+ML.NET就快速实现了,当然准备初次训练所需的图片用了两周的时间。最终我们使用了七千多张带状态栏的图片,和两千多张不带状态栏的图片训练完成了这个模型,准确率可以达到95%。后续通过人工标注和增量训练这个准确度还可以提高。

这个系统目前已经上线,为一个40万日活的App提供图片识别服务,表现相当稳定。

Talk is cheep, show me the code?

没问题,欢迎来我们在CSDN上的课程 https://edu.csdn.net/course/detail/27568 , 或者在csdn里搜索WTM找到我们的视频教程。里面有完整的从0开始开发上述系统的视频讲解,并有完整的源代码。 源码不是公司的哦,公司用的Layui,我又用VUE重新写了一遍。 用了WTM,这都不是事儿,快得很。

人工智能?.netcore一样胜任!的更多相关文章

  1. Python3 与 NetCore 基础语法对比(就当Python和C#基础的普及吧)

    Jupyter排版:https://www.cnblogs.com/dotnetcrazy/p/9102030.html 汇总系列:https://www.cnblogs.com/dunitian/p ...

  2. 谷歌AI中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...

  3. 谷歌 AI 中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...

  4. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖

    在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...

  5. DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战

    大家好,先自我介绍一下,我是王睿.之前在Facebook/Instagram担任AI技术负责人,现在DataPipeline任Head of AI,负责研发企业级业务异常检测产品,旨在帮助企业一站式解 ...

  6. .NetCore MVC中的路由(2)在路由中使用约束

    p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; orphans: 2; widows: 2 ...

  7. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  8. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  9. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

随机推荐

  1. Java编程资料

    Java相关免费编程书籍推荐(都是PDF版) 编程进阶 2017年9月11日 IDE IntelliJ IDEA 简体中文专题教程 https://github.com/judasn/IntelliJ ...

  2. NuGet 应用指南

     一.前言 在产品开发过程中,一点有很多类库:这么多类库大家是如何管理的呢,TFS.SVN.Github……?在开发人员使用对应类库是否存在类库引用路径不一致.版本不一致问题.依赖类库版本不对应等一些 ...

  3. Windows下的Linux系统

    强调!!!必须是Windows专业版!!! 一.安装运行过程 第一步:打开开发人员模式 第二步:进入 '控制面板 '--'程序'--'启用的Windows功能'--勾选Linux子系统(根据提示进行重 ...

  4. Redis的持久化——RDB和AOF

    推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档

  5. pandas | 使用pandas进行数据处理——DataFrame篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构--DataFrame. 上一篇文章当中我们介绍了 ...

  6. day05总结

    """ echo  "了不起的 [陈少] " 输出结果:   了不起的陈少! ! ! """ ""& ...

  7. JVM 专题二十一:垃圾回收(五)垃圾回收器 (二)

    3. 回收器 3.1 Serial回收器:串行回收 3.1.1 概述 Serial收集器是最基本.历史最悠久的垃圾收集器了.JDK1.3之前回收新生代唯一的选择. Serial收集器作为Hotspot ...

  8. MYSQL 之 JDBC(十): JDBC的元数据

    可以从Connection对象中获得有关数据库管理系统的各种信息 获取这些信息的方法都是在DatabaseMetaData类中. DatabaseMetaData:描述数据库的元数据对象 Result ...

  9. EM算法的收敛性

    https://blog.csdn.net/kevinoop/article/details/80522477

  10. 数据可视化之分析篇(二)Power BI 数据分析:客户购买频次分布

    https://zhuanlan.zhihu.com/p/100070260 商业数据分析通常都可以简化为对数据进行筛选.分组.汇总的过程,本文通过一个实例来看看PowerBI是如何快速完成整个过程的 ...