本文档是项目核心知识库,旨在为数据集的构建、使用和未来发展提供一个清晰、连贯且全面的指南。它整合了项目的所有历史记录、处理流程、设计规范和战略规划。请在执行后更新此文档。
- 1. 项目愿景与核心战略
- 2. 数据集架构与核心规范
- 3. 数据处理工作流 (Playbook)
- 4. 模型训练与评测路线图
- 5. 未来规划与待办事项 (TODOs)
- 附录 A:数据来源与合并历史
- 附录 B:中英文类目总表 (Ontology)
<a id="sec-1"></a>
本项目的核心目标是构建一个高质量、大规模、多模态的农业视觉知识库,而不仅仅是一个简单的图像分类数据集。所有的数据处理和标注工作都应服务于这一最终愿景。其核心战略原则包括:
-
统一的多模态标注范式:
- 目标: 将每一张图片转化为包含丰富信息的“图像-文本对 + 标签”样本。
- 实现: 为每张图片生成中英双语的图像描述 (Caption)和问答对 (VQA)。
-
建立统一的本体 (Ontology):
- 所有数据源的“作物”、“病害”、“是否健康”等标签必须规范化,确保跨数据源的一致性。详细的中英文对照表见 附录 B。
-
数据质量优先:
- 通过严格的去重、模糊检测和尺寸过滤,剔除低质量样本。
- 色彩空间统一为 sRGB,训练分辨率建议不低于 448x448。
-
可追溯性与可复现性:
- 所有数据处理步骤、脚本和参数都必须被记录。
- 通过文件名中的来源标签,确保每一张图片都能追溯到其原始出处。
<a id="sec-2"></a>
所有贡献者和使用者都必须严格遵守以下架构和规范。
<a id="sec-2-1"></a>
数据集目录结构:
datasets/
├── crops/ # 农作物图像
├── pests/ # 农业害虫图像
└── diseases/ # 植物病害图像
完整项目目录结构:
dataset_web/
├── datasets/ # 标准化数据根目录
│ ├── crops/ # 农作物图像
│ ├── pests/ # 农业害虫图像
│ └── diseases/ # 植物病害图像
├── scripts/ # 数据处理脚本(分阶段组织)
│ ├── 00_utilities/ # 监控、启动、状态检查脚本
│ ├── 01_scraping/ # 网络爬虫相关脚本
│ ├── 02_ingest_and_merge/ # 数据导入与合并
│ ├── 03_cleaning/ # 数据清洗、去重、审核
│ ├── 04_llm_enhancement/ # LLM语义验证与增强
│ └── 05_index_and_stats/ # 索引生成与统计分析
├── llm_tools/ # LLM验证与描述生成工具
├── web_scraper/ # 爬虫项目与缓存
├── docs/ # 文档目录
│ ├── documentation.md # 核心知识库(本文件)
│ ├── timeline.md # 时间线与里程碑
│ ├── pest_manual_review.html # 人工审核界面
│ ├── archive/ # 历史文档与备份
│ │ ├── reports/ # 历史报告归档
│ │ └── backups/ # 数据备份文件
│ ├── dev_notes/ # 开发笔记与记忆库
│ └── technical/ # 技术文档
├── stats_reports/ # 统计报表输出目录
├── mappings/ # 类别映射表(crop/disease/pest)
├── sources/ # 原始数据来源清单
├── logs/ # 任务与审计日志
├── paper/ # 论文相关资料
├── web-bundles/ # Web资源打包文件
├── data.jsonl # 全量多模态索引
├── data_holdout_web.jsonl # 网爬保留集(验证用)
└── data.sample.jsonl # 小样本示例
<a id="sec-2-2"></a>
所有数据集中的文件必须遵循以下格式,文件名全部小写:
<类别名>__<来源标签>__<uuid>.<ext>
- <类别名>: 文件所属的标准化类别名称(英文),例如
corn rust leaf。 - <来源标签>: 两个下划线包围的来源标识符,用于数据溯源。常见标签包括
__cd__(Crop Diseases),__pd__(PlantDoc),__kd__(Kaggle),__ac__(Crops),__ap__(Pests),__web__(网络爬虫)。 <uuid>: 一个唯一的标识符,防止文件名冲突。<ext>: 小写的文件扩展名,例如jpg。
<a id="sec-2-3"></a>
所有图像的元数据和文本标注都存储在统一的 data.jsonl 文件中。每一行代表一个样本,包含 image, task, text, answer, lang, split, 和 labels 等字段。其中 labels 对象包含了从目录和文件名中解析出的详细信息,如根目录、类名、具体实体、是否健康、来源等。
<a id="sec-3"></a>
这是一个从零开始处理和整合新数据源的标准化流程。
<a id="sec-3-1"></a>
- 策略: 始终采用“拷贝而非移动”的策略,将新数据拷贝到
datasets/目录中,以保留原始数据。 - 脚本: 使用
scripts/02_ingest_and_merge/merge_*.py系列脚本,并在脚本中定义好新旧类别名的映射关系。
<a id="sec-3-2"></a>
- 目的: 对新合入的、文件名不规范的数据进行统一重命名。
- 脚本:
scripts/03_cleaning/bulk_rename_by_class.py - 用法:
python3 scripts/03_cleaning/bulk_rename_by_class.py --root <target_dir> --tag <source_tag>
<a id="sec-3-3"></a>
- 目的: 移除低质量、重复或损坏的图像。
- 脚本:
scripts/03_cleaning/deduplicate_images.py - 核心功能:
- 尺寸过滤: 剔除小于
min-width和min-height的图像。 - 模糊检测: 推荐使用
--blur-method both,结合拉普拉斯方差和 Tenengrad 梯度能量,减少误判。 - 重复检测: 使用感知哈希 (pHash/aHash) 检测并剔除重复或高度相似的图像。
- 尺寸过滤: 剔除小于
- 安全操作: 强烈建议首次运行使用
--action move,将待删除文件移动到.trash/文件夹中供人工复核。
<a id="sec-3-4"></a>
- 目的: 在并入主数据集前进行人工快速抽查/核验,剔除无关或版权不明的图片。
- 工具:
docs/pest_manual_review.html(前端) +scripts/03_cleaning/pest_review_server.py(后端)。 - 流程:
- 使用
scripts/03_cleaning/generate_pest_review_manifest.py生成待审核图片清单。 - 启动
pest_review_server.py后端服务,它会加载 VLM 模型进行智能分析。 - 在浏览器中打开
pest_manual_review.html,进行批量审核、分析和标记。 - 审核完成后,导出审核结果 JSON 文件。
- 使用
scripts/02_ingest_and_merge/import_reviewed_pests.py或scripts/02_ingest_and_merge/import_llm_verified_scraped.py将通过审核的图片正式导入datasets/目录。
- 使用
<a id="sec-3-5"></a>
-
目的: 利用多模态大模型(VLM)对图像进行最后一次智能审核,确保内容与标签匹配,并生成更丰富的描述。
-
核心功能:
- 并发处理: 利用多线程并发调用 VLM API,大幅提升处理速度。
- 语义验证与质量过滤: 自动隔离内容不符或质量低下的图片。
- 描述增强: 为通过验证的图片生成中英双语描述,并存为
.json元数据文件。 - 智能分类: 将验证失败的图片根据模型判断的
actual_class归类到.rejected_by_llm/目录,为数据挽救提供可能。
<a id="sec-3-6"></a>
- 目的: 为清洗干净的数据集生成包含多模态标注的
data.jsonl索引文件。 - 脚本:
scripts/05_index_and_stats/build_jsonl.py - 核心功能:
- 扫描
datasets/下的所有图像及其.json元数据。 - 根据文件名和本体,自动生成中英双语的 Caption 和 VQA 样本。
- 若存在 LLM 生成的
.json文件,则优先使用其中更高质量的文本描述。 - 按类别进行分层抽样,划分
train,val,test集。 - 支持
--holdout-source <src>仅导出指定来源样本(如web),用于跨来源测试集构建,并且已经生成了一个data_holdout_web.jsonl。
- 扫描
<a id="sec-3-7"></a>
- 目的: 为缺失或数据量不足的类别补充高质量图片。
- 主力数据源: GBIF / iNaturalist。通过
agri_sites爬虫 (web_scraper/scraper/spiders/agriculture_sites_spider.py) 访问,是专业生物学数据库,图片质量高且有科学分类,特别适合害虫、植物病害等专业类别。 - 补充数据源: Unsplash API。通过
unsplash_api爬虫 (web_scraper/scraper/spiders/unsplash_api_spider.py) 访问,图片艺术质量高,适合通用农业场景,但有速率限制 (50次/小时)。 - 备选方案: Pixabay API 和 Pexels API。两者均为免费、高质量的图片库,API 限制宽松,是未来可考虑的优秀补充数据源。
<a id="sec-4"></a>
- 视觉编码器选型: 推荐
CLIP/SigLIP ViT-L/14,EVA-02,CoCa等。输入分辨率建议 ≥ 448x448。 - 多模态架构选型: 推荐
LLaVA,InternVL,Qwen-VL,InstructBLIP等。 - 训练策略: 建议采用三阶段训练范式:1) 视觉-文本对齐预训练 (Caption) → 2) 指令微调 (VQA) → 3) 下游任务微调。
- 评测指标: 分类任务 (Top-1/Top-5 准确率)、VQA 任务 (EM/F1 分数),并进行混淆矩阵、跨域泛化和失效分析。
<a id="sec-5"></a>
- ✅ 跨来源测试集 (web holdout, 2025-11-06): 生成
data_holdout_web.jsonl,仅含web来源样本(约 133,133 条),用于跨来源泛化评估。 - ✅ 统计报告生成 (2025-11-06): 实现
scripts/05_index_and_stats/generate_stats.py,生成4个CSV报告:counts_by_class.csv(465个类别统计)counts_by_source.csv(9个来源统计)counts_by_split.csv(train/val/test划分统计)class_source_pivot.csv(类别×来源交叉透视表)- 数据集总览: 160,643张唯一图片,990,256条JSONL记录(平均每张图片6.2个标注)
首要优先
** 高价值补全**
- 数据质量审计工具
- 目标:提升数据一致性与可训练性。
- 文档出处:docs/documentation.md:240
- 建议实现三个无损/可回滚的工具(先 dry-run 模式):
- EXIF 方向修正:遍历图片,应用 ImageOps.exif_transpose,仅在需要时写回;输出审计日志。
- sRGB 统一:将非 sRGB 转换(保留副本到 .normalized/ 或原地写回需确认)。
- **命名规范校验器:检查小写、**source 标记、合法扩展名、UUID 形态;输出违规清单 CSV。
- 注意:图像就地改写属潜在高风险操作,执行前需确认路径与回滚策略。
** 模型与发布准备**
- 模型训练准备
- 动作建议:
- 基线实验配置(LLaVA/InternVL/Qwen-VL)模板与数据加载脚本。
- 训练/评估分布复核(与 stats 报告联动)。
- 动作建议:
- 发布资料
- 目标:面向公开或内部复用
- 动作建议:完善 README/许可证/统计报告/数据卡(Data Card),补全 docs/documentation.md 的执行痕迹。
数据集已就绪,可直接用于:
- 基线模型训练 (LLaVA/InternVL/Qwen-VL)
- 多模态预训练实验
- Caption生成任务 (99.8% LLM高质量描述)
- 视觉问答任务 (VQA)
- 数据集公开发布准备 (README, LICENSE, 统计报告)
<a id="data-sources"></a>
- Agricultural-crops: Kaggle Link
- agricultural-pests-image-dataset: Kaggle Link
- Agriculture crop images: Kaggle Link
- PlantDoc-Dataset: GitHub Link
- Agriculture Crops Dataset: Kaggle Link
- Top Agriculture Crop Disease: Kaggle Link
- 140-most-popular-crops-image-dataset: Kaggle Link
- PlantVillage Dataset: Kaggle Link (License: CC BY-NC-SA 4.0)
- New Plant Diseases / Plant Pathology: Kaggle 数据与竞赛数据集汇总。
时间线与关键处理日志已迁移至精简文档:
docs/timeline.md。此处仅保留数据源概览以避免文档膨胀。
<a id="app-b"></a>
这是项目的核心本体,定义了所有目录和类别的中英文标准名称。
-
根目录:
datasets/crops: 农作物 (Crops)datasets/pests: 害虫 (Pests)datasets/diseases: 病害 (Diseases)
-
Diseases 目录:
Apple Scab Leaf: 苹果黑星病Apple leaf: 苹果叶Apple rust leaf: 苹果锈病叶Bell_pepper leaf: 甜椒叶Bell_pepper leaf spot: 甜椒叶斑病Blueberry leaf: 蓝莓叶Cherry leaf: 樱桃叶Corn Gray leaf spot: 玉米灰斑病Corn leaf: 玉米叶Corn leaf blight: 玉米叶枯病Corn rust leaf: 玉米锈病叶Peach leaf: 桃叶Potato leaf: 马铃薯叶Potato leaf early blight: 马铃薯早疫病Potato leaf late blight: 马铃薯晚疫病Raspberry leaf: 覆盆子叶Rice brown spot: 稻褐斑病Rice leaf: 稻叶Rice leaf blast: 稻叶稻瘟病Rice neck blast: 稻穗颈稻瘟病Soyabean leaf: 大豆叶Squash Powdery mildew leaf: 南瓜白粉病叶Strawberry leaf: 草莓叶Sugarcane bacterial blight: 甘蔗细菌性叶枯病Sugarcane leaf: 甘蔗叶Sugarcane red rot: 甘蔗红腐病Tomato Early blight leaf: 番茄早疫病叶Tomato Septoria leaf spot: 番茄叶斑病(Septoria)Tomato leaf: 番茄叶Tomato leaf bacterial spot: 番茄细菌性斑点病Tomato leaf late blight: 番茄晚疫病叶Tomato leaf mosaic virus: 番茄花叶病毒Tomato leaf yellow virus: 番茄黄化病毒叶Tomato mold leaf: 番茄霉病叶Tomato two spotted spider mites leaf: 番茄二斑叶螨危害叶Wheat brown rust: 小麦褐锈病Wheat leaf: 小麦叶Wheat yellow rust: 小麦黄锈病grape leaf: 葡萄叶grape leaf black rot: 葡萄黑腐病
-
Crops 目录:
Cherry: 樱桃Coffee-plant: 咖啡树Cucumber: 黄瓜Fox_nut(Makhana): 芡实(鸡头米)Lemon: 柠檬Olive-tree: 橄榄树Pearl_millet(bajra): 珍珠粟(Bajra)Tobacco-plant: 烟草almond: 杏仁(扁桃)banana: 香蕉cardamom: 小豆蔻chilli: 辣椒clove: 丁香coconut: 椰子cotton: 棉花gram: 鹰嘴豆(Gram)jowar: 高粱(Jowar)jute: 黄麻maize: 玉米mustard-oil: 芥籽(油用)papaya: 木瓜pineapple: 菠萝rice: 稻(大米)soyabean: 大豆(脚本同时识别soybean变体)sugarcane: 甘蔗sunflower: 向日葵tea: 茶树tomato: 番茄vigna-radiati(Mung): 绿豆(豇豆属)wheat: 小麦
-
Pests 目录:
ants: 蚂蚁bees: 蜜蜂beetle: 甲虫caterpillar: 毛虫(鳞翅目幼虫)earthworms: 蚯蚓earwig: 蠼螋grasshopper: 蝗虫moth: 蛾slug: 鼻涕虫snail: 蜗牛wasp: 黄蜂weevil: 象鼻虫