如何为Google Cloud Vertex AI创建单标签图像数据集导入文件
生成Vertex AI图像分类导入文件的正确脚本
问题背景
你在Google Cloud Storage(GCS)中有如下层级结构的存储桶:
dataset/class1/image1.png image2.png .. dataset/class2/image1.png image2.png .. dataset/class3/image1.png image2.png ..
需要生成每行格式为gs://dataset/classX/imageY.png, classX的导入文件,用于Vertex AI模型训练。
原脚本问题分析
你提供的脚本存在以下问题:
- 未过滤目录:
gsutil ls -r会同时列出文件和目录,导致导入文件中混入无效的目录路径 - sed无法执行shell命令:
sed -e 's/$/$(basename $)/'只是将字符串$(basename $)追加到行尾,不会实际执行basename命令 - 变量未定义:脚本中使用了未赋值的
filename变量,导致sed命令报错 - 类别提取错误:
basename会提取文件名,而非所需的类别目录名
修正后的脚本
方法一:循环处理(可读性强)
export BUCKET="你的存储桶名称" export IMPORT_DATA="导入文件路径(如import.csv)" # 清空目标文件,避免重复追加内容 > "$IMPORT_DATA" # 递归列出所有PNG文件,过滤目录后逐行生成格式内容 gsutil ls -r gs://$BUCKET/**/*.png | grep -v "/$" | while read -r uri; do # 从URI中提取类别目录名(倒数第二个路径段) class=$(echo "$uri" | awk -F '/' '{print $(NF-1)}') echo "$uri, $class" >> "$IMPORT_DATA" done
方法二:awk一键处理(执行效率高)
export BUCKET="你的存储桶名称" export IMPORT_DATA="导入文件路径(如import.csv)" # 直接通过awk完成过滤和格式转换 gsutil ls -r gs://$BUCKET/**/*.png | grep -v "/$" | awk -F '/' '{print $0", "$(NF-1)}' > "$IMPORT_DATA"
脚本说明
gsutil ls -r gs://$BUCKET/**/*.png:递归列出存储桶中所有PNG格式的图片文件grep -v "/$":排除末尾带有/的目录行,只保留有效文件路径awk -F '/' '{print $0", "$(NF-1)}':以/为分隔符,输出原URI加上逗号和倒数第二个路径段(即类别目录名)
内容的提问来源于stack exchange,提问作者tashuhka
相关产品推荐
相关产品推荐

