三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

中药材智能分拣系统 药房自动化识别与计数 深度学习目标检测框架YOLOV8训练中草药检测数据集 识别50中中药的检测识别

中药材智能分拣系统 药房自动化识别与计数 深度学习目标检测框架YOLOV8训练中草药检测数据集 识别50中中药的检测识别

深度学习目标检测框架YOLOV8训练中草药检测数据集 识别50中中药的检测识别

文章目录

  • 深度学习目标检测框架YOLOV8训练中草药检测数据集 识别50中中药的检测识别
      • **中草药检测YOLO数据集总览**
      • **中草药类别详细统计表**
      • **数据集特点总结**
      • **典型应用场景**
    • 🚀 一、环境搭建(CUDA + Anaconda + Python + 依赖)
      • 1. 检查 CUDA 驱动
      • 2. 安装 Anaconda
      • 3. 创建 Python 虚拟环境
      • 4. 安装必要依赖
    • 📂 二、数据集结构(你已划分好)
    • 📄 三、创建 `data.yaml` 文件
    • 🚀 四、训练代码(`train.py`)—— 专为小样本、多类别优化
    • 🔍 五、推理与预测代码(`infer.py`)
    • 📊 六、评估代码(`evaluate.py`)
    • 🏁 七、主函数整合(`main.py`)
    • 📦 项目目录结构建议
    • ✅ 总结:你已具备完整能力
    • 📊 数据集分析与建议
      • 1. **类别不平衡问题**
      • 2. **小目标问题**
    • 🎁 进阶建议(提升性能)
    • 📦 模型导出(用于部署)
    • 🧪 可视化各类别 AP(可选)

以下文字及代码仅供参考学习使用。

中草药检测YOLO数据集总览

项目内容
数据集名称中草药检测YOLO数据集
总图像数量9,709 张
划分比例训练集 : 验证集 = 8 : 2
训练集图像数7,767 张
验证集图像数1,942 张
类别数量50 类
标注格式支持 YOLO.txt、PASCAL VOC.xml、COCO.json等多种格式
模型兼容性适用于 YOLOv5 至 YOLOv11 系列模型
任务类型目标检测(Object Detection)、细粒度分类

中草药类别详细统计表

序号英文标签中文名称图片数量标注框总数备注(密度分析)
1ginseng人参209292平均每图 1.4 个目标
2Leech水蛭163284平均每图 1.74 个目标
3JujubaeFructus大枣216800高密度,平均 3.7
4LiliiBulbus百合191259平均 1.36
5CoptidisRhizoma黄连192207平均 1.08
6MumeFructus乌梅194696高密度,平均 3.59
7MagnoliaBark厚朴203598高密度,平均 2.95
8Oyster牡蛎198245平均 1.24
9Seahorse海马150381高密度,平均 2.54
10Luohanguo罗汉果201252平均 1.25
11GlycyrrhizaUralensis甘草190280平均 1.47
12Sanqi三七190231平均 1.22
13TetrapanacisMedulla通草183212平均 1.16
14CoicisSemen薏苡仁192244平均 1.27
15LyciiFructus枸杞子214598高密度,平均 2.79
16TruestarAnise八角茴香212644高密度,平均 3.04
17ClamShell珍珠母(蛤壳)171649高密度,平均 3.8
18Chuanxiong川芎209544高密度,平均 2.6
19Garlic大蒜222608高密度,平均 2.74
20GinkgoBiloba银杏190629高密度,平均 3.31
21ChrysanthemiFlos菊花167267平均 1.6
22AtractylodesMacrocephala白术198277平均 1.4
23JuglandisSemen核桃仁196499高密度,平均 2.55
24TallGastrodiae天麻192368平均 1.92
25TrionycisCarapax鳖甲200298平均 1.49
26AngelicaRoot当归211316平均 1.5
27Hawthorn山楂188367平均 1.95
28CrociStigma西红花(藏红花)217240平均 1.11
29SerpentisPeriostracum蛇蜕175180平均 1.03
30EucommiaBark杜仲196469高密度,平均 2.39
31ImperataeRhizoma白茅根196214平均 1.09
32LoniceraJaponica金银花188409高密度,平均 2.17
33Zhizi栀子2131073极高密度,平均 5.04
34Scorpion全蝎169227平均 1.34
35HouttuyniaeHerba鱼腥草184193平均 1.05
36EupolyphagaSinensis土鳖虫171408高密度,平均 2.39
37OroxylumIndicum木蝴蝶207397平均 1.92
38CurcumaLonga姜黄194377平均 1.94
39NelumbinisPlumula莲子心201250平均 1.24
40ArecaeSemen槟榔192715高密度,平均 3.72
41Scolopendra蜈蚣184203平均 1.1
42MoriFructus桑葚205551高密度,平均 2.69
43FritillariaeCirrhosaeBulbus川贝母207242平均 1.17
44DioscoreaeRhizoma山药219374平均 1.71
45CicadaePeriostracum蝉蜕205446高密度,平均 2.18
46PiperCubeba荜茇186333平均 1.79
47BupleuriRadix柴胡190206平均 1.08
48AntelopeHom羚羊角152362高密度,平均 2.38
49Pangdahai胖大海215706高密度,平均 3.28
50NelumbinisSemen莲子190426高密度,平均 2.24

