#python-3.x #tensorflow2.0 #amazon-sagemaker #tfrecord #image-classification
Вопрос:
Я нахожусь в процессе настройки пакетного задания SageMaker с использованием TFRecords, и сначала мне нужно скрыть свои изображения в TFRecords. Примечание: Моя модель классификации изображений считывает строку в кодировке base64.
Чтобы конвертировать мои изображения в TFRecords, я могу выполнить любое из следующих действий:
Прочитайте изображение, получите массив изображений numpy, а затем:
image = PIL.Image.open('../tmp/UAD_10k/IMAGE_xxx.jpg')
value = np.asarray(image)
option1 = tf.train.BytesList(value = [tf.compat.as_bytes(value.tostring())])
option2 = tf.train.BytesList(value = [tf.io.serialize_tensor(value).numpy()])
option3 = tf.train.BytesList(value = [base64.urlsafe_b64encode(value)])
Я получаю три разных вывода для каждого из этих вариантов для одного и того же изображения. Может ли кто-нибудь объяснить, в чем разница между этими вариантами и какой из них является правильным для моего варианта использования? Как я уже упоминал, мне нужно передать эти записи TF в модель классификации изображений, которая принимает строку в кодировке base64. Ниже приведен мой файл input_handler. Поэтому, когда я разделяю запись TF на изображение и читаю, мне нужно, чтобы encoded_image был строкой в кодировке base64.
Я попытался прочитать запись TFRecord и проверить, является ли она строкой в кодировке base64 ни в одном из вариантов.
import tensorflow as tf
from google.protobuf.json_format import MessageToDict
raw_dataset = tf.data.TFRecordDataset('../tmp/content/1_105images.tfrecords')
for raw_record in raw_dataset.take(1):
example = tf.train.Example()
example.ParseFromString(raw_record.numpy())
example_feature = MessageToDict(example.features)['feature']
encoded_image = example_feature['raw_image']['bytesList']['value']
def isBase64_(s):
try:
return base64.b64encode(base64.b64decode(s)) == s
except Exception:
return False
isBase64_(encoded_image[0])
Вывод является ложным. Это тот самый input_handler.py код.
if context.request_content_type == 'application/x-tfexample':
payload = data.read()
example = tf.train.Example()
example.ParseFromString(payload)
example_feature = MessageToDict(example.features)['feature']
encoded_image = example_feature['raw_image']['bytesList']['value'][0]
print(encoded_image)
instance = [encoded_image]
return json.dumps({"instances": [instance]})
else:
_return_error(415, 'Unsupported content type "{}"'.format(context.request_content_type or 'Unknown'))
Большое спасибо за вашу помощь