news 2026/8/9 6:34:36

水果蔬菜分类图像分类 智慧化农业蔬菜水果分类数据集 果蔬分类数据集的应用 智慧农业数据集 生鲜识别 超市自动结算 AI营养分析 移动端果蔬识别APP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
水果蔬菜分类图像分类 智慧化农业蔬菜水果分类数据集 果蔬分类数据集的应用 智慧农业数据集 生鲜识别 超市自动结算 AI营养分析 移动端果蔬识别APP

水果蔬菜分类图像分类 智慧化农业蔬菜水果分类数据集 果蔬分类数据集的应用 智慧农业数据集 生鲜识别 超市自动结算 AI营养分析 移动端果蔬识别APP

智慧化-果蔬数据集(chuntu)
此数据集包含以下果蔬的图像:
水果:香蕉,苹果,梨,葡萄,橙子,猕猴桃,西瓜,石榴,菠萝,芒果。

蔬菜:黄瓜、胡萝卜、辣椒、洋葱、土豆、柠檬、西红柿、raddish、甜菜根、卷心菜、生菜、菠菜、大豆、花椰菜、甜椒、辣椒、萝卜、玉米、甜玉米、红薯、辣椒、辣椒酱、生姜、大蒜、豌豆、茄子。

数据集包含三个文件夹:

训练集(每个类别文件夹包含100张图片)

测试集(每个类别文件夹包含10张图像)

验证集(每个类别文件夹包含10张图像)

以上每个文件夹都包含不同水果和蔬菜的子文件夹,其中显示了相应类别的图像


1

1

以下是果蔬数据集(Chuntu)的详细表格化描述:


📊 一、数据集总体信息

项目描述
数据集名称Chuntu 果蔬图像数据集
任务类型图像分类(Image Classification)
类别总数36 类(10 种水果 + 26 种蔬菜)
图像总数4,320 张
图像格式通常为.jpg.png(未明确说明,但按常规推断)
应用场景智慧农业、生鲜识别、超市自动结算、AI营养分析、移动端果蔬识别APP

🍎🥦 二、类别列表与分类统计

✅ 水果类(10 类)
序号中文名英文名
1香蕉Banana
2苹果Apple
3Pear
4葡萄Grape
5橙子Orange
6猕猴桃Kiwi
7西瓜Watermelon
8石榴Pomegranate
9菠萝Pineapple
10芒果Mango
✅ 蔬菜类(26 类)

⚠️ 注意:原始描述中“辣椒”重复出现多次,“辣椒酱”可能为异常项(非生鲜食材),此处按字面保留,但建议使用时核查。

序号中文名英文名备注
11黄瓜Cucumber
12胡萝卜Carrot
13辣椒Chili Pepper可能指新鲜辣椒
14洋葱Onion
15土豆Potato
16柠檬Lemon常归为水果,此处列在蔬菜中
17西红柿Tomato植物学为水果,烹饪归蔬菜
18萝卜(raddish)Radish拼写应为 radish
19甜菜根Beetroot
20卷心菜Cabbage
21生菜Lettuce
22菠菜Spinach
23大豆Soybean可能指鲜豆荚
24花椰菜Cauliflower
25甜椒Bell Pepper
26辣椒Chili Pepper重复项(可能指不同品种)
27萝卜Radish与第18项重复(拼写差异)
28玉米Corn
29甜玉米Sweet Corn可能与玉米重复
30红薯Sweet Potato
31辣椒酱Chili Sauce❗非生鲜图像,建议剔除或单独处理
32生姜Ginger
33大蒜Garlic
34豌豆Peas
35茄子Eggplant
36(待确认)若“辣椒”“萝卜”等去重后不足26类,可能存在命名误差

🔍类别去重建议
实际有效类别可能为32–34 类,因存在重复(如“辣椒”出现3次、“萝卜”2次)及异常项(“辣椒酱”)。建议检查原始文件夹数量以确认真实类别数。


📁 三、数据划分详情(按当前描述)

子集每类图像数类别数总图像数
训练集(train)100 张/类3636 × 100 =3,600 张
验证集(val)10 张/类3636 × 10 =360 张
测试集(test)10 张/类3636 × 10 =360 张
总计4,320 张

✅ 文件结构示例:

chuntu_dataset/ ├── train/ │ ├── banana/ │ ├── apple/ │ └── ... (36 folders) ├── val/ │ ├── banana/ │ └── ... └── test/ ├── banana/ └── ...

⚙️ 四、适用模型与框架

