如何在Jupyter Notebook中加载Vertex AI导出的JSONL图像标注数据集
修改Vertex AI训练代码加载导出的JSONL标注数据集实现训练
一、读取并解析JSONL标注文件
导出的JSONL文件存储在GCS上,可直接通过文件系统工具读取并解析每条样本的图像路径与标签:
import json import gcsfs # 初始化GCS文件系统客户端 fs = gcsfs.GCSFileSystem() # 指定JSONL文件的GCS路径 jsonl_gcs_path = "gs://your-bucket/your-dataset-path/annotations.jsonl" # 存储解析后的图像-标签对 dataset_samples = [] # 逐行解析JSONL内容 with fs.open(jsonl_gcs_path, 'r') as file: for line in file: sample_data = json.loads(line.strip()) # 提取图像的GCS地址 image_uri = sample_data['imageGcsUri'] # 提取分类标注的类别名称 category_label = sample_data['classificationAnnotation']['displayName'] dataset_samples.append((image_uri, category_label))
二、适配训练代码的数据加载流程
将解析后的样本转换为模型训练可用的数据集格式,替换原样例中加载Vertex AI标准数据集的逻辑:
1. 图像预处理与数据集构建
以TensorFlow为例,实现图像加载、预处理并构建训练/验证数据集:
import tensorflow as tf def preprocess_image(image_uri): # 从GCS读取图像文件 image_bytes = tf.io.read_file(image_uri) # 根据图像格式解码(PNG/JPG) image = tf.image.decode_png(image_bytes, channels=3) # 调整图像尺寸至模型输入要求 image = tf.image.resize(image, [224, 224]) # 应用对应模型的预处理规则(如MobileNetV2的预处理) image = tf.keras.applications.mobilenet_v2.preprocess_input(image) return image # 拆分图像路径与标签列表 image_uris = [sample[0] for sample in dataset_samples] labels = [sample[1] for sample in dataset_samples] # 将字符串标签转为数字编码 label_mapping = {label: idx for idx, label in enumerate(set(labels))} encoded_labels = [label_mapping[label] for label in labels] # 构建TensorFlow数据集 tf_dataset = tf.data.Dataset.from_tensor_slices((image_uris, encoded_labels)) # 并行映射图像预处理逻辑 tf_dataset = tf_dataset.map(lambda uri, lbl: (preprocess_image(uri), lbl), num_parallel_calls=tf.data.AUTOTUNE) # 划分训练/验证集并做批处理 train_split = int(0.8 * len(dataset_samples)) train_dataset = tf_dataset.take(train_split).shuffle(1000).batch(32).prefetch(tf.data.AUTOTUNE) val_dataset = tf_dataset.skip(train_split).batch(32).prefetch(tf.data.AUTOTUNE)
2. 替换原训练代码的数据源
找到原样例中使用aiplatform库加载标准数据集的代码段,直接替换为上述构建完成的train_dataset和val_dataset,模型定义、训练循环等逻辑可直接复用。
三、验证数据解析正确性
训练前抽取部分样本验证解析结果,确保图像路径与标签匹配无误:
# 验证前3条样本 for uri, lbl in dataset_samples[:3]: print(f"图像GCS路径: {uri}, 标注标签: {lbl}")
内容的提问来源于stack exchange,提问作者Robert Rowntree
相关产品推荐
相关产品推荐

