1. 药丸检测数据集的价值与应用场景
在医药生产和质量管控领域,药丸外观检测一直是个重要但耗人力的环节。传统人工目检方式不仅效率低下,长时间工作还容易产生视觉疲劳导致漏检。我们团队开发的这个药丸检测数据集,正是为了解决这个行业痛点。
这个数据集包含了12,000张高清药丸图像,涵盖圆形、椭圆形、胶囊形等7种常见药丸形态。每张图片都经过专业质检人员标注,标注格式同时支持VOC和YOLO两种主流标准。数据集特别突出了以下几个特点:
- 多角度拍摄:包含顶部、侧面、倾斜45度等不同视角
- 多种光照条件:模拟生产线上的强光、弱光和反光场景
- 缺陷多样性:包含裂纹、缺损、污渍、颜色异常等8类常见缺陷
提示:数据集中的"边缘模糊"类样本特别珍贵,这类缺陷在真实产线上最难检测,但我们的数据集包含了超过800个此类样本。
2. 数据集获取与格式说明
2.1 下载方式与文件结构
数据集可以通过以下两种方式获取:
-
官网下载(需注册):
- 压缩包大小:约4.7GB
- 包含:JPEGImages(原始图像)、Annotations(VOC格式XML)、labels(YOLO格式txt)
- 额外提供100张测试集(不带标注)
-
学术机构申请:
- 针对高校和研究机构提供完整版(含生产环境视频)
- 需要提交研究计划书
文件目录结构示例:
code复制PillDataset/
├── train/
│ ├── images/ # 训练集图片
│ └── labels/ # YOLO格式标签
├── val/ # 验证集
└── test/ # 测试集图片
2.2 标注格式详解
数据集同时提供两种标注格式以适应不同训练需求:
VOC格式特点:
- 每个XML文件包含:
xml复制<object> <name>crack</name> <bndbox> <xmin>256</xmin> <ymin>189</ymin> <xmax>345</xmax> <ymax>287</ymax> </bndbox> </object> - 优势:兼容更多传统检测算法
- 适用场景:Faster R-CNN等两阶段检测器
YOLO格式特点:
- 每行表示一个检测对象:
code复制<class_id> <x_center> <y_center> <width> <height> - 优势:训练效率更高
- 适用场景:YOLOv5/v8等单阶段检测器
3. 数据预处理与增强技巧
3.1 必须做的预处理步骤
-
尺寸归一化:
python复制# 将所有图像resize到640x640 import cv2 img = cv2.resize(img, (640, 640)) -
标签验证:
bash复制
python check_labels.py --img_dir ./train/images --label_dir ./train/labels -
训练验证集划分(提供现成脚本):
bash复制
python split_dataset.py --data_dir ./PillDataset --ratio 0.8 0.1 0.1
3.2 推荐的图像增强方案
针对药丸检测的特殊性,建议采用以下增强组合:
python复制# Albumentations示例配置
transform = A.Compose([
A.Rotate(limit=15, p=0.5), # 小角度旋转
A.GaussNoise(var_limit=(10, 50), p=0.3), # 模拟产线噪声
A.RandomBrightnessContrast(p=0.2), # 亮度变化
A.CLAHE(p=0.5), # 增强局部对比度
A.HueSaturationValue(hue_shift_limit=5, p=0.1) # 色相微调
], bbox_params=A.BboxParams(format='yolo'))
注意:避免使用过强的几何变换(如大角度旋转、透视变换),这会破坏药丸的真实形态特征。
4. 模型训练与调优实战
4.1 YOLOv8训练配置示例
yaml复制# yolov8_pill.yaml
train: ../PillDataset/train/images
val: ../PillDataset/val/images
nc: 8 # 缺陷类别数
names: ['crack', 'stain', 'deform', 'color', 'edge', 'spot', 'blur', 'other']
启动训练命令:
bash复制yolo detect train data=yolov8_pill.yaml model=yolov8n.pt epochs=100 imgsz=640
4.2 关键参数调优建议
-
学习率策略:
- 初始lr:0.01
- 采用余弦退火:
--cos_lr
-
正负样本平衡:
python复制# 在数据加载器中添加类别权重 class_weight = [1.0, 1.2, 1.5, 1.0, 2.0, 1.0, 1.8, 1.0] # 根据样本数量设置 -
损失函数调整:
- 增加小目标检测权重:
--box 0.05 - 分类损失权重:
--cls 0.5
- 增加小目标检测权重:
5. 部署优化与生产落地
5.1 模型量化方案
使用TensorRT加速:
python复制from torch2trt import torch2trt
model_trt = torch2trt(model, [input_tensor],
fp16_mode=True,
max_workspace_size=1<<25)
量化后性能对比:
| 指标 | FP32 | FP16 | INT8 |
|---|---|---|---|
| 推理速度(ms) | 45 | 22 | 15 |
| mAP@0.5 | 0.892 | 0.890 | 0.885 |
5.2 产线集成要点
-
光照补偿方案:
- 推荐使用环形LED光源(6500K色温)
- 曝光时间控制在1-5ms
-
触发拍照策略:
- 传送带速度≤0.5m/s时:连续拍摄
- 速度>0.5m/s时:编码器触发拍摄
-
异常处理机制:
python复制def process_frame(frame): try: results = model(frame) if len(results) == 0: raise EmptyResultError return results except Exception as e: send_alert(e) return None
6. 常见问题解决方案
6.1 标注相关
问题1:YOLO标签出现负值坐标
- 原因:标注时超出图像边界
- 修复:
python复制def normalize_coords(x, y, w, h, img_w, img_h): x = max(0, min(x, img_w)) y = max(0, min(y, img_h)) return x, y, w, h
问题2:VOC转YOLO后类别ID不匹配
- 解决方案:使用我们提供的转换脚本
bash复制
python voc2yolo.py --voc_dir ./Annotations --class_list classes.txt
6.2 训练相关
问题3:验证集mAP波动大
- 可能原因:小样本类别过少
- 解决方法:
- 对该类样本应用更强的增强
- 使用复制粘贴增强(Copy-Paste Augmentation)
问题4:推理时漏检小缺陷
- 优化方案:
yaml复制# 修改anchor配置 anchors: - [5,6, 8,14, 15,11] # 小目标anchor - [20,25, 30,45, 50,33] - [80,100, 150,120, 200,250]
在实际产线测试中,我们这套方案实现了99.2%的检出率,误检率控制在0.3%以下。最关键的经验是:药丸边缘检测需要特别关注,我们在最后一层特征图后添加了一个边缘注意力模块(Edge Attention Module),这使边缘缺陷的检出率提升了18%。
