看图识熊(四)

概述

人工智能已经快要进入应用的高峰期了,但并不需要每个人都学习算法、建模。对于程序员来说,应该先从自己会的方向入手,学习如何应用AI来解决问题,开发应用。

本文将带着大家动手,从头做一个看图识熊的应用,输入一张熊的照片,程序输出这是什么熊。这里不会讲到AI的算法、模型,但会对涉及到的应用有关的概念做些介绍。

文中,我们将使用微软认知服务的必应图像搜索准备训练数据,然后用微软认知服务的定制化视觉服务训练模型,导出模型,最后将模型集成到应用中。

准备数据

机器学习总是离不开数据,没有数据就无法进行训练。

微软认知服务中除了提供了语音、视觉类的服务,还提供了搜索服务,其中就有必应图像搜索服务。

必应图像搜索的在线体验地址是 Bing Image Search API | Microsoft Bing。

输入要搜索图片的关键字,指定需要的图片的参数,右侧就可以预览搜索结果。还可以切换到JSON显示,可以看到返回值是结构化的数据,很容易得到每张图的链接地址。

如果需要大量的数据,可以申请一个密钥,写个简单程序调用必应图片搜索,然后下载图片即可。

本文计划让我们的程序可以识别出棕熊、黑熊、北极熊、熊猫这四种熊,所以需要分别搜索这四种熊的图片,每种熊需要的训练数据不多,5张图片就够了,大家可以手动下载图片。另外,为了防止随便给一张图片就被分类成某种熊,我们还需要一些负例,可以找5张其它动物的图片,作为负例。

这里需要注意一下,在选择训练数据的时候,要注意数据的泛化性。也就是说,选出来的图要尽可能的不一样。比如,不能只选草地上的,也不能只选走路的熊,还得选站着的熊。不然,可能模型会把草地认成熊。

最好是按照文件夹把熊都分好类,这样一会儿训练的时候就比较容易。这个用文件夹分类的过程,其实就是标记数据的过程。我们这次要解决的问题是分类问题,所以,标记起来是非常快的。有些应用标记起来就没那么容易了。比如图片中的目标检测,要对每个目标画一个框,而且要尽量画准。再比如音频的标记,要听录音,然后把文字打出来,甚至需要每个字都写上在什么时候开始、什么时候结束。所以,有了数据、再把人类知识应用到数据上,有时会是很大的工作量。

获取模型

在机器学习应用中,任何情况下都需要一个或大或小的模型。而怎么得到这个模型,往往是其中最复杂的部分。有的时候,在缺少强大计算资源与高性能算法的情况下,我们不一定需要自己从零开始训练模型。我们需要用的一些轮子,已经有人给我们造好了。比如微软提供的定制化视觉服务。

定制化视觉服务简介

定制化视觉服务,相当于在云端提供了一个生成模型的方法,把模型相关的复杂的算法都简化了。同时,它能够让用户自己管理训练数据,定义自己的分类问题。这样在易用、强大之间找到了一个平衡点。

从适用的范围上讲,如果要分类的项在图像中比较突出,则定制化视觉服务可发挥比较好的效果。但是,定制化视觉服务并不适合用于检测细微的差异。例如,检测质量发现产品中的细微裂纹或凹陷。另外,因为这个世界纷繁复杂,能进入人眼的物体和它们的排布、表现方式的组合,几乎是无穷无尽的。定制化视觉服务后面的模型也不能解决所有领域的问题,这样会影响精确性。所以定制化视觉服务既提供了通用模型,又提供了几个特定的领域模型。如果对识别性能要求很高,则需要定制化视觉服务后面的领域模型非常强大才行。

从训练速度上讲,传统的训练模型需要数小时的时间,而定制化视觉服务采用了迁移学习的方法,这种方法可以在已有的预训练模型的基础上,只有需要少量的训练图片和很短的训练时间,就可以训练出针对特定问题的新的模型。有点类似四五岁的小孩子学习新的动物,已经用了四五年的时间对动物的各种特征有了初步了解,也会基本的认知分类,然后再给他一种新的动物的几张图片,他瞬间就能学会如何成功的区分新的动物。

体验定制化视觉服务

下面我们一起动手在线体验一下定制化视觉服务,试着训练模型并导出。

登录定制化视觉服务

定制化视觉服务的官方地址是 Custom Vision - Home,打开网站后,点击SIGN 在。使用该服务需要准备微软账号,也可以直接在定制化视觉服务官方地址上创建。

登录后,界面会提示要求同意一些条约。条约的大致内容就是,个人必须在微软要求的规则下使用微软提供的这项服务。请勾选I 同意

