当前位置: 首页 > news >正文

水果蔬菜分类图像分类 智慧化农业蔬菜水果分类数据集 果蔬分类数据集的应用 智慧农业数据集 生鲜识别 超市自动结算 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=...)
小样本问题利用迁移学习,冻结预训练模型的部分层;增加数据增强策略(旋转、缩放、颜色抖动等)

http://www.cnnetsun.cn/news/3923260.html

相关文章:

  • 探究东莞网站建设哪家专业,揭秘行业背后不为人知的真相与价值
  • JMeter脚本优化实战:从入门到精通,打造高性能压测方案
  • 从Jeff Dean工程遗产看分布式系统演进与开发者深度能力构建
  • 广告账户的「体检报告」:ROAS不是唯一指标,这4个数据才是真正的预警信号
  • 电信用户流失预测:机器学习实战与特征工程解析
  • 南阳网站建设8iwang深度解析:如何让本地中小企业的线上大门更加宽敞明亮
  • 2026版Android Studio安装与配置全指南
  • 跨平台GPU开发实战:CUDA环境搭建与Mac远程开发指南
  • Unity开发必知:API兼容级别、C#版本与项目稳定的三角关系
  • 设计带操作界面的应用程序
  • 揭秘建设银行江西分行官方网站的便捷服务与数字化转型之路,打造百姓身边的贴心金融管家
  • Redisson MultiLock 原理
  • Claude Code 安装配置全攻略:从 Node.js 环境到 Coding Plan 集成
  • 大一新生必读:大学四年高效成长指南
  • Unity时间戳转换性能优化:从DateTime到高效实现的深度解析
  • 轻量级HTTP压测工具Weighttp:原理、实战与性能分析指南
  • Unity开发中C#静态成员深度解析:从内存模型到实战避坑指南
  • YOLO乒乓球比赛落点与旋转类型目标检测数据集
  • 义乌本地生活代运营服务解析与选择指南
  • 国内AI产业格局演进:从技术竞赛到生态构建与垂直应用
  • MyBatis中resultType=“_byte[]“的用法讲解
  • 深度解析宜宾网站建设88sou如何选择:中小企业避坑指南与实战策略
  • 多体动力学仿真技术:从基础建模到高级应用
  • Spring Session与Spring Security整合Redis实现分布式会话管理
  • 揭秘泸州中泸集团建设有限公司网站背后的实力、服务与初心:为何它是您值得信赖的建筑合作伙伴
  • 儿童教育App无广告技术实现与用户体验优化
  • 新能源配电网中联合储能系统的MATLAB优化调度实践
  • FastAPI+Unicorn无依赖打包部署实战
  • AIoT技术解析:从原理到五大高价值应用场景
  • WPF+.NET6+SqlSugar全栈权限管理平台开发实践