共计 1608 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点
中草药数据标注相比常规图像标注存在三大技术难点:

- 形态相似性高 :如当归与独活、白芷与杭白菊的根茎特征差异仅毫米级,需亚像素级标注精度
- 专业门槛高 :标注人员需掌握《中国药典》的显微鉴别标准(如导管类型、草酸钙结晶形态)
- 样本不平衡 :常见药材(如黄芪)样本量可能是稀有药材(如雪莲)的 50 倍以上
技术选型对比
针对细粒度标注需求,主流工具对比:
| 工具 | 细粒度标注支持 | 多人协作 | 医学插件 | 学习成本 |
|---|---|---|---|---|
| Label Studio | 支持多边形 + 关键点 | ★★★★ | 需自定义 | 低 |
| CVAT | 超像素分割 | ★★★ | 无 | 中 |
| VGG Image Annotator | 层级标签体系 | ★★ | 有 | 高 |
推荐方案 :Label Studio + 自定义 XML 模板(集成药典术语库)
实现方案
数据预处理
import cv2
import numpy as np
def preprocess_herb(image_path):
"""
中草药图像预处理流水线
参数:
image_path: 原始图像路径
返回:
背景分离后的 ROI 区域
"""
# 1. 光照补偿(CLAHE 算法)img = cv2.imread(image_path)
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
l_clahe = clahe.apply(l)
lab_clahe = cv2.merge((l_clahe,a,b))
# 2. 背景分离(K-means 聚类)pixel_values = lab_clahe.reshape((-1, 3))
pixel_values = np.float32(pixel_values)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.2)
_, labels, centers = cv2.kmeans(pixel_values, 2, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
mask = labels.reshape(img.shape[:2])
# 3. 形态学优化
kernel = np.ones((5,5),np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
return cv2.bitwise_and(img, img, mask=mask)
半自动标注架构
graph TD
A[原始图像] --> B(OpenCV 预处理)
B --> C{专家知识库}
C -->| 特征匹配 | D[自动建议标注区域]
D --> E[人工修正]
E --> F[质量校验模块]
F -->|Kappa>0.85| G[入库]
质量控制
- 一致性检查 :
- 计算三名标注者的 Cohen’s Kappa 系数
-
关键部位(如叶脉交汇点)要求 IOU≥0.9
-
混淆检测 :
from sklearn.metrics import confusion_matrix import seaborn as sns # 相似药材对分析(以当归 vs 白芷为例)cm = confusion_matrix(y_true, y_pred, labels=["当归","白芷"]) sns.heatmap(cm, annot=True, fmt="d")
避坑指南
- 叶片残缺处理 :
- 标注时保留主脉结构
-
添加 ” 残缺样本 ” 标签属性
-
拍摄规范 :
- 45 度角展示横切面(避免维管束遮挡)
- 标准色卡参照(孟塞尔色系)
性能验证
| 标注方法 | Top- 5 准确率 | 训练时间 (h) |
|---|---|---|
| 纯人工标注 | 92.1% | 15.2 |
| 半自动标注 | 91.7% | 10.5 |
| 自动分割 + 人工校验 | 89.3% | 8.1 |
开放性问题
当新增药材类别时:
1. 如何设计特征空间映射策略避免灾难性遗忘?
2. 是否需要重建整个知识图谱?
3. 少量样本(<50 张)下的增量学习如何实现?
(实验显示:每新增 10 个类别,原型网络比微调方法准确率高 12%)
正文完
发表至: 未分类
近一天内