此时,界面会提示注册Azure,因为定制化视觉服务实际上是Azure提供的一项云服务,正式使用这项服务需要有Azure订阅。

不过我们现在只是免费试用,所以选择Continue with trial,如果在根据本文流程做完了一个小应用之后,你觉得确实需要使用这项服务,那么你可以去注册Azure账号,获取Azure订阅。

创建定制化视觉服务项目

点击NEW PROJECT,填写项目信息。填写好Name和Description,这里Name不妨填写为BearClassification。随后选择Classification和General(compact),点击Create。

项目类型一栏,定制化视觉服务提供了分类和目标检测两种服务,这里选择分类项目。

分类 Types一栏,这里使用的图片中,每张图片只有一种熊,这里选择每张图片一个标签的模式。

Domains一栏,可以看到服务提供了多种预定义的场景,可以对特定领域的分类给出更好的结果。但是这里没有专门针对动物的,所以使用通用领域。另外还可以看到有的领域区分带compact标记和不带标记的,本文使用带标记的,即General(compact)领域。

带有compact标记,表明训练后的结果是一个压缩模型。压缩模型,顾名思义,模型占用的空间更少,运行更快,甚至可以放到手机这种移动设备里。当然,会有一个小问题就是精确度会受影响。但是压缩模型也有好处,导出模型后,模型文件的使用是没有任何限制的,而其余的几种场景只能通过调用API来进行预测,当前属于免费试用,有10000次调用上限。

添加数据

点击Add images,选择前面事先准备好的5张黑熊的照片,然后在弹出的Image upload页面中,设置My Tags的值为black bear,然后点击Upload 5 files。

注意,My Tags值不能使用中文,否则后续识别的结果会乱码。

重复以上步骤,依次添加灰熊、北极熊和大熊猫的训练数据,对应的标签是棕熊、北极熊和giant panda。

最后,上传不是熊的图片做为负例,对应的标签可以直接选择Negative。

训练

在添加了所有的数据集和标签之后,点击网页上方的Train,开始训练模型。

大约十秒钟以后,训练就完成了,页面会自动跳转到Performance页面,并显示本次训练的结果。如图所示,这里只训练了一次,左侧只有一个Iteration1,如果有多次训练就会出现多个Iteration,右侧是本次训练得到的模型的一些指标。

Precision准确率和Recall召回率,是两个评估模型好坏的主要指标。简单来说,两个数都是越大越好。但是这两个数据其实很难两全,提高其中一个,必然会降低另一个。

举个例子,欧美的法律很讲证据,是无罪推定。即,不能证明某人有罪,那就判他无罪。所以,被判刑的人,都是证据确凿的。这时,我们说罪犯中实际犯罪的人的比例非常高,但是很多罪犯可能并没被抓起来,所以召回率很低。而电视里看到的特务经常会说,宁可错杀一千,不可放过一个。这是有罪推定。只要有疑点,就抓起来。我们假设这里说的都是真正的罪犯。这时,我们说,罪犯中实际犯罪的人比例可能不高,有不少都是被冤枉的,所以准确率很低。但可以认为罪犯基本上都被抓住了,所以召回率比较高。

在这个项目中,以brown bear为例:Precision准确率,表示在所有被识别为棕熊的图片中真正有棕熊的图片所占的比例;而Recall召回率则是测试结果中正确识别为棕熊的图片占测试集中所有棕熊图片的比例。

测试

定制化视觉服务支持快速的在线测试,点击页面顶部的Predictions进入预测页面,然后点击Quick Test,打开测试页面。输入一张网络图片的地址或上传一张本地图片就可以看到预测结果。

这里,我们上传一张棕熊的图片(图片来源),可以看到这个棕熊能够被正确的识别出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/301712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rk3566 armbian修复usb2.0并挂载U盘

文章目录 usb接口修复一 执行命令二 修改rk3566-panther-x2.dts⽂件三 查看是否识别 U盘格式化、挂载一 U盘格式化1.1 查看U盘1.2 查看U盘文件系统类型1.3 格式化为ext4系统 二 挂载U盘2.1 手动挂载2.2 自动挂载(可选) usb接口修复 一 执行命令 将位于…

1.69寸SPI接口240*280TFT液晶显示模块使用硬件SPI,并提高全屏刷新率的方法探讨

1.69寸SPI接口240*280TFT液晶显示模块,卖家提供了GPIO模拟SPI功能,我移植到了freertos,并点亮了屏幕,接下来是进行硬件SPI的程序修改: 上次还讲到了关于CS管脚的选通信号,再GPIO口的初始化的时候设置为高电…

年度盘点 | 信捷科技2023年的精彩瞬间

