on 20Feb.2025 by Dave
近展:
前天暴雨,从晴天的 23c,后半夜里降温到零下2度, 现在是 -1c 度,预报说卯辰巳时会是 -8 摄氏度,新的历史记录将诞生。 全屋空调加热到 21 度,噪音很大,鼻子很难受,头痛。
戴个降噪耳机刷剧,刷文章,规划一再改动,代码也越来越完整,细节已经具体化,到执行条件。
之前有关的文章:
< Google Colab 有关 > 在 Google Drive 创建并存储 模型: EfficientNetV2B3 项目: 绿豆芽 (1)-优快云博客
< Google Colab 有关 > 在 Google Drive 创建并存储 模型: EfficientNetV2B3 项目: 绿豆芽 (2)-优快云博客
推荐看一眼,再看这篇可以了解我的进展与变化。
v3版的设计逻辑:
目标
- 使用 EfficientNetV2B3 模型,绿豆芽分 6 个生长阶段(“1干原豆", "2浸泡豆", "3胚根破种皮", "4胚轴伸长", "5胚芽突破", "6子叶”)。 注:中国菜豆芽 1-4,5-6 就是种植。
- 每天拍摄照片并增量训练,避免每次从头训练。
- 在 Google Colab 上运行,利用 Google Drive 存储数据集和模型。
设计逻辑
一、分步骤执行
- 步骤 1:创建初始环境和模型
- 步骤 2:每天提交照片到数据集
- 步骤 3:增量训练模型 这篇文章是 v3.1 (第三次大修改)
- 步骤 4:预测图片
- 以上在 Google Colab 1、3 是代码执行, 2 是手工操作,4是代码。
二、训练策略
- 利用预训练模型(ImageNet)只微调顶层。
- 避免破坏已有知识。
- 根据数据量动态调整轮数(epoch)
三、数据管理
- 数据存储在 Google Drive,明确路径与目录解构
- 照片 600x600,与模型输入也是 600
代码可能还会变化,只以图来参考。有最终版再放出。
我也是摄影爱好者,对数据集的拍摄有很多未知。花费 1/2 - 2/3 时间在搜寻答案,为拍摄前的解惑。这方面中文区匮乏,没有明确的定义与的结论。英文的文献到是有很多,加上 Gemini 有了语音功能,别人可能看到过一个胖子对着手机聊天,有时在笔记本上写着潦草的符号。
上传数据集目录结构:
dataset_MungBeanSprouts/ ├─ 干原豆/ │ └─ img1.jpg ├─ 浸泡豆/ │ └─ img2.jpg ├─ 胚根破种皮/ │ └─ img3.jpg ├─ 胚轴伸长/ │ └─ img4.jpg ├─ 胚芽突破/ │ └─ img5.jpg └─ 子叶/ └─ img6.jpg
测试集放入 /dataset_MungBeanSprouts_test/
拍摄策略 6 阶段如下:
1. 干原豆
干绿豆是未发芽的颗粒,个体差异小,多颗能展示整体特征。
拍摄方式: 散放在白纸上,微距拍摄,占画面 70%-80%,裁剪到 600x600。
2. 浸泡豆
浸泡后的豆子仍是颗粒状态,主要特征是膨胀和湿润感。
拍摄方式: 放 10 颗在浅水或湿厨房纸上,微距拍摄,裁剪到 600x600。
3. 胚根破种皮
胚根刚突破种皮是毫米单位,其细节微小,多颗会互相遮挡,单一绿豆才可以体现。
拍摄方式: 微距拍摄,聚焦胚根,裁剪到 600x600。
4. 胚轴伸长
胚轴变长到厘米后,需要突出长度和白色条胚结构,一堆会混乱,只拍个体。
拍摄方式: 微距或普通镜头,侧面或俯视,裁剪到 600x600。
5. 胚芽突破
胚芽刚出现,要突出细节,单一拍摄。
拍摄方式: 微距拍摄,聚焦胚芽和胚轴交界,裁剪到 600x600。
6. 子叶
子叶展开,是最关键的特征,需要让模型展示清晰叶片形状和颜色,拍个体。
拍摄方式: 微距或普通镜头,顶部拍摄,裁剪到 600x600。
策略小结:
- 早期阶段(干原豆、浸泡豆): 拍摄 5-10 颗 一同拍摄,展示群体特征。
- 后期阶段(胚根破种皮到子叶): 拍摄“单一绿豆芽”,突出个体细节。
- (可选)两种以 5/5 比例拍摄,增加数据多样性。
拍摄考虑:
- 一堆绿豆: 模型可能学习整体模式(比如颜色分布、颗粒密度),但细节(如胚根、子叶)可能被忽略。
- 单一绿豆: 模型聚焦个体特征(如形状、纹理),更适合区分生长阶段。
- 因为num_classes 是分为 6 个阶段,细分后,细节更重要,后期阶段用单一绿豆芽为主。