深度学习目标检测框架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)、细粒度分类 |
中草药类别详细统计表
| 序号 | 英文标签 | 中文名称 | 图片数量 | 标注框总数 | 备注(密度分析) |
|---|---|---|---|---|---|
| 1 | ginseng | 人参 | 209 | 292 | 平均每图 1.4 个目标 |
| 2 | Leech | 水蛭 | 163 | 284 | 平均每图 1.74 个目标 |
| 3 | JujubaeFructus | 大枣 | 216 | 800 | 高密度,平均 3.7 |
| 4 | LiliiBulbus | 百合 | 191 | 259 | 平均 1.36 |
| 5 | CoptidisRhizoma | 黄连 | 192 | 207 | 平均 1.08 |
| 6 | MumeFructus | 乌梅 | 194 | 696 | 高密度,平均 3.59 |
| 7 | MagnoliaBark | 厚朴 | 203 | 598 | 高密度,平均 2.95 |
| 8 | Oyster | 牡蛎 | 198 | 245 | 平均 1.24 |
| 9 | Seahorse | 海马 | 150 | 381 | 高密度,平均 2.54 |
| 10 | Luohanguo | 罗汉果 | 201 | 252 | 平均 1.25 |
| 11 | GlycyrrhizaUralensis | 甘草 | 190 | 280 | 平均 1.47 |
| 12 | Sanqi | 三七 | 190 | 231 | 平均 1.22 |
| 13 | TetrapanacisMedulla | 通草 | 183 | 212 | 平均 1.16 |
| 14 | CoicisSemen | 薏苡仁 | 192 | 244 | 平均 1.27 |
| 15 | LyciiFructus | 枸杞子 | 214 | 598 | 高密度,平均 2.79 |
| 16 | TruestarAnise | 八角茴香 | 212 | 644 | 高密度,平均 3.04 |
| 17 | ClamShell | 珍珠母(蛤壳) | 171 | 649 | 高密度,平均 3.8 |
| 18 | Chuanxiong | 川芎 | 209 | 544 | 高密度,平均 2.6 |
| 19 | Garlic | 大蒜 | 222 | 608 | 高密度,平均 2.74 |
| 20 | GinkgoBiloba | 银杏 | 190 | 629 | 高密度,平均 3.31 |
| 21 | ChrysanthemiFlos | 菊花 | 167 | 267 | 平均 1.6 |
| 22 | AtractylodesMacrocephala | 白术 | 198 | 277 | 平均 1.4 |
| 23 | JuglandisSemen | 核桃仁 | 196 | 499 | 高密度,平均 2.55 |
| 24 | TallGastrodiae | 天麻 | 192 | 368 | 平均 1.92 |
| 25 | TrionycisCarapax | 鳖甲 | 200 | 298 | 平均 1.49 |
| 26 | AngelicaRoot | 当归 | 211 | 316 | 平均 1.5 |
| 27 | Hawthorn | 山楂 | 188 | 367 | 平均 1.95 |
| 28 | CrociStigma | 西红花(藏红花) | 217 | 240 | 平均 1.11 |
| 29 | SerpentisPeriostracum | 蛇蜕 | 175 | 180 | 平均 1.03 |
| 30 | EucommiaBark | 杜仲 | 196 | 469 | 高密度,平均 2.39 |
| 31 | ImperataeRhizoma | 白茅根 | 196 | 214 | 平均 1.09 |
| 32 | LoniceraJaponica | 金银花 | 188 | 409 | 高密度,平均 2.17 |
| 33 | Zhizi | 栀子 | 213 | 1073 | 极高密度,平均 5.04 |
| 34 | Scorpion | 全蝎 | 169 | 227 | 平均 1.34 |
| 35 | HouttuyniaeHerba | 鱼腥草 | 184 | 193 | 平均 1.05 |
| 36 | EupolyphagaSinensis | 土鳖虫 | 171 | 408 | 高密度,平均 2.39 |
| 37 | OroxylumIndicum | 木蝴蝶 | 207 | 397 | 平均 1.92 |
| 38 | CurcumaLonga | 姜黄 | 194 | 377 | 平均 1.94 |
| 39 | NelumbinisPlumula | 莲子心 | 201 | 250 | 平均 1.24 |
| 40 | ArecaeSemen | 槟榔 | 192 | 715 | 高密度,平均 3.72 |
| 41 | Scolopendra | 蜈蚣 | 184 | 203 | 平均 1.1 |
| 42 | MoriFructus | 桑葚 | 205 | 551 | 高密度,平均 2.69 |
| 43 | FritillariaeCirrhosaeBulbus | 川贝母 | 207 | 242 | 平均 1.17 |
| 44 | DioscoreaeRhizoma | 山药 | 219 | 374 | 平均 1.71 |
| 45 | CicadaePeriostracum | 蝉蜕 | 205 | 446 | 高密度,平均 2.18 |
| 46 | PiperCubeba | 荜茇 | 186 | 333 | 平均 1.79 |
| 47 | BupleuriRadix | 柴胡 | 190 | 206 | 平均 1.08 |
| 48 | AntelopeHom | 羚羊角 | 152 | 362 | 高密度,平均 2.38 |
| 49 | Pangdahai | 胖大海 | 215 | 706 | 高密度,平均 3.28 |
| 50 | NelumbinisSemen | 莲子 | 190 | 426 | 高密度,平均 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_detection4. 安装必要依赖
# 安装 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.类别不平衡问题
Zhizi有1073 个标注框,而Leech仅284 个Pangdahai,ArecaeSemen,ClamShell等也较多
✅建议处理方式:
- 使用
copy_paste增强小样本类别 - 设置
class_weights(YOLOv8 不直接支持,可通过copy_paste和mosaic间接解决) - 在评估时关注各类别的 AP,避免模型偏向大类
2.小目标问题
- 多数药材(如
Scolopendra,Scorpion,CicadaePeriostracum)尺寸较小
✅建议:
- 使用更高分辨率训练:
imgsz=1280 - 启用
copy_paste和mosaic增强小目标 - 考虑使用YOLOv8-pose或分割模型提升边缘识别精度
🎁 进阶建议(提升性能)
| 技术 | 说明 |
|---|---|
| 高分辨率训练 | imgsz=1280或1920,显著提升小药材识别率 |
| 分块检测(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辅助诊疗、智能药房领域取得成功!🌿💊🤖