中医药发展已经上升到国家战略高度,中医药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 是基于飞桨框架 PaddlePaddle 推出的面向企业开发者打造的一站式 AI 开发平台,提供从数据管理与标注、模型训练、服务部署的全流程支持,内置丰富的预训练模型,全面支持飞桨 Master 模式;模型训练效果好、训练效率高,并且有完善安全的数据服务,支持端、云、软硬一体等多种灵活的部署方式。
目前,EasyDL 已拥有包括专业版、零售版和经典版在内的三款产品,面向不同人群、不同需求,提供高效进行 AI 模型开发部署的平台产品,已在工业、零售、制造、医疗等众多领域落地。
开发者(AI爱好者)可以通过对实际生活与业务需求的细微观察入手,基于百度大脑 EasyDL 专业版功能,创造出价值卓群的模型。无论你是 AI 入门或是资深专家,都可以轻松上手!
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 |
任务类型 | 预置网络 |
---|---|
文本分类 | BOW、CNN、GRU、TextCNN、LSTM、BiLSTM |
短文本匹配 | SimNet(BOW、CNN、GRU、LSTM)、FC |
序列标注 | CRF |
专业版介绍 https://ai.baidu.com/ai-doc/EASYDL/0k38n3p16 AI接入指南 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3
完善相关信息
完善模型名称等信息
这里数据集有25w+图片 外加标注json文件 文件个数达50w+ 根据百度压缩包的要求得到了JSON格式。使用Java的File 以及第三方fastjson、hutool 完成了数据标注 总耗时(毫秒):92008(标注JSON文件生成)+604785(文件迁移到一个文件夹下)+600000(文件夹压缩) 总耗时:22分钟完成25w+图片的标注
以下内容仅适用于图像分类单图单标签。仅供参考,绝非正经捷径
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数据量。如果不够提交工单申请哦
等待标注完成
选择网络、运行环境、数据集即可开启训练 会有免费100小时的资源哦
可以进行部署、效果校验(查看精准度是否符合自己的期望)操作
训练结果
选择公有云部署(根据自己需求来)、给定一个接口地址名称 不要超过20个字符
等待发布通过查看接口地址
请自行修改【API地址】、【access_token】、【本地图片地址】
/**
* 重要提示代码中所需工具类
* 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);
}
结果返回
可以看到识别出了 gancao 精度为 0.9859
{
"log_id":5732642380371350220,
"results":[
{
"name":"gancao",
"score":0.9859340786933899
}
]
}
演示闪图