岁序更替,华章日新 与你同行的每一天,我们写下了无数回忆 我们一起穿越城市,畅享便捷 看到了“村超”的精彩 聆听了路边音乐节的热闹 见证了贵阳步入轨道交通“线网时代” …… 我们一起携手并进 让每一次出行都成为双向奔赴的可能 …

抖音矩阵系统源码开发

抖音作为一款流行的短视频分享平台,每天吸引着数以亿计的用户,在全球范围内广受欢迎。为了支持如此庞大的用户群体,抖音必须依靠强大的矩阵系统来支撑其稳定的运行。下面将介绍抖音矩阵系统的源码开发。 抖音矩阵系统源码开发主要有以下几个…

振弦采集仪在桥梁结构监测中的应用研究

振弦采集仪在桥梁结构监测中的应用研究 振弦采集仪在桥梁结构监测中的应用研究是指利用振弦采集仪对桥梁结构进行监测和数据采集的研究。振弦采集仪是一种能够实时监测桥梁结构振动情况的设备,通过采集桥梁上的振弦传感器获取振动数据,并将数据传输到监…

vue3+vite +element plus日历date picker中文显示

项目情况 element-plus 默认是英文模式,需要中文模式的话需要设置一下: 项目框架(vue3):vite JS element-plus 版本:(注意版本兼容,element plus 较低版本:1.xx.xx&a…

4.vue学习(21-25)

文章目录 21.天气案例-监视属性引入22.监视属性23.深度监视24 监视的简写25 监视属性对比计算属性 21.天气案例-监视属性引入 效果:点击按钮,切换凉爽为炎热 vscode 开发vue的插件;vue 3 snippets 初步实现方式。计算属性: 案例中的坑&#…

山西电力市场日前价格预测【2024-01-09】

日前价格预测 预测说明: 如上图所示,预测明日(2024-01-09)山西电力市场全天平均日前电价为314.92元/MWh。其中,最高日前电价为593.66元/MWh,预计出现在18:15。最低日前电价为54.95元/MWh,预计出…

SurfaceFlinger的commit/handleTransaction分析

整体背景介绍 hi,粉丝朋友们: 大家好!本节我们来讲解一下SurfaceFlinger主要合成工作的第一个阶段任务commit 一般SurfaceFlinger端的合成工作主要有两个 1.commit 主要就是处理app端发起的一系列transaction的事务请求,需要对这…

uniapp 微信小程序跳转外部链接

一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…

计算机毕业设计-----SSM CRM人事管理系统

项目介绍 CRM人事管理系统,主要功能有: 用户管理:用户查询、添加用户、编辑、删除; 职位管理:职位查询、添加职位、删除; 部门管理:部门查询、添加部门、删除; 员工管理&#xff1…

王者荣耀与元梦之星联名小乔皮肤即将下架!

即将下架!几款皮肤你还不知道的,推荐一起看看! 元梦之星即将下架皮肤;小乔、宝拉、小爱、大魔术师尼克。 小乔截止日期:2024年1.5日23.59正式下架 灵魂歌姬宝拉截止日期:2024年1.11日23.59正式下架 小爱…

Mysql死锁问题Deadlock found when trying to get lock;try restarting transaction

一、问题描述 今天测试在测试环境做压测,发现了一个报错,来找我帮忙看,如下图: 二、问题排查 先去服务器上,看看死锁的日志,找到 mysql 的安装路径,使用如下命令登录 mysql mysql -h 数据库IP…

计算机毕业设计-----ssm知识库管理系统

项目介绍 文件集中上传:系统支持单文件上传以及批量上传,系统支持zip、rar格式的压缩包导入。亮点创新 多格式文件在线预览 用户可以对所有公共文件进行浏览,支持office,pdf格式以及常见图片格式,音频格式&#xff0c…

BOM,JS执行机制等

1.BOM 概述 1.1什么是 BOM BOM( Browser Object Model )即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window. BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。 BOM缺乏标…

基于ssm的孩童收养信息管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本孩童收养信息管理就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

二叉树的深度和高度问题(算法村第八关白银挑战)

二叉树的最大深度 104. 二叉树的最大深度 - 力扣(LeetCode) 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null…

揭开JavaScript数据类型的神秘面纱

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 JavaScript作为一门动态类型语言,其数据类型一直是开发者们关注的话题。本文将深入探讨Jav…

创建K8s节点的虚拟机

1、点击“创建新的虚拟机” 2、选择自定义,点击“下一步” 3、默认,点击“下一步” 4、默认,点击“下一步” 5、默认,点击“下一步” 6、设置虚拟机名称和位置,点击“下一步” 7、点击“下一步” 8、设置2048MB&#x…