In the previous blog, we studied the basics of data augmentation and understanding its purpose. If you did not study the previous blog, kindly see the previous blog first before proceeding with this one.
As we know about data augmentation and its importance, so let's discuss the different methods of this one by one.
Image data augmentation is the most important part of computer vision. The following geometric transformation methods of data augmentation are used to re-generate the image data.
Horizontal and Vertical flips
Horizontal and Vertical shift
So we will be covering all the above methods in detail one by one in different articles. But before that, let's try to understand how we can implement augmentation using Keras Python module.
As we already know Keras is providing a class
ImageDataGenerator for this purpose. So to begin using this class, we have to create an object of this class and then add all those transformation methods which we want to apply to the images.
The most important techniques for image data augmentation, that are supported in the
ImageDataGenerator class are as follows:
The argument horizontal_flip and vertical_flip to use flip the image.
The argument height_shift_range and width_shift_range use to shift the image horizontal and vertical.
The argument brightness_range use to change the image brightness.
The argument zoom_range, which is used to change the image zoom - doing zoom in and zoom out.
The argument rotation_range use to rotate the image.
Let's try to understand how to create
ImageDataGenerator class object and how to pass the above method arguments inside of that.
Below is the method to create the
ImageDataGenerator class object.
# create an object of the ImageDataGenerator class imageDataGen = ImageDataGenerator()
Once we have created the object of
ImageDataGenerator class, then we create an iterator using the
flow() method as shown below. The iterator will handle one image batch at a time and will return the transformed images. In the
flow() method, we provide the
image variable which has the images already loaded into the memory but if you want to fetch images from your local directory then we have to use the
# creating image iterator iterator = imageDataGen.flow(image,..)
Below is another example to create the iterator, if we load images directly from the local directory.
# creating image iterator iterator = imageDataGen.flow_from_directory(directory=/path/of/the/image/Dataset/,...)
Once we have created our iterator, then we can train the neural network using the
We also have to define the
steps_per_epoch inside of the function as an argument value which tells how many images batch are present in each epoch.
For example: If we have 500 images and we want to keep the batch size of 10, then according to the formula
ceil(num_samples / batch_size), we get ceil(500/10) or 50 batches. This means 50 steps per epoch and in each step it covers 50 images. So in this way, we can process complete image datasets in every epoch.
# we define here model model = ... # now we fitting model with our newly generated dataset using fit_generator() function and we also # define there steps_per_epoch model.fit_generator(iterator, steps_per_epoch=50, ...)
As we know already, all datasets images are not used for training of the model because
ImageDataGenerator randomly chooses the transformed data and closes the copy of the original image to the training model.
The data generator can also help us to define the testing and validation datasets. Now that we have understood how to use the ImageDataGenerator class, now its time to explore some of the methods of this technique.
We will see some of these techniques one by one using code and then, at last, we combine all those methods in a single program to see the full result.
Now follow the below tutorials to understand how the different methods work:
Using the Keras
ImageDataGenerator class we can apply all the above mentioned Image data augmentation techniques on a dataset of images.