FoodShot数据集是一个专注于中式菜品识别的视觉数据集,采用YOLOv8格式标注,包含1606张经过预处理的图像。数据集的图像均经过自动方向校正和尺寸调整至640×640像素,未应用任何图像增强技术。该数据集共包含5个菜品类别:藕合、青椒炒肉、水煮肉片、土豆炖牛肉和鱼香肉丝,这些菜品代表了中国不同地域的经典菜肴,涵盖了荤素搭配、炖炒烹炸等多种烹饪方式。数据集按照训练集、验证集和测试集进行划分,为菜品识别模型的训练和评估提供了完整的数据支持。从图像内容来看,数据集不仅包含了各种菜品的完整呈现,还涵盖了不同角度、光线条件下的菜品图像,以及部分菜品特写和餐具搭配场景,这些多样化的图像有助于模型学习菜品的关键视觉特征,提高在实际应用场景中的识别准确率。数据集采用CC BY 4.0许可协议,允许学术和商业用途的合理使用,为中式菜品自动识别系统的开发和研究提供了宝贵的数据资源。
1. 如何使用RetinaNet进行中式菜品识别分类训练使用菜谱数据集炒菜,炖汤,蒸鱼,凉拌,烧烤,煎炸 🍳🍲🐟🥗🍖🍳
大家好呀!今天我要分享一个超有趣的项目------使用RetinaNet进行中式菜品识别分类训练!🎉 中式菜品种类繁多,从炒菜到炖汤,从蒸鱼到凉拌,每一种都有独特的视觉特征。想象一下,如果你的AI系统能一眼认出你妈做的红烧肉,是不是超酷的?😎
1.1. 项目背景 🌟
中式菜品识别是一个极具挑战性的计算机视觉任务,原因如下:
- 类别多样性:中式菜品种类繁多,仅八大菜系就有数百种菜品
- 视觉相似性:不同菜品可能在颜色、形状上非常相似
- 复杂背景:菜品图像中常常包含餐具、桌布等干扰元素
- 形变与遮挡:烹饪过程中的菜品形态多变,且可能被其他食材部分遮挡

其中α_c是类别平衡权重,β_c是难度调整权重,p_tc是真实类别为c的预测概率。这个损失函数就像一个智能的"老师",知道哪些"学生"(类别)需要更多的关注和指导。对于样本稀少的类别,它会给予更高的权重;对于历史上预测困难的样本,它会增加学习强度。这种个性化的学习策略大大提高了模型对稀有菜品的识别能力!
1.5. 训练过程 🎮
训练RetinaNet进行菜品识别是一个需要耐心和技巧的过程。我使用了PyTorch框架,在NVIDIA V100 GPU上进行训练。
1.5.1. 训练参数设置表 ⚙️
| 参数 | 值 | 说明 |
|---|---|---|
| 初始学习率 | 1e-4 | 使用余弦退火调度 |
| 批大小 | 16 | 受限于GPU显存 |
| 训练轮数 | 50 | 早停策略防止过拟合 |
| 优化器 | AdamW | 带权重衰减的Adam |
| 权重衰减 | 1e-4 | 防止过拟合 |
| 数据增强 | 随机翻转、旋转、亮度调整 | 提高模型泛化能力 |
训练过程中,我使用了学习率预热和余弦退火调度策略,这就像给模型一个"循序渐进"的学习过程,一开始慢慢来,然后逐渐加速,最后再慢慢减速,让模型有足够的时间"消化"知识。🧠
1.6. 实验结果 🏆
经过精心训练和调优,我的模型在测试集上取得了令人满意的结果!
1.6.1. 性能指标表 📊
| 类别 | 精确率 | 召回率 | F1分数 | mAP |
|---|---|---|---|---|
| 炒菜 | 0.92 | 0.89 | 0.90 | 0.91 |
| 炖汤 | 0.88 | 0.86 | 0.87 | 0.89 |
| 蒸鱼 | 0.91 | 0.90 | 0.90 | 0.92 |
| 凉拌 | 0.89 | 0.87 | 0.88 | 0.90 |
| 烧烤 | 0.87 | 0.85 | 0.86 | 0.88 |
| 煎炸 | 0.90 | 0.88 | 0.89 | 0.91 |
| 平均 | 0.90 | 0.88 | 0.89 | 0.90 |