اذهب إلى المحتوى
  • 1

كيف نقوم بتحويل مجموعة بيانات من صور إلى tfrecords في تنسرفلو Tensorflow

عامر ابراهيم

السؤال

لدي مجموعة صور jpeg ضمن مجلد، وملف نصي مقابل له يحتوي على اسم الملف وتسمية الفئة المرتبطة "labels".  والآن أحاول تحويل بيانات التدريب هذه إلى ملف tfrecords . لذا كيف يمكنني القيام بذلك؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 2

سأقوم بإنشاء قالب للقيام بذلك:

import numpy as np
import tensorflow.train.string_input_producer as qu
import tensorflow.train.start_queue_runners as sqr
import tensorflow as tf
# قائمة بالملفات التي سنقرأها
queue = qu(['tf.png'])
# قراءة الملفات
_, v = tf.WholeFileReader().read(queue)
#حسب نوع الصور التي لديك decode_jpeg  أو decode_png  استخدم 
image = tf.image.decode_png(v)
initialize = tf.initialize_all_variables()
with tf.Session() as sess:
  sess.run(initialize)
# ملء قائمة انتظار اسم الملف
c = tf.train.Coordinator()
threads = sqr(coord=c)
for i in range(1):  # طول القائمة التي لدينا
  image = image.eval() # الصورة ك تنسر
# طباعة أبعادها
image.shape
# عرضها
Image.show(Image.fromarray(np.asarray(image)))
coord.request_stop()
coord.join(threads)

الكود السابق يقوم فقط بتحميل الصورة كتنسر والآن لحفظها ضمن ملف TFRecords:

def _int64_feature(value):
  return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _bytes_feature(value):
  return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
# مجموعة الصور والتسميات كمدخلات
def convert_to(images, labels, name):
  num_examples = labels.shape[0]
  if images.shape[0] != num_examples:
    raise ValueError("Images size %d does not match label size %d." %
                     (images.shape[0], num_examples))
  rows = images.shape[1]
  cols = images.shape[2]
  depth = images.shape[3]
  filename = os.path.join(FLAGS.directory, name + '.tfrecords')
  print('Writing', filename)
  writer = tf.python_io.TFRecordWriter(filename)
  for index in range(num_examples):
    image_raw = images[index].tostring()
    example = tf.train.Example(features=tf.train.Features(feature={
        'height': _int64_feature(rows),
        'width': _int64_feature(cols),
        'depth': _int64_feature(depth),
        'label': _int64_feature(int(labels[index])),
        'image_raw': _bytes_feature(image_raw)}))
    writer.write(example.SerializeToString())

ثم لقراءتها لاحقاً:

#"train.TFRecord"  لاتنسى إنشاء قائمة انتظار لاسم الملف لمسار ملف
# القيمة المعادة لهذا التابع هو بياناتك بعد قراءتها
#label أي الصورة وال
def read_and_decode(filename_queue):
  reader = tf.TFRecordReader()
  _, serialized_example = reader.read(filename_queue)
  features = tf.parse_single_example(
    serialized_example,
    dense_keys=['image_raw', 'label'],
    # لم يتم تحديد الإعدادات الافتراضية لأن كلا المفتاحين مطلوبان
    dense_types=[tf.string, tf.int64])
  image = tf.decode_raw(features['image_raw'], tf.uint8)
  image = tf.reshape(image, [my_cifar.n_input])
  image.set_shape([my_cifar.n_input])
  # إذا أردت يمكنك هنا أن تقوم بإعادة تعيين أبعاد الصور لديك أو  تطبيق بعض العمليات على الصورة
  # الآن سنقوم بتحويل الصورة لفكتور
  # Convert from [0, 255] -> [-0.5, 0.5] floats.
  image = tf.cast(image, tf.float32)
  image = tf.cast(image, tf.float32) * (1. / 255) - 0.5
  #int32 إلى uint8  التحويل من 
  label = tf.cast(features['label'], tf.int32)
  return image, label
تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • -1

يمكنك استخدام الكود التالي للتحويل ببساطة:

filename_queue = tf.train.string_input_producer(['/Users/Ahmed/Desktop/test.png']) 

reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)

my_img = tf.image.decode_png(value) # use decode_png or decode_jpeg decoder based on your files.

init_op = tf.initialize_all_variables()
with tf.Session() as sess:
  sess.run(init_op)



coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)

for i in range(1): 
  image = my_img.eval()  

print(image.shape)
Image.show(Image.fromarray(np.asarray(image)))

coord.request_stop()
coord.join(threads)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...