任务推荐模型框架
图像分类ResNet50, EfficientNet-B0, MobileNetV3, ViT-TinyPyTorch / TensorFlow / Keras
轻量化部署MobileNetV2 + TensorFlow LiteAndroid/iOS APP
迁移学习使用 ImageNet 预训练权重微调Hugging Face Transformers, timm

⚠️ 五、使用注意事项

  1. 类别重复问题
    • “辣椒”“萝卜”多次出现,需确认是否为不同品种(如青椒/红椒、白萝卜/胡萝卜),否则应合并。
  2. 异常类别
    • “辣椒酱”为加工品,与其他生鲜类别不一致,建议单独处理或移除。
  3. 柠檬归类
    • 柠檬通常视为水果,若用于烹饪场景可保留于蔬菜,但需注意标签一致性。
  4. 数据平衡性
    • 每类样本量均衡(100/10/10),有利于公平训练,但总量偏少,建议结合数据增强。

以下是基于果蔬数据集(Chuntu)使用PyTorch进行图像分类的完整训练代码示例。该代码包括数据加载、模型定义、训练、验证和测试过程。


📁 一、项目结构建议

chuntu_pytorch/ ├── dataset.py# 数据集加载与预处理├── model.py# 模型定义├── train.py# 主训练脚本├── predict_demo.py# 推理演示└── data/ ├── train/# 训练集├── val/# 验证集└── test/# 测试集

📄 二、数据集加载与预处理dataset.py

# dataset.pyimportosfromtorch.utils.dataimportDataset,DataLoaderfromtorchvisionimporttransformsfromPILimportImageclassFruitVegetableDataset(Dataset):def__init__(self,root_dir,transform=None):self.root_dir=root_dir self.transform=transform self.classes=sorted(os.listdir(root_dir))self.class_to_idx={cls_name:idxforidx,cls_nameinenumerate(self.classes)}self.image_paths=[]self.labels=[]forcls_nameinself.classes:cls_dir=os.path.join(root_dir,cls_name)ifnotos.path.isdir(cls_dir):continueforimg_nameinos.listdir(cls_dir):ifimg_name.lower().endswith(('png','jpg','jpeg')):self.image_paths.append(os.path.join(cls_dir,img_name))self.labels.append(self.class_to_idx[cls_name])def__len__(self):returnlen(self.image_paths)def__getitem__(self,idx):img_path=self.image_paths[idx]label=self.labels[idx]image=Image.open(img_path).convert('RGB')ifself.transform:image=self.transform(image)returnimage,labeldefget_loader(root_dir,batch_size=32,num_workers=4):transform=transforms.Compose([transforms.Resize((224,224)),# 统一尺寸transforms.RandomHorizontalFlip(),# 数据增强transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])# ImageNet均值方差])dataset=FruitVegetableDataset(root_dir=root_dir,transform=transform)loader=DataLoader(dataset,batch_size=batch_size,shuffle=True,num_workers=num_workers)returnloader,dataset.classes

📄 三、模型定义model.py

# model.pyimporttorchimporttorch.nnasnnimporttorchvision.modelsasmodelsdefget_model(num_classes):model=models.resnet50(pretrained=True)# 使用ImageNet预训练权重num_ftrs=model.fc.in_features model.fc=nn.Linear(num_ftrs,num_classes)returnmodeldeftrain_model(model,dataloaders,criterion,optimizer,num_epochs=25,device='cuda'):best_model_wts=model.state_dict()best_acc=0.0forepochinrange(num_epochs):print(f'Epoch{epoch}/{num_epochs-1}')print('-'*10)forphasein['train','val']:ifphase=='train':model.train()else:model.eval()running_loss=0.0running_corrects=0forinputs,labelsindataloaders[phase]:inputs=inputs.to(device)labels=labels.to(device)optimizer.zero_grad()withtorch.set_grad_enabled(phase=='train'):outputs=model(inputs)_,preds=torch.max(outputs,1)loss=criterion(outputs,labels)ifphase=='train':loss.backward()optimizer.step()running_loss+=loss.item()*inputs.size(0)running_corrects+=torch.sum(preds==labels.data)epoch_loss=running_loss/len(dataloaders[phase].dataset)epoch_acc=running_corrects.double()/len(dataloaders[phase].dataset)print(f'{phase}Loss:{epoch_loss:.4f}Acc:{epoch_acc:.4f}')ifphase=='val'andepoch_acc>best_acc:best_acc=epoch_acc best_model_wts=model.state_dict()print(f'Best val Acc:{best_acc:4f}')model.load_state_dict(best_model_wts)returnmodel

🚀 四、主训练脚本train.py

