蔬菜分类

蔬菜分类
一,以食用器官分类法
按食用器官不同,可将蔬菜分为六大类.
1.根菜类
(1)肉质根类:萝卜,胡萝卜,大头菜,牛蒡,辣根
(2)块根类:豆薯,葛
2.茎菜类
(1)地下茎类
块茎类:马铃薯,菊芋
根状茎类:藕,姜
球茎类:荸荠,慈菇,芋头
(2)地上茎类
嫩茎类:莴苣,菜薹,茭白,石刁柏,竹笋
肉质茎类:榨菜,球茎甘蓝
3.叶菜类
不结球叶菜:小白菜,菠菜,芹菜,苋菜,落葵,蕹菜
结球叶菜:甘蓝,大白菜,结球莴苣
香辛叶菜:韭菜,葱,芜荽,茴香
鳞茎类:洋葱,大蒜,百合
4.花菜类:花椰菜,青花菜,金针菜,朝鲜蓟
5.果菜类
瓠果类:西瓜,黄瓜,南瓜,瓠瓜,苦瓜,佛手瓜,丝瓜,冬瓜
浆果类:番茄,茄子,辣椒
荚果类:菜豆,豇豆,刀豆,豌豆,黄秋葵
6.种子类
籽用西瓜,莲籽,芡实
二,农业生物学分类法
以蔬菜的农业生物学特性包括产品器官的形成特性和
繁殖特性进行分类,将蔬菜分为11类.
1.根菜类:包括萝卜,胡萝卜,大头菜等.以其膨大的
直根为食用部分.
2.白菜类:包括白菜,芥菜及甘蓝等,以柔嫩的叶丛或
叶球为食用器官.
3.绿叶蔬菜:以其幼嫩的绿叶或嫩茎为食用器官的蔬
菜,如莴苣,芹菜,菠菜,茼蒿,苋菜,蕹菜等.
4.葱蒜类:包括洋葱,大蒜,大葱,韭菜等,叶鞘基部
能膨大而形成鳞茎,所以也叫做"鳞茎类".
5.茄果类:包括茄子,番茄及辣椒.同属茄科,在生物
学特性和栽培技术上都很相似.
6.瓜类:包括南瓜,黄瓜,西瓜,甜瓜,瓠瓜,冬瓜,丝瓜,苦瓜等.茎为蔓性,雌雄同株异花.
7.豆类:包括菜豆,豇豆,毛豆,刀豆,扁豆,豌豆及蚕豆.大都食用其新鲜的种子及豆荚.
8.薯芋类:包括一些地下根及地下茎的蔬菜,如马铃薯,山药,芋,姜等.富含淀粉,能耐贮藏.
9.水生蔬菜:是指一些生长在沼泽或浅水地区的蔬菜.主要有藕,茭白,慈姑,荸荠,菱和水芹等.
10.多年生蔬菜:如香椿,竹笋,金针菜,石刁柏,佛手瓜,百合等.一次繁殖以后,可以连续采收.
11.食用菌类:包括蘑菇,草菇,香菇,木耳等,人工栽培和野生或半野生.

### 使用Transformer模型实现蔬菜图像分类 #### 环境准备 为了使用 Transformer 实现蔬菜图像分类,首先需要安装必要的依赖库。可以借助 Hugging Face 提供的 `transformers` 库来简化这一过程[^2]。以下是所需的主要 Python 包及其用途: - **torch**: PyTorch 是深度学习框架之一,支持 GPU 加速计算。 - **transformers**: 提供丰富的预训练模型和工具函数。 - **datasets**: 数据集加载与处理。 可以通过以下命令完成环境配置: ```bash pip install torch torchvision transformers datasets ``` --- #### 数据预处理 在实际应用中,原始图像通常需要经过一系列预处理才能输入到模型中。常见的预处理步骤包括但不限于调整分辨率、归一化像素值以及可能的数据增强操作[^3]。例如,在 `crop.py` 文件中提到的技术可用于标准化输入图像尺寸并提高模型泛化能力。 对于蔬菜分类任务,建议采用如下方式对数据进行预处理: 1. 调整所有图像至固定大小(如 224×224 像素); 2. 对 RGB 通道执行均值减法与标准差除法以规范化数值范围; 3. 可选地加入随机翻转、亮度对比度调节等策略扩充样本数量。 代码示例展示了一个简单的图像转换流程: ```python from torchvision import transforms data_transforms = transforms.Compose([ transforms.Resize((224, 224)), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) ``` --- #### 构建分类模型 当前主流的方法是基于 Vision Transformers (ViTs),这是一种专门为视觉任务设计的 Transformer 结构。下面介绍如何利用 ViT 预训练权重快速搭建适合特定领域——即蔬菜识别的应用程序。 ##### 初始化模型 Hugging Face 平台提供了大量已训练好的基础版本可供下载选用。这里选取官方推荐的一个轻量化选项作为起点,并针对新类别重新定义最后一层全连接部分以便适配我们的需求。 实例化模型时需指定参数如下所示: ```python from transformers import ViTForImageClassification, ViTFeatureExtractor num_labels = len(set(['Potato', 'Garlic', 'Onion', 'Tomato', 'Green Chili'])) # 替换为真实标签集合长度 model_name_or_path = "google/vit-base-patch16-224" feature_extractor = ViTFeatureExtractor.from_pretrained(model_name_or_path) model = ViTForImageClassification.from_pretrained( model_name_or_path, num_labels=num_labels, ignore_mismatched_sizes=True ) ``` 此处需要注意的是,由于目标域发生了变化(从通用对象转变为特定农产品),因此必须设置标志位允许忽略形状不匹配问题。 --- #### 微调阶段 接下来就是至关重要的迁移学习环节了。通过对少量标注过的本地数据再次迭代优化权值分布,可以使原本擅长广泛认知世界的公共骨干网更加专注于解决手头的具体挑战。 假定我们已经准备好了一组带标记的照片文件夹结构,则可按照常规监督模式开展训练活动。期间要记得监控验证指标表现情况及时调整超参组合直至达到满意效果为止。 伪代码片段给出了大致轮廓: ```python import torch.optim as optim from torch.utils.data import DataLoader from sklearn.model_selection import train_test_split train_loader, val_loader = prepare_dataloaders(...) # 自定义辅助功能获取批次生成器 criterion = nn.CrossEntropyLoss() optimizer = optim.AdamW(model.parameters(), lr=1e-5) for epoch in range(num_epochs): for images, labels in train_loader: optimizer.zero_grad() outputs = model(**feature_extractor(images, return_tensors="pt")) loss = criterion(outputs.logits, labels) loss.backward() optimizer.step() evaluate_on_validation_set(val_loader) # 定期评估性能提升幅度 ``` --- #### 推理部署 一旦完成了充分训练之后就可以将其导出保存下来用于后续在线服务或者嵌入式设备当中去了。预测单张未知种类的新图只需要简单几步即可完成整个推断链条运作起来。 最终形式化的表达如下所列: ```python def predict_vegetable(image_path): image = Image.open(image_path).convert('RGB') inputs = feature_extractor(images=image, return_tensors="pt") with torch.no_grad(): logits = model(**inputs).logits predicted_class_idx = logits.argmax(-1).item() return model.config.id2label[predicted_class_idx] print(predict_vegetable("path_to_your_image.jpg")) # 输出对应名称字符串 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值