如何一步让你图像分类达到90%以上精准度

  • 时间:
  • 浏览:
  • 来源:互联网

这段时间一直在做图像分类相关的项目,也认识了很多这个领域的小伙伴们,有不少小伙伴们都是刚接触图像分类,对着各种个样的图像分类算法:AlexNet、VGG-16、VGG-19、ResNet…都是一脸茫然,到底针对我的图像分类项目,选哪个算法好呢,同时又能保证我的算法精准度呢?

今天就给大家分享,如何简单一步让你图像分类达到90%以上精准度,那就是使用百度EasyDL。

官方参考链接: 百度EasyDL图像分类介绍.

EasyDL简介

EasyDL是百度大脑推出的零门槛AI开发平台,面向各行各业有定制AI需求、零算法基础或者追求高效率开发AI的企业用户。支持包括数据管理与数据标注、模型训练、模型部署的一站式AI开发流程,原始图片、文本、音频、视频等数据,经过EasyDL加工、学习、部署,可通过公有云API调用,或部署在本地服务器、小型设备、软硬一体方案的专项适配硬件上,通过SDK或API进一步集成。

EasyDL优势——零门槛一站式AI服务

我觉得EasyDL最重要的优势就是非常友好,几乎对于刚入门图像分类的小伙伴们是零门槛。

EasyDL提供围绕AI服务开发的端到端的一站式AI开发和部署平台,包括数据上传、数据标注、训练任务配置及调参、模型效果评估、模型部署。平台设计简约,极易理解,最快5分钟即可上手,10分钟完成模型训练。

使用流程

让我们来看下百度大脑是如何让我们迅速建立高精准度的图像分类模型吧!
流程具体有4个简单步骤:
百度EasyDL使用流程

数据准备

创建图像分类数据集

首先想好分类如何设计,每个分类为你希望识别出的一种结果,如要识别水果,则可以以“apple”、“pear”等分别作为一个分类;如果是审核的场景判断合规性,可以以“qualified”、“unqualified”设计为两类,或者“qualified”、“unqualified1”、“unqualified2”、“unqualified3”……设计为多类。

注意:目前单个模型的分类上限为1000类

准备数据
基于设计好的分类准备图片:

  • 每个分类需要准备20张以上
  • 如果想要较好的效果,建议每个分类准备不少于100张图片
  • 如果不同分类的图片具有相似性,需要增加更多图片
  • 一个模型的图片总量限制10万张

图片格式要求:

  • 目前支持图片类型为png、jpg、bmp、jpeg,图片大小限制在4M以内
  • 图片长宽比在3:1以内,其中最长边小于4096px,最短边大于30px

图片内容要求:
1、训练图片和实际场景要识别的图片拍摄环境一致,举例:如果实际要识别的图片是摄像头俯拍的,那训练图片就不能用网上下载的目标正面图片
2、每个分类的图片需要覆盖实际场景里面的可能性,如拍照角度、光线明暗的变化,训练集覆盖的场景越多,模型的泛化能力越强

如果训练图片场景无法全部覆盖实际场景要识别的图片:1)如果要识别的主体在图片中占比较大,模型本身的泛化能力可以保证模型的效果不受很大影响;2)如果识别的主体在图片中占比较小,且实际环境很复杂无法覆盖全部的场景,建议用物体检测的模型来解决问题(物体检测可以支持将要识别的主体从训练图片中框出的方式来标注,所以能适应更泛化的场景和环境)。

EasyData数据服务中上传数据集

大家可以按以下流程上传数据集

  1. 创建数据集

创建数据集

  1. 导入数据集

导入数据集
导入数据
就这样简单几步就导入了训练集了,导入后,可以在EasyData数据服务中对导入的训练集进行数据质检报告、数据标注、数据清洗等操作,这点百度为大家考虑得还是很周到的,基本就是算法都集成到了系统里面,可以傻瓜化操作。*PS:*小伙伴们还可以使用这些功能,对自己对训练集数据清洗处理后再导出哦。

图像分类创建模型

数据集准备好后,就可以在模型中心,直接创立训练模型开始训练了。
不过目前单个用户在每种类型的模型下最多可创建10个模型,每个模型均支持多次训练。
图像分类创建模型

训练模型

选择训练方式