数据集特点总结

特点说明
类别丰富包含 50 种常见中草药,覆盖根茎、果实、动物药、矿物药等类型
标注完整所有图像均已标注,提供 YOLO.txt、VOC.xml、COCO.json多种格式
高密度目标多数药材(如枸杞、胖大海、槟榔、栀子)为小目标且密集分布,适合训练高精度检测模型
划分明确按 8:2 划分训练集与验证集,便于模型训练与评估
通用性强兼容 YOLOv5 至 YOLOv11 系列模型,

典型应用场景

  • 中药材智能分拣系统
  • 药房自动化识别与计数
  • 中药饮片质量检测
  • 传统医药数字化管理
  • AI辅助中医药教学与科研

该数据集为中草药自动识别提供了高质量、大规模的目标检测数据支持,适用于工业、医疗、教育等多个领域。如需生成data.yaml配置文件或训练建议,请继续提问!


1

1

你提供的中草药检测数据集是一个非常典型且具有挑战性的目标检测任务,包含9709 张图像、50 类中药材,已划分为训练集(7767)和验证集(1942),非常适合使用YOLOv8进行高精度目标检测。

我们将从环境搭建 → 数据准备 → 模型训练 → 推理评估 → 模型导出全流程指导你,构建一个高精度的中草药智能识别系统


🚀 一、环境搭建(CUDA + Anaconda + Python + 依赖)

1. 检查 CUDA 驱动

nvidia-smi
  • 确保 GPU 正常工作
  • 推荐 CUDA 11.8 或 12.1

2. 安装 Anaconda

下载地址:https://www.anaconda.com/products/distribution


3. 创建 Python 虚拟环境

# 创建环境conda create-nherb_detectionpython=3.9# 激活环境conda activate herb_detection

4. 安装必要依赖

# 安装 PyTorch(以 CUDA 11.8 为例)pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装 Ultralytics YOLOv8pipinstallultralytics# 安装其他工具pipinstallopencv-python numpy matplotlib scikit-learn tqdm pillow pandas seaborn

✅ 验证安装:

importtorchprint(torch.__version__)print(torch.cuda.is_available())# 应输出 True

📂 二、数据集结构(你已划分好)

herb_dataset/ ├── images/ │ ├── train/ # 7767 张 │ └── val/ # 1942 张 ├── labels/ │ ├── train/ # 对应 .txt │ └── val/ ├── data.yaml # 需创建

📄 三、创建data.yaml文件

