中醫藥發展已經上升到國家戰略高度,中醫藥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
}
]
}
演示閃圖