9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

利用 Amazon SageMaker 快速构建一个基于深度学习端到端的图像分类器

  • 2019-10-29
  • 本文字数:3273 字

    阅读完需:约 11 分钟

利用 Amazon SageMaker 快速构建一个基于深度学习端到端的图像分类器

基于深度学习 (Deep Learning) 的图像分类的研究与应用已经进行的如火如荼,对大部分的业务场景来说,更是有着深刻的现实意义 – 基于图片的互联网分享社交应用,如何借助 Deep Learning 在第一时间对用户分享的图片进行实时监测,分类是一个比较典型的应用场景;又例如,电商运营可能希望对所有的产品照片按照产品属性进行自动化分类,减少人工分类的工作;另外,在工业生产线的良品率基于产品图片的自动筛检,以及辅助医疗领域对病理图片的分类等等场景都有着十分广泛的应用前景和实用价值。


当然,利用神经网络 (Neural Networks)构建的深度学习,因为其非线性的特性以及堆叠网络架构使其具备了数以百万计的模型参数在图片分类利用越来越成熟。但是,对于不具备深度学习研发能力的用户,从零构建这样的应用无疑是一种挑战。Amazon SageMaker 是一个完全托管的机器学习服务,它使一般的开发人员和数据科学家可以快速轻松地构建以任何规模的机器学习训练任务,并且提供基于 API 的端到端的模型部署方案以及 10 多类 Amazon 自带的典型算法,让用户无障碍地轻松构建各种典型的机器学习应用。


好了,我们今天给大家准备了一个有趣的任务 – 构建一个猫狗图片的分类器。

一. 所需材料

  1. AWS Account , 如果你还没有的话,请花两分钟时间注册一下。

  2. 一台电脑 – 操作系统不限。

  3. 一杯茶或者咖啡

二. 进一步细化我们的任务

我们希望对应的图片分类器可以达到 90%以上的准确度来区分猫和狗的图片(图片不限但是建议以猫和狗作为图片的要素)。 另外,我们希望这个分类的系统可以直接接受 API 的调用,做到线上部署,并且,随着这个模型后续进一步的优化,新的模型可以用来优化线上分类的结果。


嗯!是的,上面也是典型的线上图片分类或者判断系统的基本实现要素。 要不,我们先看看两张图片如何?



Result: label – dog, probability – 0.9999990463256836



Result: label – cat, probability – 0.9972941279411316


很显然,如果可以真确的区分例如上图中的“喵星人”和“汪星人”,我们这个分类器的效果应该值得期待。


Amazon SageMaker 针对图片分类这种监督学习的场景,构建了一个自带的 Image Classification 算法。算法的实现是基于 ResNet 的典型深度神经网络结构进行封装,用户主需要按照格式准备好训练数据并配置对应的训练参数 (Hyper Parameter),就可以进行直接的模型训练。另外,从零开始训练模型,不仅意味着用户需要做图片数据的收集(训练数据的多少直接决定训练精度),而且需要一定的时间与训练成本。因此,Image Classification 算法本身提供了基于ImageNet 数据集 的训练模型,用户可以直接在此基础上利用 Transfer Learning 对模型进行微调 (fine-tune) 来达到较少的数据集而实现比较高的训练精度 (transfer learning)。

三. 操作步骤

首先,对训练的数据进行预处理。

为了使训练数据更加高效,Image Classification 支持 MXNet 的 RecordIO数据格式。同时,MXNet 社区也提供了一个很好的图片转换工具 im2rec.py 进行快速图像转换。具体的数据集与转换过程可以参考这里(感谢 yaricom 的贡献)。 需要指出的是,因为数据集是在美国,可以直接利用美国的 AWS EC2 计算实例下载到 EC2 本地,进行必要的 Record 格式转换之后,上传到美东地区 (Virginia Region) AWS 的 S3 桶中。 在具体的格式转换中,您也可以直接利用这个 EC2(启动 AWS Deep Learning AMI – AMI 中已经预装了 MXNet 等 Deep Learning 框架和工具)主要利用的是 MXNet im2rec.py 工具生成 list 和 record 文件,并且按照 validation 的数据和 training 数据的比例进行自动的数据拆分。 具体命令如下图,首先生成标签为 0 和 1 的 list 文件(Cat – 0, Dog – 1) 。之后,按照 48 个并发线程的方式进行 record 格式转换,并存在定义的目录内。