# train.pyimporttorchimporttorch.optimasoptimfromtorch.utils.tensorboardimportSummaryWriterfrommodelimportget_model,train_modelfromdatasetimportget_loaderdefmain():# 设备配置device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")print(f"🚀 使用设备:{device}")# 加载数据train_loader,classes=get_loader('data/train')val_loader,_=get_loader('data/val')dataloaders={'train':train_loader,'val':val_loader}# 定义模型model=get_model(num_classes=len(classes)).to(device)# 定义损失函数和优化器criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(model.parameters(),lr=0.001)# 开始训练trained_model=train_model(model,dataloaders,criterion,optimizer,num_epochs=25,device=device)# 保存最佳模型torch.save(trained_model.state_dict(),'best_model.pth')if__name__=='__main__':main()

🔍 五、推理演示predict_demo.py

# predict_demo.pyfrommodelimportget_modelfromdatasetimportFruitVegetableDataset,transformsfromPILimportImageimporttorchdefmain():# 加载模型model=get_model(num_classes=36)# 根据实际类别数调整model.load_state_dict(torch.load('best_model.pth'))model.eval()# 类别映射class_names=['香蕉','苹果','梨','葡萄','橙子','猕猴桃','西瓜','石榴','菠萝','芒果','黄瓜','胡萝卜','辣椒','洋葱','土豆','柠檬','西红柿','萝卜','甜菜根','卷心菜','生菜','菠菜','大豆','花椰菜','甜椒','玉米','甜玉米','红薯','生姜','大蒜','豌豆','茄子']# 图像预处理transform=transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])# 推理单张图像image_path='sample_image.jpg'image=Image.open(image_path).convert('RGB')tensor_image=transform(image).unsqueeze(0)withtorch.no_grad():output=model(tensor_image)_,predicted=torch.max(output,1)predicted_class=class_names[predicted.item()]print(f"预测结果:{predicted_class}")if__name__=='__main__':main()

⚙️ 六、训练优化建议

问题解决方案
过拟合增加正则化项(如 L2 正则化)、使用 Dropout 层、减少模型复杂度(如改用 EfficientNet-B0)
类别不平衡对少数类进行过采样或对多数类欠采样;使用加权交叉熵损失函数(CrossEntropyLoss(weight=...)
小样本问题利用迁移学习,冻结预训练模型的部分层;增加数据增强策略(旋转、缩放、颜色抖动等)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 6:34:15

探究东莞网站建设哪家专业,揭秘行业背后不为人知的真相与价值

在这个数字化浪潮席卷全球的今天,互联网已经不再是仅仅作为一个信息展示的窗口,而是成为了企业生存和发展的命脉。特别是在珠三角制造业重镇——东莞,这里不仅有闻名全球的工厂,更有无数渴望通过互联网转型、突破地域限制的品牌和企业。当你拿着手机或电脑,搜索“东莞网站…

作者头像 李华
网站建设 2026/8/9 6:32:02

JMeter脚本优化实战:从入门到精通,打造高性能压测方案

1. 项目概述:为什么性能测试脚本需要优化?如果你已经能用JMeter跑起来一个性能测试,看到花花绿绿的图表,那恭喜你,你已经入门了。但很多朋友会卡在下一个阶段:脚本跑是能跑,可结果总感觉不对劲—…

作者头像 李华
网站建设 2026/8/9 6:31:16

从Jeff Dean工程遗产看分布式系统演进与开发者深度能力构建

最近在技术圈里,Jeff Dean 离开 Google 的消息引发了广泛讨论。作为一名长期关注系统架构和工程实践的开发者,我看到的不仅是这位传奇人物的职业变动,更是一个值得深思的信号:一个由“全能型工程巨匠”主导、以解决底层复杂系统问…

作者头像 李华
网站建设 2026/8/9 6:27:09

电信用户流失预测:机器学习实战与特征工程解析

1. 电信用户流失预测的业务背景电信行业正面临前所未有的用户流失压力。根据行业报告显示,全球主流电信运营商月均用户流失率高达2-3%,这意味着一个拥有5000万用户的运营商每月可能流失超过100万客户。这种流失带来的直接收入损失可达数千万美元&#xf…

作者头像 李华
网站建设 2026/8/9 6:25:17

南阳网站建设8iwang深度解析:如何让本地中小企业的线上大门更加宽敞明亮

在这个数字化浪潮席卷每一个角落的时代,如果你还觉得“网站”只是一个挂在网上的电子名片,那你可能已经错过了企业成长中最重要的一次机会。尤其是对于我们身处南阳这样一个历史底蕴深厚、文化底蕴丰富,同时又正在加速转型为现代工业和科技中心的城市来说,南阳网站建设8iwa…

作者头像 李华