美文网首页我爱编程
Build an Image Dataset in Tensor

Build an Image Dataset in Tensor

作者: 优秀的莱恩 | 来源:发表于2018-04-14 21:42 被阅读148次

    For this example, you need to make your own set of images (JPEG). We will show 2 different ways to build that dataset:
    1 *From a root folder(文件夹), that will have a sub-folder containing images for each class
    ROOT_FOLDER
    |-------- SUBFOLDER (CLASS 0)
    | |
    | | ----- image1.jpg
    | | ----- image2.jpg
    | | ----- etc...
    |
    |-------- SUBFOLDER (CLASS 1)
    | |
    | | ----- image1.jpg
    | | ----- image2.jpg
    | | ----- etc...
    2 *From a plain text file,(纯文本文件) that will list all images with their class ID:
    /path/to/image/1.jpg CLASS_ID
    /path/to/image/2.jpg CLASS_ID
    /path/to/image/3.jpg CLASS_ID
    /path/to/image/4.jpg CLASS_ID
    etc...

    from __future__ import print_function
    
    import tensorflow as tf
    import os
    
    # Dataset Parameters - CHANGE HERE
    MODE = 'folder' # or 'file', if you choose a plain text file (see above).
    DATASET_PATH = '/path/to/dataset/' # the dataset file or root folder path.
    
    # Image Parameters
    N_CLASSES = 2 # CHANGE HERE, total number of classes
    IMG_HEIGHT = 64 # CHANGE HERE, the image height to be resized to
    IMG_WIDTH = 64 # CHANGE HERE, the image width to be resized to
    CHANNELS = 3 # The 3 color channels, change to 1 if grayscale
    
    # Reading the dataset
    # 2 modes: 'file' or 'folder'
    def read_images(dataset_path, mode, batch_size):
        imagepaths, labels = list(), list()
        if mode == 'file':
            # Read dataset file
            data = open(dataset_path, 'r').read().splitlines()
            for d in data:
                imagepaths.append(d.split(' ')[0])
                labels.append(int(d.split(' ')[1]))
        elif mode == 'folder':
            # An ID will be affected to each sub-folders by alphabetical order
            label = 0
            # List the directory
            try:  # Python 2
                classes = sorted(os.walk(dataset_path).next()[1])
            except Exception:  # Python 3
                classes = sorted(os.walk(dataset_path).__next__()[1])
            # List each sub-directory (the classes)
            for c in classes:
                c_dir = os.path.join(dataset_path, c)
                try:  # Python 2
                    walk = os.walk(c_dir).next()
                except Exception:  # Python 3
                    walk = os.walk(c_dir).__next__()
                # Add each image to the training set
                for sample in walk[2]:
                    # Only keeps jpeg images
                    if sample.endswith('.jpg') or sample.endswith('.jpeg'):
                        imagepaths.append(os.path.join(c_dir, sample))
                        labels.append(label)
                label += 1
        else:
            raise Exception("Unknown mode.")
     # Convert to Tensor
        imagepaths = tf.convert_to_tensor(imagepaths, dtype=tf.string)
        labels = tf.convert_to_tensor(labels, dtype=tf.int32)
        # Build a TF Queue, shuffle data
        image, label = tf.train.slice_input_producer([imagepaths, labels],
                                                     shuffle=True)
    
        # Read images from disk
        image = tf.read_file(image)
        image = tf.image.decode_jpeg(image, channels=CHANNELS)
    
        # Resize images to a common size
        image = tf.image.resize_images(image, [IMG_HEIGHT, IMG_WIDTH])
    
        # Normalize
        image = image * 1.0/127.5 - 1.0
    
        # Create batches
        X, Y = tf.train.batch([image, label], batch_size=batch_size,
                              capacity=batch_size * 8,
                              num_threads=4)
    
        return X, Y
    

    相关文章

      网友评论

        本文标题:Build an Image Dataset in Tensor

        本文链接:https://www.haomeiwen.com/subject/mdkahftx.html