Machine Box创始人教你快速建立一个ML图像分类器
AiTechYun
编辑:Yining
Machine Box的创始人Mat Ryer在medium上分享了一篇博文,意在教你在硬盘上快速的建立一个机器学习图像分类器。在这篇博文中,他用到了一个图像分类工具imageclass。
imgclass工具可以让你把一个文件夹装满图片,然后教一个分类器学会如何自动对未来的图像进行分类。它通过创建一个模型并将80%的示例图像发布到Classificationbox中,然后Classificationbox会学习不同类别的图像是什么样子,以及它们的共同特征是什么。剩下的(20%)图像被用来测试模型。然后,开发人员可以使用Classificationbox API来预测它以前从未见过的图像。
- Classificationbox地址:https://machinebox.io/docs/classificationbox?utm_source=matblog&utm_medium=imgclass&utm_campaign=imgclass&utm_term=imgclass&utm_content=imgclass
这个项目是开源的并在Go语言中编写,本文将解释如何使用它。
- 地址:https://github.com/machinebox/toys/tree/master/imgclass
安装
安装imgclass工具:
go get github.com/machinebox/toys/imgclass
如果你没有安装Go,这有一个安装地址:https://golang.org/doc/install
验证它是否安装正确:
$ which imgclass
/path/to/somewhere/bin/imgclass
准备教学数据
创建一个文件夹,并在此文件夹中为每个类创建一个子文件夹。
两个文件夹Gophers和Humans
在每个文件夹中,添加尽可能多的图片示例。通常,你提供的图片越多,你的模型就越好。
如果你想要在不需要收集大量图像数据的情况下使用它,那么你可以使用一个经典的猫与狗例子的样本数据集。本文的其余部分将使用此数据集。
- 猫与狗例子的样本数据集下载地址:http://machinebox.io/samples/images/classification/catsvsdogs.zip
Spin up Classificationbox
Spin-up大意为“磁盘交错启动”,指的是一个硬盘驱动器或光盘驱动器加速了它的磁盘盘片或将光盘从一个停止的状态嵌入到运算的速度的过程。假设你已经安装了Docker,你可以用下面这个单行代码来Spin-up Classificationbox :
- Docker安装:https://machinebox.io/docs/setup/docker?utm_source=matblog&utm_medium=imgclass&utm_campaign=imgclass&utm_term=imgclass&utm_content=imgclass#installing-docker
docker run -p 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/classificationbox
- 如果你需要一个MB_KEY,你可以以下网站中免费获得:
https://machinebox.io/account?utm_source=matblog&utm_medium=imgclass&utm_campaign=imgclass&utm_term=imgclass&utm_content=imgclass
运行之后,到http://localhost:8080,然后你能够看到API文档:
当你在本地运行Classificationbox时,你可以直接从container中访问文档
教学和验证
找到你的类文件夹所在的文件夹,并执行imgclass工具:
你将看到的图片和数量概述并要求确认创建模型
分类器可以更好地使用数量平衡的例子,因此,如果你能做到的话,可以在每个类中都使用相同数量的例子。
一旦创建了模型,就会提示你是否要教一个选择的(80%)图像。点击y和按下回车就会开始这个过程:
imgclass工具会将每个图像放入Classificationbox以便让它学习
教学(Teaching)本质上涉及打开每个图像,将其转换为一个base64字符串,并按要求将其提交到/classificationbox/teach
API终端,就像这样:
POST /classificationbox/teach
{
"inputs": [
{
"type": "image_base64",
"key": "image",
"value": "...base64 data..."
]
}
一旦教学完成,验证过程就会开始。
验证(validate)本质上是保留剩余的图像(20%),并要求Classificationbox来预测它们属于哪个类。如果它做对了,我们就把它当作正确的,否则就错了。
结果显示在终端:
没有任何机器学习模型是100%准确的,但是你可以通过一组好的教学数据来获得一些令人印象深刻的结果——在这种情况下,98%准确!
Machine Box将现有技术的机器学习能力运用到Docker容器中,因此开发者可以很容易地将自然语言处理、面部识别、对象识别等应用到你自己的应用中。它比任何云服务都要便宜,而且你的数据不会离开你的基础设施。
- MySQL传输表空间小结(r12笔记第2天)
- swingbench压测Oracle小记(r12笔记第20天)
- 分享最近对网站外链跳转页面代码的一些改善
- swingbench压测Oracle小记(r12笔记第19天)
- Oracle闪回原理测试(三)(r12笔记第16天)
- 利用JS生成二维码图片,优化WEB性能及页面加载速度
- Go语言的指针 & *
- MySQL中的double write(二)(r12笔记第17天)
- 论Go语言中goroutine的使用
- WordPress发布文章同步到新浪微博失败的问题解决与分享
- 压测工具swingbench和sysbench对比(r12笔记第13天)
- 解决WordPress4.4.1不支持图片暗箱问题,Begin主题适用
- MySQL源码安装总结(r12笔记第12天)
- 全站启用SSL之后,如何兼容不支持https抓取的搜索引擎?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP调用微博接口实现微博登录的方法示例
- Python使用pyexecjs代码案例解析
- PHP抽象类与接口的区别实例详解
- laravel获取不到session的三种解决办法【推荐】
- php封装的pdo数据库操作工具类与用法示例
- 利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
- PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
- Python基于正则表达式实现计算器功能
- python利用os模块编写文件复制功能——copy()函数用法
- 解决python 虚拟环境删除包无法加载的问题
- Laravel框架路由管理简单示例
- php + WebUploader实现图片批量上传功能
- php查询内存信息操作示例
- ThinkPHP3.2框架操作Redis的方法分析
- python实现图像外边界跟踪操作