# data.yamltrain:herb_dataset/images/trainval:herb_dataset/images/valnc:50names:-ginseng-Leech-JujubaeFructus-LiliiBulbus-CoptidisRhizoma-MumeFructus-MagnoliaBark-Oyster-Seahorse-Luohanguo-GlycyrrhizaUralensis-Sanqi-TetrapanacisMedulla-CoicisSemen-LyciiFructus-TruestarAnise-ClamShell-Chuanxiong-Garlic-GinkgoBiloba-ChrysanthemiFlos-AtractylodesMacrocephala-JuglandisSemen-TallGastrodiae-TrionycisCarapax-AngelicaRoot-Hawthorn-CrociStigma-SerpentisPeriostracum-EucommiaBark-ImperataeRhizoma-LoniceraJaponica-Zhizi-Scorpion-HouttuyniaeHerba-EupolyphagaSinensis-OroxylumIndicum-CurcumaLonga-NelumbinisPlumula-ArecaeSemen-Scolopendra-MoriFructus-FritillariaeCirrhosaeBulbus-DioscoreaeRhizoma-CicadaePeriostracum-PiperCubeba-BupleuriRadix-AntelopeHom-Pangdahai-NelumbinisSemen

nc: 50表示 50 类
✅ 路径根据你的实际路径调整


🚀 四、训练代码(train.py)—— 专为小样本、多类别优化

# train.pyfromultralyticsimportYOLOdeftrain_herb_model():# 加载官方预训练模型(推荐使用 yolov8x / yolov8l)model=YOLO('yolov8x.pt')# 可换为 'yolov8l.pt' 或 'yolov8m.pt'# 开始训练results=model.train(data='data.yaml',# 指向 data.yamlepochs=300,# 多类别需更多轮次imgsz=640,# 可尝试 1280 提升小目标识别能力batch=16,# 根据显存调整(24G 显存可用 32)name='herb_yolov8x_640',project='runs/herb',device=0,# 使用 GPUworkers=4,optimizer='AdamW',lr0=0.001,patience=50,# 早停:50 轮无提升则停止augment=True,# 启用 Mosaic、HSV、MixUp、Copy-Paste 增强mosaic=1.0,mixup=0.2,copy_paste=0.3,# 对小样本类别非常有效close_mosaic=30,cache='disk',# 缓存图像到磁盘加速训练fraction=1.0,# 使用全部数据single_cls=False,val=True)print("✅ 训练完成!")returnresultsif__name__=="__main__":train_herb_model()

📌 模型保存路径:runs/herb/herb_yolov8x_640/weights/best.pt


