中医药发展已经上升到国家战略高度,中医药AI创新是五千年中医瑰宝的传承利器。2018年我国中药市场规模达到2700亿元,未来5年将达到2万亿元。国内原料药和制剂厂有3994家,其中中药企业2080家。中药强调“道地药材”,经调查药用植物有383科,2039属,11146种(以上内容来自:http://www.yikumed.com/solution/13.html)。本次使用EasyDLPro图像分类对164种中草药材,18种功能类型(清热药,解表药,补虚药,平肝息风药,化湿药,利水渗湿药,温里药,理气药,消食药,止血药,活血化瘀药,化痰止咳平喘药,安神药,收涩药,开窍药,外用药,祛风湿药,泻下药)进行深度学习模型训练,数据集达25w+,基于 paddle-fluid-v1.6.2 通过ResNet50网络训练。分类精度均达到85.8%以上,平均每次鉴别仅耗时2-5秒,已经达到很好的水平。结合现代深度学习反向传播提高精准度,为生产过程中错综复杂的参数条件找到最优方案。

什么是EasyDL

        EasyDL 是基于飞桨框架 PaddlePaddle 推出的面向企业开发者打造的一站式 AI 开发平台,提供从数据管理与标注、模型训练、服务部署的全流程支持,内置丰富的预训练模型,全面支持飞桨 Master 模式;模型训练效果好、训练效率高,并且有完善安全的数据服务,支持端、云、软硬一体等多种灵活的部署方式。

        目前,EasyDL 已拥有包括专业版、零售版和经典版在内的三款产品,面向不同人群、不同需求,提供高效进行 AI 模型开发部署的平台产品,已在工业、零售、制造、医疗等众多领域落地。

        开发者(AI爱好者)可以通过对实际生活与业务需求的细微观察入手,基于百度大脑 EasyDL 专业版功能,创造出价值卓群的模型。无论你是 AI 入门或是资深专家,都可以轻松上手!

什么是EasyDL Pro

        EasyDL专业版适用于AI初学者及AI专业工程师,支持一站式获取视觉及自然语言处理两大技术方向相关AI能力,系统内置基于百度海量数据训练的预训练模型及预置网络,可在少量训练数据上达到更优的训练效果。模型部署上可将模型灵活部署为公有云API、私有服务器部署、设备端SDK、软硬一体方案。         EasyDL专业版是EasyDL在2019年10月下旬全新推出的针对AI初学者或者AI专业工程师的企业用户及开发者推出的AI模型训练与服务平台,目前支持视觉及自然语言处理两大技术方向,内置百度海量数据训练的预训练模型,灵活支持脚本调参及Notebook两类开发方式,只需少量数据可达到优模型效果。

  • 适用人群

    专业AI工程师且追求灵活、深度调参的企业或个人开发者

  • 支持定制模型类型

    支持视觉及自然语言处理两大技术方向

  • 专业版产品特性

    预置百度百亿级数据规模的预训练模型,包括丰富的视觉模型及自然语言处理模型ERNIE,训练效果更突出。

    对比经典版,支持代码级调整模型参数和模型结构,封装底层算法逻辑细节,代码行数更少,更易有算法基础的开发者上手。

    支持从数据管理,模型训练到模型部署一站式AI服务

  • 视觉:支持图像分类及物体检测两类模型训练

任务类型

预置算法

图像分类

Resnet(50,101)、Se_Resnext(50,101)、Mobilenet Nasnet

物体检测

FasterRCNN、YoloV3、mobilenetSSD

  • 自然语言处理:支持文本分类及短文本匹配两类模型训练,内置百度百亿级数据所训练出的预训练模型ENNIE.ERNIE(艾尼)是百度自研持续学习语义理解框架,该框架可持续学习海量数据中的知识。基于该框架的ERNIE2.0预训练模型,已累计学习10亿多知识,中英文效果全面领先,适用于各类NLP应用场景。 了解ERNIE

任务类型

预置网络

文本分类

BOW、CNN、GRU、TextCNN、LSTM、BiLSTM

短文本匹配

SimNet(BOW、CNN、GRU、LSTM)、FC

序列标注

CRF

  • 没用过 EasyDL 专业版?没关系!百度AI提供在线教程,理论+实战6小时从入门到精通! 历史课程回放地址:http://abcxueyuan.cloud.baidu.com/#/course_detail?id=15167
  • 数据量不够多,算法开发经验还不够丰富?没关系!EasyDL 专业版预置了优秀的网络结构和基于百度海量数据训练的预训练模型,Master 模式轻快开发,少量数据轻松获得高精度模型!

创建百度账号以及EasyDL相关基础使用

专业版介绍 https://ai.baidu.com/ai-doc/EASYDL/0k38n3p16

AI接入指南 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3

第一步:创建视觉任务

cvpr 中草药图像识别 拍照识别中草药识别君_百度AI

1.完善相关信息

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_02

2.完善模型名称等信息

cvpr 中草药图像识别 拍照识别中草药识别君_中草药AI识别师_03

第二步:创建数据集

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_04

第三步:选择标注好的压缩包

(可以选择在线标注,也可以像我这样线下标注好再批量上传。另外,物体检测模型支持使用智能标注,系统会从数据集所有图片中筛选出最关键的图片并提示需要优先标注,通常只需标注数据集的30%左右即可训练模型,与标注所有数据后训练相比,模型效果几乎等同。)

这里数据集有25w+图片 外加标注json文件 文件个数达50w+

根据百度压缩包的要求得到了JSON格式。使用Java的File 以及第三方fastjson、hutool 完成了数据标注 总耗时(毫秒):92008(标注JSON文件生成)+604785(文件迁移到一个文件夹下)+600000(文件夹压缩)

以下内容仅适用于图像分类单图单标签。

1.下载官方标注示例得到如下JSON结构

{ "labels":[ { "name":"Drama" }, { "name":"Romance" } ] }

2.根据JSON创建JavaBean(需要lombok插件和jar)

@NoArgsConstructor @Data public class EasyDLProTagBean { private List<LabelsBean> labels; @NoArgsConstructor @Data public static class LabelsBean { private String name; } }

3.提前准备好数据集

小帅丶这里的数据是以分类名称为单位。共计164个文件夹。每个文件夹里面的文件也是以分类名称命名eg:aiye_001.jpg,aiye_002.jpg.....aiye_1500.jpg 假设以上数据都在D://dataset//chm 文件夹下面

public static void main(String[] args) { //数据根目录 String filePathRoot = "D://dataset//chm//"; File fileRoot = new File(filePathRoot); String[] listRoot = fileRoot.list(); //开始时间 long startTime = System.currentTimeMillis(); for (String rootName : listRoot) { //拿到根目录文件夹名即标签名称 String tagName = rootName; //根据标签名称得到所有标签名称下面的文件 String filePath = filePathRoot+rootName; File file = new File(filePath); String[] list = file.list(); if(list.length>0){ //循环 生成JSON文件 for (String s : list) { String fileName = s.substring(0,s.lastIndexOf(".")); //生成一个名称与图片名称一致 后缀名为.json String jsonFileName = fileName+".json"; //label对象 不是必须的 直接字符串拼接也可以 EasyDLProTagBean bean = new EasyDLProTagBean (); List<LabelBean.Labels> labelsList = new ArrayList<LabelBean.Labels>(); LabelBean.Labels labels = new LabelBean.Labels(); labels.setName(tagName); labelsList.add(labels); bean.setLabels(labelsList); //生成label的json文件 String JSONText = JSON.toJSONString(bean); //讲json文件写入当前文件夹中 FileUtil.writeString(JSONText,filePath+File.separator+jsonFileName,"UTF-8"); } }else{ System.out.println(filePath); } } //耗时 long timeConsuming = System.currentTimeMillis() - startTime; System.out.println(timeConsuming); }

4.重复3的代码稍作修改即可完成N个文件夹下面的文件迁移到某一个文件夹下面。打包上传即可

注意:默认为10w数据量。如果不够提交工单申请哦

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_05

5.等待标注完成

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_06

 

第四步:新建训练任务

选择网络、运行环境、数据集即可开启训练 会有免费P4的100小时的资源,真香!

选择网络

参加EasyDL本次挑战赛的训练方向是CV或NLP。小帅选择的CV方向又分为图像分类和物体检测两种模型。由于准备训练一个识别中草药材的模型,因此本次选择了图像分类模型。如果需要精准识别图像中物体的位置或图片中物体较多、背景较复杂时,可以选择物体检测。

图像分类

官方给了ResNet(50,101)、SE-ResNeXt(50,101)、MobileNet、NASNet 6种预训练模型,如果对于如何进行选择比较困惑的同学,可以查看使用文档,就在页面最上方,小帅边查边做的好习惯算是养成了。

根据官方文档说明可以看到如下内容

  • 大多数情况建议使用 ResNet50和SE-ResNeXt50,模型效果稳定,并且预测时间较短。SE-ResNeXt50相比ResNet50增加了SE模块,能进一步提高准确率,但是预测时间稍有增加
  • 当数据量较大并且要求更高的准确率时,建议使用 ResNet101和SE-ResNeXt101,预测时间相比ResNet50会更长
  • 如果要求预测时间或模型体积尽量小时,建议使用 MobileNet
  • 如果数据量不大,由于模型复杂度较大,建议使用 NASNet,一般情况不建议使用NASNet

小帅优先考虑能够快速得到结果,根据推荐选择了ResNet50预训练模型,小伙伴们要根据自己的实际数据量和准确率要求选择合适的预训练模型哦~

选择运行环境

目前EasyDL专业版支持选择GPU P4、GPU P40、GPU V100三种运行环境,性能从高到低为V100>P40>P4。

如果您没开通付费只能选择GPU P4运行环境,默认赠送100(小时*节点)免费算力支持。如果不够或者运行环境无法满足自己的训练任务,可以考虑开通付费选择符合自己要求的运行环境(费用说明:https://ai.baidu.com/ai-doc/EASYDL/hk91b5yf5)

选择计算节点数及运算时间

1、选择计算节点数:节点数越多运行效率越高,可结合训练数据量及运行效率灵活选择。目前可设置的最高计算节点数为6。并且在本次产品升级之后,脚本调参上线分布式训练,在6节点并行训练的基础上,加入了分布式训练加速策略,使得整体效果比较网络训练速度可进一步提升3倍。必须承认,在提升训练速度这点上,EasyDL专业版确实做得非常优秀。

2、最长训练时间:超过最长训练时间后模型会自动停止运行,注意这里设置的最长训练时间与最长计费时长有一定差异,训练计费时长将根据数据增强-自动搜索耗时+训练耗时的总时长进行计算。

小帅这里为了不过多浪费免费算力则选择GPU P4、默认一个节点、运算时间默认0.5(会直到训练完并不是到0.5小时就停止训练哦),小伙伴们要根据自己的实际情况选择计算节点数和最长时间哦~

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_07

等待训练完成

可以进行部署、效果校验(查看精准度是否符合自己的期望)操作

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_08

第五步:查看训练结果

注意:若想要更充分了解模型效果情况,建议发布模型为API后,通过调用接口测试批量图片数据获取更准确的模型效果。

小帅的模型评估报告如下所示:

cvpr 中草药图像识别 拍照识别中草药识别君_百度AI_09

解读评估报告

评估报告通常由多个指标组成,包括准确率、F1-score、mAP等,根据模型不同指标也有所不同。大家在查看评估报告时,需要根据自己的业务需求有针对性地查看相应指标。

准确率

准确率含义为正确分类的样本数与总样本数之比,这里指的总样本是指从总训练数据中随机抽取部分数据参与模型评估的总样本,在下文截图模型评估报告中,参与训练的图片数258789个,实际参与评估的数据为详细评估预测表现表格的数据总和,例如50个。那么准确率为参与评估的正确数量46/50,结果为92.0%。

F1-Score

F1-score是指对某类别而言为精确率和召回率的调和平均数,此处为各类别F1-score的平均数。就某类而言,精确率和召回率体现了该分类的精确率及召回率的平衡情况:

cvpr 中草药图像识别 拍照识别中草药识别君_EasyDLPro_10

精确率

精确率是对某类别而言为正确预测为该类别的样本数与预测为该类别的总样本数之比,此处为各类别精确率的平均数。如果精确率比较低,有一定可能原因为不同类别效果存在差异所致,请检查下不同类型样本量是否均衡。

召回率

召回率是指对某类别而言为正确预测为该类别的样本数与该类别的总样本数之比,此处为各类别召回率的平均数。

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_11

top1、top2、top…5

是指对于每一个评估的图片文件,模型会给根据置信度高低,依次给出top1-top5的识别结果,其中top1置信度最高,top5的置信度最低。那么top1的准确率值是指对于评估标准为“top1结果识别为正确时,判定为正确”给出准确率。top2准确率值是指对于评估标准为“top1或者top2只要有一个命中正确的结果,即判定为正确”给出的准确率。……以此类推。

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_12

不同分类的F1-score 这个部分很重要,如果不同分类的F1-score存在差异很大的情况下,整体模型效果有被低精度的分类效果拉低的可能。建议检查训练数据中不同标签的目标数情况,建议不同分类的目标数尽可能均衡。

cvpr 中草药图像识别 拍照识别中草药识别君_数据_13

第六步:部署操作

EasyDL提供多种灵活的部署方式,包括公有云API、私有服务器部署、设备端SDK、软硬一体方案。开发者在选择部署方式时,可以根据自己的业务场景来进行选择。在本次中草药材识别模型中,小帅选择了公有云部署。

选择公有云部署(根据自己需求来)、给定一个接口地址名称 注意名称不要超过20个字符。

cvpr 中草药图像识别 拍照识别中草药识别君_数据_14

等待发布通过,查看接口地址

cvpr 中草药图像识别 拍照识别中草药识别君_EasyDLPro_15

Java代码调用

请自行修改【API地址】、【access_token】、【本地图片地址】

请自行修改【API地址】、【access_token】、【本地图片地址】

【API地址】

等待发布通过查看接口地址,即可得到API地址

【access_token】

可以根据官方文档教程进行获取https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu#%E8%8E%B7%E5%8F%96access-token

【本地图片地址】

选择要识别的图片 假设图片在F盘符根目录下,图片名称为 gancao.jpg 则本地图片地址为  F://gancao.jpg

/**
     * 重要提示代码中所需工具类
     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
     * 下载
     */
    public static void main(String[] args) throws Exception {
        //请将API地址替换为EasyDL Pro任务发布后所提供的API地址
        String url ="【API地址】";
        //access_token获取方法请详见API使用说明,请注意access_token有效期为30天
        String access_token="【access_token】";
        //修改图片地址,测试不同图片
        byte[] file = FileUtil.readFileByBytes("【本地图片地址】");
        //参数image:图像base64编码
        String image = Base64Util.encode(file);
        //组装json格式的请求参数
        String params = "{\"image\":\""+image+"\",\"top_num\":5}";
        String result = HttpUtil.post(url, access_token, params);
        //输出识别结果
        System.out.println(result);
    }

测试用图

cvpr 中草药图像识别 拍照识别中草药识别君_百度AI_16

结果返回

可以看到识别出了 gancao  精度为 0.9859

{
    "log_id":5732642380371350220,
    "results":[
        {
            "name":"gancao",
            "score":0.9859340786933899
        }
    ]
}

使用感受

EasyDL专业版使用最大的感受就是速度非常快,很刺激(25w+图片训练只需要45分钟)。

数据集也是在AI Studio深度学习平台开源项目得到的数据哦。5GB数据标注仅用2分钟不到哦(根据自身网络因素下载时间各有不同),外加数据的迁移打包总耗时也就20分钟左右。整体耗时非常短,使用流畅。

由于对百度AI的热爱。调用代码分分钟就完成了整体调用。数据的百科信息由网友提供(非常感谢~)。对于开发者来说,能够短时间快速完成整体调用,看到模型立刻可以投入到使用中,这带来的成就感可以说是无与伦比!

整体操作下来,体验就是就是刺激,速度快快快!!!

带上你的数据集,带上我的(其实是EasyDL专业版的)服务器。一起来创造新颖idea!

演示闪图

cvpr 中草药图像识别 拍照识别中草药识别君_cvpr 中草药图像识别_17