有了上面的数据,我们可以直接上传到 S3 数据桶中为 SageMaker 的训练做准备。下图马赛克部分是你的 S3 桶名


在准备好数据之后,我们可以进入 AWS 的控制台并找到 SageMaker 服务。

点击进入:



进入 SageMaker 的控制台之后,按照文档步骤直接启动一个 Notebook Instance. 顾名思义,Notebook Instance 是 SageMaker 的 Notebook 的运行实例,上面预装有对应的 Jupyter Notebook 环境,并且集成了多种的机器学习环境 – Python, MXNet, Tensorflow 等等。



之后,我们在 Notebook Instance 启动完毕时,直接在 Notebook 上面点击对应的 “Open” 就可以启动 Jupyter Notebook 运行环境。


好了,最后就是 Notebook 的实际运行的代码部分

我们创建一个 conda-mxnet_p36 的文件。 具体的代码实例如下


  • 利用 SageMaker 的 Image Classification 的容器来实现具体的训练算法 – 其中 bucket 是你在之前准备好的训练数据的 S3 桶。Role 用来指定你在启动 Notebook Instance 过程中所指定的 AWS Role,用于指定对应的权限。具体的配置过程可以参考 AWS 官方文档, 必要的 S3,CloudWatch Logs 以及 SageMaker 服务的权限都是需要的。



  • 接着,我们配置对应的网络结构 (ResNet 的层数),训练图片的数据(图像转换中我们使用了 32*32 的像素,你可以选择更高像素来提高训练精度)像素和个数,以及分类的个数(我们这里只有猫和狗的 2 个分类),训练的 Hyber Parameter 例如 – batch 的大小,learning rate 以及非常重要的,我们需要指定使用 Image Classification 算法自带的模型进行 fine-tune。



  • 之后,我们进行必要的 SageMaker API 的创建,构建对应的训练任务 – 其中有指定训练的输入与输出(主要是训练之后得到的模型数据),训练的计算实例配置(这里,我们使用的是 ml.p2.xlarge GPU 实例)



  • 到这里,我们就可以直接调用 SageMaker API 来启动训练任务。需要注意的是,我们只是用一个简单的 API- sagemaker.create_training_job 并且根据第三步中的参数配置,就直接可以进行轻松的训练了! 中间没有任何的环境构建,部署,甚至是神经网络模型设计的过程。



整个训练的过程大概持续 15 分钟,具体的训练准确度可以参考 CloudWatch Logs,并且训练结束之后,我们在 S3 的 Output 目录中得到了训练好的模型数据,这样,我们可以直接进行线上的部署工作了。


  • 下载模型数据,并且配置具体的部署设置。下面代码中我们使用了 ml.m4.xlarge 计算实例进行线上部署的应用。这个计算实例是用来做线上预测的,可以直接接受来自客户端的 Restful API 请求,预测服务支持自动伸缩 (Auto Scaling)。




  • 下面我们调用 SageMaker 的 API 实现线上预测服务 (Inference Service)的部署。是不是很方便?只要一个 API 实现了直接的模型部署。SageMaker 也支持基于权重的多模型部署,用于实际的生产环境测试。



  • 好了,我们来测试一下吧



我在网上找了一个 puppy 的照片并且利用上的代码在 notebook 里面显示:



利用下面的代码直接给 SageMaker 发送判断的请求,准确率是 0.99 。效果很不错,建议多测试一下其他的图片



最后,因为上述的训练数据的准备,我们只是选择了 32*32 的图片输入,显然数据压缩率很高,并且有大部分的数据信息的丢失。如果你发现测试的效果不满意,建议增加图片输入的像素 (im2rec.py 的转换阶段)。


