S3 バケットからの入力として画像を含む TFX パイプラインを構築しています。TF Transform コンポーネントのステップで、TFX の SparseTensor 形式で保存された URL を使用して、一連の画像を読み込もうとしています。私はパイプラインの他のコンポーネントにそれを使用しており、Boto3 と S3FS の両方を一緒に使用すると問題が発生する可能性があると聞いたので、S3FS Python モジュールを使用してそうしようとしています (これは私が思うポイントのそばにあります)。
とにかく、S3 バケットへの接続を確立し、画像を読み込もうとしています。これが私のコードです(または、少なくとも問題に関連していると思われる部分):
s3 = s3fs.S3FileSystem()
with s3.open(str(inputs[key]), 'rb') as f:
for key in CV_FEATURES:
img = np.array(Image.open(io.BytesIO(f.read())))
img = tf.image.rgb_to_grayscale(img)
img = tf.divide(img, 255)
img = tf.image.resize_with_pad(img, 224, 224)
outputs[_fill_in_missing(key)] = img
s3.clear_instance_cache()
これを実行すると、無効な文字を含むバケットにアクセスしようとしたときに見た標準的なエラー メッセージが表示されます。
ParamValidationError: パラメーターの検証に失敗しました: 無効なバケット名 "SparseTensor(indices=Tensor("inputs": バケット名は正規表現 "^[a-zA-Z0-9.-_]{1,255}$" と一致するか、一致する ARN である必要があります)正規表現 "^arn:(aws). :(s3|s3-object-lambda):[az-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0 -9-]{1,63}$|^arn:(aws).: s3-outposts:[az-0-9]+:[0-9]{12}:outpost[/:][a-zA -Z0-9-]{1,63}[/:]アクセスポイント[/:][a-zA-Z0-9-]{1,63}$"
このエラーは、問題が行にあることを示しているwith s3.open(str(inputs[key]), 'rb') as f:
ため、S3 URL を正しく表す必要があります。URL は、元の CSV データセットのimage_pathbucket_name\key\file.jpg
という列に形式で格納されます(上記のコードで として表されるこの時点の前に SparseTensor に変換されます)。inputs[key]
問題は SparseTensor 形式ではなく、URL にあると思います。