百度给大家准备了两种训练方式:可分别选择「公有云API」、「EasyEdge本地部署」进行训练。
训练模型
而且可以根据自己需求,选择训练的算法类型:
不同的部署方式下,可以选择不同的算法。每个算法旁边有一个小问号,可以查看详细说明。
例如:选择「公有云API」后,可以在「高精度」、「高性能」、「AutoDL Transfer」3种算法中选择。鼠标移动到「AutoDL Transfer」右侧的问号上,可以看到对AutoDL算法的详细说明。
通常,高精度模型在识别准确率上表现较好,但在识别速度上表现较弱。高性能模型反之。

添加数据集

下一步就是添加在EasyData数据服务中上传的数据集了。
先选择数据集,再按分类选择数据集里的图片,可从多个数据集选择图片
训练时间与数据量大小有关,1000张图片可以在30min内训练完成。
Tips:

  • 如只有1个分类需要识别,或者实际业务场景所要识别的图片内容不可控,可以在训练前勾选"增加识别结果为[其他]的默认分类"。勾选后,模型会将与训练集无关的图片识别为"其他"
  • 如果同一个分类的数据分散在不同的数据集里,可以在训练时同时从这些数据集里选择分类,模型训练时会合并分类名称相同的图片

训练模型

点击「开始训练」,训练模型。

  • 训练时间与数据量大小有关,1000张图片可以在30min内训练完成。
  • 模型训练过程中,可以设置训练完成的短信提醒并离开页面。

模型效果评估

可通过模型评估报告或模型校验了解模型效果:

  • 模型评估报告:训练完成后,可以在【我的模型】列表中看到模型效果,以及详细的模型评估报告。
  • 模型在线校验:可以在左侧导航中找到【校验模型】,在线校验模型效果。校验功能示意图:

整体评估
详细评估
定位易混淆分类
易混淆分类示例图
总之,百度的图像分类模型效果评估,还是非常强大的,基本可以确认好下一步训练集的收集处理方向,便于更高地提高精度。PS:刚入门的小伙伴们也可以运用好这个功能,为自己训练集整理方向提供参考哦

具体想要提升模型效果,可以尝试以下两种方法:
检查并优化训练数据

  • 检查是否存在训练数据过少的情况,建议每个类别的图片量不少于100个,如果低于这个量级建议扩充。
  • 检查不同类别的数据量是否均衡,建议不同分类的数据量级相同,并尽量接近,如果有的类别数据量很高,有的类别数据量较低,会影响模型整体的识别效果。
  • 通过模型效果评估报告中的错误识别示例,有针对性地扩充训练数据。
    检查测试模型的数据与训练数据的采集来源是否一致,如果设备不一致、或者采集的环境不一致,那么很可能会存在模型效果不错但实际测试效果较差的情况。针对这种情况建议重新调整训练集,将训练数据与实际业务场景数据尽可能一致。

模型发布

训练完毕后可以在左侧导航栏中找到【发布模型】,依次进行以下操作即可发布公有云API。篇幅有限,这里仅介绍公有云API发布方式,其它模型部署方式请参考文末提供的百度官方链接。

  • 选择模型
  • 选择部署方式「公有云部署」
  • 选择版本
  • 自定义服务名称、接口地址后缀
  • 申请发布
    发布模型

图像分类API调用文档

接口鉴权

1、在EasyDL控制台创建应用
创建应用
2、应用详情页获取AK SK
应用详情页获取AK SK
3、通过API Key和Secret Key获取的access_token

# encoding:utf-8
import requests 

# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
    print(response.json())

4、请求API说明
提示一:使用示例代码前,请记得替换其中的示例Token、图片地址或Base64信息。
提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。
提示三:请求image参数为base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,注意请去掉头部。

# encoding:utf-8
import urllib2
import base64
import json

'''
easydl图像分类
'''

request_url = "【接口地址】"

with open("image.jpg", 'rb') as f:
    base64_data = base64.b64encode(f.read())
    s = base64_data.decode('UTF8')

params = {"image": s, "top_num": "5"}
params = json.dumps(params)
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/json')
response = urllib2.urlopen(request)
content = response.read()
if content:
    print content

本文只供大家学习相关知识使用,不以任何商业盈利为目的,转载或分享请注明相关来源。如涉及到相关侵权,请联系我删除。

欢迎志同道合者互相交流学习,微信:Zhihua_Steven

本文链接http://www.dzjqx.cn/news/show-617078.html