中医药发展已经上升到国家战略高度,中医药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相关基础使用
专业版介绍 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(文件夹压缩)
以下内容仅适用于图像分类单图单标签。仅供参考,绝非正经捷径
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个字符
等待发布通过查看接口地址
Java代码调用
请自行修改【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
}
]
}
演示闪图