好了,开始你的深度学习之旅吧。

参考资料


作者介绍:


肖凌


肖凌是亚马逊AWS解决方案架构师团队经理,负责基于AWS的云计算方案的咨询与架构设计,同时致力于AWS云服务在国内和全球的应用和推广。在大规模并发后台架构,跨境电商应用,社交媒体分享、程序化广告平台设计以及数据仓库应用等领域有着广泛的设计与实践经验。对基于Spark的大数据与机器学习,深度学习框架和应用等有浓厚的兴趣和热情。在加入AWS之前曾长期从事移动端嵌入式系统与服务端开发,并曾负责IBM亚太地区企业级高端存储产品支持技术团队,对基于企业的存储应用的高可用架构与方案有深入研究。
复制代码


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/how-to-build-a-sub-map-tool-at-home/


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2019-10-29 08:00728

评论

发布
暂无评论
发现更多内容

极客时间运维进阶训练营第五周作业

独钓寒江

云视频会议哪家强?华为云会议更专业“会”更好!

i生活i科技

Linux vi/vim

向阳逐梦

vim教程 11月月更 Linux指令

华为云大数据BI 解决方案的超高性价比

IT科技苏辞

透过现象看本质,HuntingNFT缘何具备成为爆款链游的潜力?

EOSdreamer111

适用场景全新升级!扩展 Dragonfly2 作为分布式缓存系统架构 | 龙蜥技术

OpenAnolis小助手

开源 架构 分布式 龙蜥技术 dragonfly2

华为云大数据平台,助力企业数字化转型成效明显

爱尚科技

做电商的看过来,华为云大数据BI方案驱动业务增长

科技怪授

W3C白皮书之小程序技术标准

FinFish

小程序 W3C 小程序化 miniapps

mysql与redis的选型问题实践

苏格拉格拉

MySQL 数据库 持久化 redis'

Flare Network,跨越互操作性三难困境

股市老人

性能测试知识科普(七):监控能给你带来什么

老张

性能测试 监控指标

关于部署策略的遐思

在天涯的海角

Python 操作BeautifulSoup4(爬取网页信息)

度假的小鱼

正则 11月月更 Python BeautifulSoup4

华为云大数据轻量级解决方案,让数据“慧”说话

科技怪授

支持向量机-二分类SVC中的样本不均衡问题:重要参数class_weight

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

三分钟了解client-go

穿过生命散发芬芳

Client-go 11月月更

2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A[0] = 0, B[0] = 1,表示0到1有双向道路 A[1] = 1, B[1]

福大大架构师每日一题

算法 rust 福大大

一文熟悉 Go 函数

陈明勇

Go golang 闭包 函数 11月月更

从传统数据治理转向主动数据治理!

用友BIP

【SpringBoot】配置文件的加载与属性值的绑定

石臻臻的杂货铺

springboot 11月月更

挖掘数据价值,华为云大数据BI解决方案有绝招

科技怪授

华为云大数据,帮助企业搭好数据底座

IT科技苏辞

python任务调度利器-APScheduler

AIWeker

Python 任务调度 11月月更

Gradle入门了解

派大星

Gradle

亚马逊云科技云从业者加速训练营上线啦!

亚马逊云科技 (Amazon Web Services)

培训与认证

华为云大数据BI解决方案助力“智能智造”

爱尚科技

富士康智能制造加速营:解决行业当下问题,创造核心技术价值

B Impact

以原子化服务为基石,面向三大场景打造鸿蒙软硬协同新体验

最新动态

【web 开发基础】PHP的匿名函数和闭包 (40)

迷彩

闭包 closure web开发基础 匿名函数 11月月更

C++学习---类型萃取---is_pointer && is_lvalue_reference/is_rvalue_reference

桑榆

C++ STL 11月月更

  • 扫码添加小助手
    领取最新资料包
利用 Amazon SageMaker 快速构建一个基于深度学习端到端的图像分类器_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章