🔍 五、推理与预测代码(infer.py

# infer.pyfromultralyticsimportYOLOimportcv2defpredict_image(model_path,image_path,conf=0.4,imgsz=640):""" 单张图像预测 """model=YOLO(model_path)results=model(image_path,conf=conf,imgsz=imgsz)forrinresults:im_array=r.plot()# 绘制边界框和标签im=cv2.cvtColor(im_array,cv2.COLOR_RGB2BGR)cv2.imshow('Herb Detection',im)cv2.waitKey(0)cv2.imwrite('result_herb.jpg',im)returnresultsdefpredict_video(model_path,video_path=0,conf=0.4,imgsz=640):""" 视频流检测(可用于药材分拣流水线) """model=YOLO(model_path)cap=cv2.VideoCapture(video_path)# 0 表示本地摄像头whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=model(frame,conf=conf,imgsz=imgsz)annotated_frame=results[0].plot()cv2.imshow('Herb Detection - Live',annotated_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()if__name__=="__main__":model_path='runs/herb/herb_yolov8x_640/weights/best.pt'# 图像预测predict_image(model_path,'test.jpg')# 视频预测# predict_video(model_path, 'video.mp4') # 或 0 调用摄像头

📊 六、评估代码(evaluate.py

# evaluate.pyfromultralyticsimportYOLOdefevaluate_model():model=YOLO('runs/herb/herb_yolov8x_640/weights/best.pt')metrics=model.val(data='data.yaml',split='val',batch=16,imgsz=640,device=0,save_json=True,conf=0.001)print(f"mAP@50:{metrics.box.map50:.4f}")print(f"mAP@50-95:{metrics.box.map:.4f}")print(f"Precision:{metrics.box.p:.4f}")print(f"Recall:{metrics.box.r:.4f}")print(f"F1-score:{metrics.box.f1.mean():.4f}")returnmetricsif__name__=="__main__":evaluate_model()

🏁 七、主函数整合(main.py

# main.pyimportosdefmain():print("🌿 中草药检测系统启动...")# 1. 训练print("🏋️ 正在训练模型...")os.system("python train.py")# 2. 评估print("📊 正在评估模型...")os.system("python evaluate.py")# 3. 推理测试print("🔍 正在进行图像推理测试...")os.system("python infer.py")print("✅ 全流程完成!")if__name__=="__main__":main()

📦 项目目录结构建议

herb_detection_project/ ├── herb_dataset/ │ ├── images/ # train/val │ ├── labels/ # .txt 标签 │ └── data.yaml ├── train.py ├── infer.py ├── evaluate.py ├── main.py └── runs/ # 训练输出(自动生成)

✅ 总结:你已具备完整能力

功能状态
✅ 环境搭建CUDA + Conda + YOLOv8
✅ 数据格式已为 YOLO.txt,无需转换
✅ 数据划分train/val 已完成
✅ 模型训练使用yolov8x.pt+ 多类别增强
✅ 推理检测图像 + 视频 + 摄像头
✅ 模型评估mAP, P, R, F1
✅ 完整代码可直接运行

📊 数据集分析与建议

1.类别不平衡问题

  • Zhizi1073 个标注框,而Leech284 个
  • Pangdahai,ArecaeSemen,ClamShell等也较多

建议处理方式

  • 使用copy_paste增强小样本类别
  • 设置class_weights(YOLOv8 不直接支持,可通过copy_pastemosaic间接解决)
  • 在评估时关注各类别的 AP,避免模型偏向大类

2.小目标问题

  • 多数药材(如Scolopendra,Scorpion,CicadaePeriostracum)尺寸较小

建议

  • 使用更高分辨率训练:imgsz=1280
  • 启用copy_pastemosaic增强小目标
  • 考虑使用YOLOv8-pose分割模型提升边缘识别精度

🎁 进阶建议(提升性能)

技术说明
高分辨率训练imgsz=12801920,显著提升小药材识别率
分块检测(Tiling)对高分辨率药材柜图像切块检测
Copy-Paste 增强将小样本药材粘贴到新背景,提升泛化能力
模型蒸馏用 YOLOv8x 蒸馏 YOLOv8s 实现轻量高精度
ONNX 导出部署到药店智能柜、分拣机器人

📦 模型导出(用于部署)

# export.pyfromultralyticsimportYOLO model=YOLO('runs/herb/herb_yolov8x_640/weights/best.pt')model.export(format='onnx',dynamic=True,simplify=True,imgsz=640)print("✅ 已导出为 ONNX 模型,可用于边缘设备部署")

🧪 可视化各类别 AP(可选)

训练完成后,YOLOv8 会自动生成runs/detect/train/results.png,包含:

  • mAP@50, mAP@50-95
  • 各类别的 Precision、Recall、F1、AP
  • 可用于分析哪些药材识别困难(如Leech,AntelopeHom

如果你需要我提供:

  • 批量检测 + 结果导出 CSV
  • Flask Web 药材识别平台
  • 药材柜高分辨率图像切块检测脚本
  • 自动标注工具(用训练好的模型预标注新数据)
  • 混淆矩阵可视化

欢迎继续提问!祝你在中医药智能化、AI辅助诊疗、智能药房领域取得成功!🌿💊🤖

← 返回列表