看图识熊(四)

news2024/9/21 20:42:50

概述

人工智能已经快要进入应用的高峰期了,但并不需要每个人都学习算法、建模。对于程序员来说,应该先从自己会的方向入手,学习如何应用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,打开测试页面。输入一张网络图片的地址或上传一张本地图片就可以看到预测结果。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch数据并行(DP/DDP)浅析

一直以来都是用的单机单卡训练模型,虽然很多情况下已经足够了,但总有一些情况得上分布式训练: 模型大到一张卡放不下;单张卡batch size不敢设太大,训练速度慢;当你有好几张卡,不想浪费&#xf…

校园跑腿小程序(前后端已完成)可做项目,可当毕设,支持二创

此小程序为我单独在小程序上运行的结果,图片信息、列表信息等没有出现是因为服务器到期了,资源被释放了,无法显示。但是后端是已经实现了的,有兴趣的同学可以私聊我。 效果预览

软件系统设计开发规程

软件设计开发规程目的在于为需求设计、开发、实现解决方案。根据适当情况,解决方案、设计和实现包括单独的产品、产品组件以及产品相关的生命周期的过程,或者它们的组合,以及包括如何利用准则进行接口设计。 技术解决方案过程包括&#xff1a…

工作组,本地用户,资源共享--windows sever 2012 r2

1.建立2个用户:stu1,stu2,stu2第一次登陆必须修改密码 2.建立2个用户:zhangsan,lisi 3.删除stu1 4.修改zhangsan的密码为111111 5.修改lisi的名字为wangwu 6.修改wangwu的密码为222222 7.禁用王五的账号 8.建立2个组:class1,class…

Docker Compose--部署SpringBoot项目--实战

原文网址:Docker Compose--部署SpringBoot项目--实战-CSDN博客 简介 本文用实战介绍Docker Compose部署SpringBoot项目。 ----------------------------------------------------------------------------------------------- 分享Java真实高频面试题&#xff0c…

VMware Workstation——安装VMware Workstation Pro 17

目录 一、下载 二、安装 1、双击安装 2、安装向导 3、最终用户许可协议 4、自定义安装 5、用户体验设置 6、快捷方式 7、准备升级 8、正在安装 9、安装完成 10、输入许可证密钥 11、激活成功 12、桌面图标 一、下载 下载 VMware Workstation Pro 二、安装 1、双…

中电金信推出行业首个外汇客户风险管理系统,助力金融机构稳中提效

中电金信基于多年的行业积累洞察、和对金融机构的访谈调研发现,《办法》推出前,部分银行缺乏内控系统,只能手工判断客户是否符合便利化办理条件,并需要企业提供资料,同时缺乏交易风险审查,事后抽查存在不愿…

互联网加竞赛 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

Docker极限压缩tar镜像,20G变10G

🎈普通打包命令: docker save -o [压缩包名字] [镜像名字] 👑极限压缩命令: docker save [镜像名字] | gzip> [压缩包名字] 先上主题,放上两条命令,请随意取用。 对于动态修改的环境,一…

UR机器人旋转矢量和俯仰角的转换

我们在使用机器人的时候,总是习惯使用俯仰角来描述机器人末端姿态的变换。这样更直观,但是机器人为了插值方便计算,总是采用旋转矢量来来描述机器人的姿态。该旋转矢量及不直观,单一轴角度旋转时还可以理解,当两个轴或…

vue3中使用elementplus中的el-tree-select,自定义显示名称label

<el-tree-select v-model"addPval" node-key"id" :data"menulists" :render-after-expand"false" :props"menuProps" /> <el-divider />let menuProps {//自定义labellabel: (data: { name: any; }) > {ret…

c语言的一些题(2024_1_7)

变种水仙花数 #include <stdio.h>int main() {int a 10000;for (; a < 100000; a){if ((a / 10000) * (a % 10000) (a / 1000) * (a % 1000) (a / 100) * (a % 100) (a / 10) * (a % 10) a)printf("%d ", a);}return 0; } //变种水仙花数 - Lily Num…

第12课 实现桌面与摄像头叠加

在上一节&#xff0c;我们实现了桌面捕获功能&#xff0c;并成功把桌面图像和麦克风声音发送给对方。在实际应用中&#xff0c;有时候会需要把桌面与摄像头图像叠加在一起发送&#xff0c;这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo11并修改demo11为demo12…

部署可道云网盘的一个漏洞解决

目录 1漏洞展示 2.防范措施 1漏洞展示 因为可道云网盘的上传文档有保存在 /data/Group/public/home/文档/ 中,当别有用心之人知道个人部署的域名与上次的文件后&#xff0c;可以进行访问拿到uid。例我在我部署的网盘上上次一个aa.php 文件&#xff0c;然后拿来演示 然后通过…

听GPT 讲Rust源代码--compiler(37)

File: rust/compiler/rustc_expand/src/errors.rs 在Rust编译器的源代码中&#xff0c;rust/compiler/rustc_expand/src/errors.rs文件的作用是定义了各种错误类型和帮助信息&#xff0c;这些错误和帮助信息用于扩展宏时的错误处理和用户提示。 下面对每个struct进行一一介绍&a…

【产品人卫朋】硬件产品经理:从入门到精通

目录 本文目录 1. 前言说明 2. 内容说明 3. 资料包说明 作者简介 本文目录 1. 前言说明 2. 内容说明 3. 资料包说明 1. 前言说明 本篇内容节选自实体书《硬件产品经理&#xff1a;从入门到精通》。 2. 内容说明 鉴于硬件产品的特殊性&#xff0c;不同产品阶段的时间间…

开源内容管理框架Drupal在Docker本地部署并实现公网远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java研学-Cookie与Session

一 会话跟踪 1 HTTP 无状态 HTTP 协议是无状态的&#xff0c;一问一答没有记忆&#xff0c;无法确定发出请求的用户身份。即各个请求的请求对象所包含的信息并不相同&#xff0c;一个会话中的多个请求之间无法共享数据&#xff0c;此时可以使用会话跟踪技术 2 会话跟踪技术 C…

用Java爬取新房二手房数据看总体大环境

都说现在房市惨淡&#xff0c;导致很多人在观望&#xff0c;那么今天我写一段爬虫&#xff0c;主要是抓取各地新房以及二手房成交状况&#xff0c;然后了解总体楼市是否回暖上升。 以下是Java爬虫程序的代码示例&#xff0c;用于抓取贝壳网新房和二手房数据&#xff1a; impor…

并发(11)

目录 71.ConcurrentHashMap JDK1.7说说其put的机制&#xff1f; 72.ConcurrentHashMap JDK1.7是如何扩容的&#xff1f; 73.ConcurrentHashMap JDK1.8实现的原理是什么&#xff1f; 74.ConcurrentHashMap JDK1.8是如何扩容的&#xff1f; 75.ConcurrentHashMap JDK1.8链…