接上一篇:
< Google Colab 有关 > 在 Google Drive 创建并存储 模型: EfficientNetV2B3 项目: 绿豆芽 (1)-优快云博客
这篇涉及训练模型(Image)内容
一、数据的准备
1. 收集数据
要有足够数量的绿豆到豆芽不同生长阶段的图像,要有不同光照、角度和背景的图像,满足多样性。
2. 图片标注
为每个图片进行标注正确的类别标签:绿豆、发芽初期、发芽中期、豆芽成熟, 病害,缺水等等,不能太多,也不能太简单。
3. 数据多样性
防止 overfitting (“过拟合”),需要随机旋转、翻转、缩放、裁剪图片等, 可以用 tensorflow 的 ImageDataGenerator 来实现数据增强。
4. 划分数据
常用的方法,将数据划分为:
- 训练集:用于训练模型使用的图片
- 验证集:用于在训练过程中监控模型性能和调整超参数。
- 测试集:用于最终评估模型能力的图片
5. 图片要求
- 包含不同光照条件、角度或背景的图像,每个集合都应包含这些变化的代表性样本。
- 每个集合都应能代表整个数据集。
- 任何一张图片只能在一个集中出现。
- 训练集要有最多的图片,验证集和测试集也需要足够大有涵盖多样性。
- 标签必须一致、准确
- 使用清晰、高分辨率的图像才会有更好的结果
- 所有集合中的图像质量同等
- 不要对验证集和测试集进行数据增强
6. 其它的考虑
不同设备产生的图片可以会不一致,要对图片进行预处理再使用。如:裁剪到相同的大小,使用一致的分辨率等。
数据源一定要真实!
在这个实践,使用尺寸为 600x600
需要将图像像素值归一化到 [0,1] 或 [1,1]范围内。加快模型训练收敛速度,提高模型训练的稳定性,减少计算复杂度,方便激活函数的处理。
归一化方法
通过调用编程函数 NumPy、OpenCV、TensorFlow/Keras 实现
归一化到 [0, 1]:
- 将每个像素值除以 255。
- 这种方法简单易懂,适用于大多数图像处理任务。
归一化到 [-1, 1]:
- 将每个像素值除以 127.5,然后减去 1。
- 这种方法适用于使用 Tanh 激活函数的模型。
以TensorFlow/Keras为例:
import tensorflow as tf
def normalize_image_tf(image_tensor, normalization_range):
if normalization_range == [0, 1]:
normalized_tensor = tf.image.convert_image_dtype(image_tensor, tf.float32)
elif normalization_range == [-1, 1]:
normalized_tensor = tf.image.convert_image_dtype(image_tensor, tf.float32)
normalized_tensor = (normalized_tensor * 2.0) - 1.0
else:
raise ValueError("Unsupported normalization range. Use [0, 1] or [-1, 1]")
return normalized_tensor
image = tf.io.read_file('image.jpg')
image = tf.image.decode_jpeg(image, channels=3)
normalized_image = normalize_image_tf(image, [0,1])
print(normalized_image.shape)
第一课同大部分人一样,在 Coursera 上看完 吳恩達 AI 入门的 4 个视频。跟我之前读的那些书没什么区别。
印象深刻的是用 AI +激光器除草。去年9月,尝试用 Python 写代码,那时已经办了 YouTube 会员看各种 AI 视频满一年,但没有一个完整的内容可以解决我想训练自己 AI 的众多疑问。直到微软免费 AI 课程考试,这是一个里程碑。
第二个里程碑是 6 天前开始关注的 Google Colab 这个工具,解决了我没有显卡的困境,它提供硬件,还与 Google Drive 互连互通。 应该能做了,恩,开始。
有帮助的 APP/工具:
Google drive ocamlfuse vps:Ubuntu 上访问我的 Google Drive
BaiduPCS-Go vps:Ubuntu 上访问我的 狗度盘
* 阿里云.东京站* 去年12月入的,有着不错的网络速度,512MB 30/月给表妹做电商用。我已经写了 3 篇文章,没过审核,是你知道的原因。
今天,开始种豆芽菜~