From 629fd8aac17c23314521672263e6605fe5b30151 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:13:05 +0530 Subject: [PATCH 01/32] cnn classification file --- machine_learning/cnn_classification.py | 99 ++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 machine_learning/cnn_classification.py diff --git a/machine_learning/cnn_classification.py b/machine_learning/cnn_classification.py new file mode 100644 index 000000000000..f5edc137d1e0 --- /dev/null +++ b/machine_learning/cnn_classification.py @@ -0,0 +1,99 @@ +# Convolutional Neural Network + + # Installing Tensorflow + # pip install tensorflow + + # Installing Keras + # pip install --upgrade keras + + # Part 1 - Building the CNN + + # Importing the Keras libraries and packages + from keras.models import Sequential + from keras.layers import Conv2D + from keras.layers import MaxPooling2D + from keras.layers import Flatten + from keras.layers import Dense + + # Initialising the CNN + classifier = Sequential() + + # Step 1 - Convolution + classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) + + # Step 2 - Pooling + classifier.add(MaxPooling2D(pool_size = (2, 2))) + + # Adding a second convolutional layer + classifier.add(Conv2D(32, (3, 3), activation = 'relu')) + classifier.add(MaxPooling2D(pool_size = (2, 2))) + + # Step 3 - Flattening + classifier.add(Flatten()) + + # Step 4 - Full connection + classifier.add(Dense(units = 128, activation = 'relu')) + classifier.add(Dense(units = 1, activation = 'sigmoid')) + + # Compiling the CNN + classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) + + # Part 2 - Fitting the CNN to the images + + +# Load Trained model weights + + # from keras.models import load_model + # regressor=load_model('cnn.h5') + + + from keras.preprocessing.image import ImageDataGenerator + train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, + horizontal_flip = True) + + train_datagen = ImageDataGenerator(rescale = 1./255, + shear_range = 0.2, + zoom_range = 0.2, + horizontal_flip = True) + + test_datagen = ImageDataGenerator(rescale = 1./255) + training_set = train_datagen.flow_from_directory('dataset/training_set',target_size = (64, 64), + batch_size = 32, class_mode = 'binary') + test_set = test_datagen.flow_from_directory('dataset/test_set', target_size = (64, 64), batch_size = + 32, class_mode = 'binary') + classifier.fit_generator(training_set, _per_epoch = 23, = 25, validation_data = test_set, + validation_steps = 2) + + training_set = train_datagen.flow_from_directory('dataset/training_set', + target_size = (64, 64), + batch_size = 32, + class_mode = 'binary') + + test_set = test_datagen.flow_from_directory('dataset/test_set', + target_size = (64, 64), + batch_size = 32, + class_mode = 'binary') + + classifier.fit_generator(training_set, + steps_per_epoch = 5, + epochs = 30, + validation_data = test_set) + #classifier.save("cnn.h5") + + # Part 3 - Making new predictions + + import numpy as np + from keras.preprocessing import image + test_image = image.load_img('dataset/single_prediction/image.png', target_size = (64, 64)) + test_image = image.load_img(image, target_size = (64, 64)) + test_image = image.img_to_array(test_image) + test_image = np.expand_dims(test_image, axis = 0) + result = classifier.predict(test_image) + training_set.class_indices + if result[0][0] == 0: + prediction = 'TB' + if result[0][0] == 1: + prediction = 'Abnormality detected' + else: + prediction = ' NO TB' + prediction = 'Normal' \ No newline at end of file From c104a738b846cd510d9f38f8fe6b1e1943675d63 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:23:07 +0530 Subject: [PATCH 02/32] Update cnn_classification.py --- machine_learning/cnn_classification.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/machine_learning/cnn_classification.py b/machine_learning/cnn_classification.py index f5edc137d1e0..b1d5e2bb777f 100644 --- a/machine_learning/cnn_classification.py +++ b/machine_learning/cnn_classification.py @@ -1,5 +1,7 @@ # Convolutional Neural Network +# Resoucres : https://en.wikipedia.org/wiki/Convolutional_neural_network + # Installing Tensorflow # pip install tensorflow @@ -96,4 +98,4 @@ prediction = 'Abnormality detected' else: prediction = ' NO TB' - prediction = 'Normal' \ No newline at end of file + prediction = 'Normal' From 054fdc7f4ee648611aeef9e09c2cb7e8ccbf9bc1 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:25:43 +0530 Subject: [PATCH 03/32] Delete cnn_classification.py --- machine_learning/cnn_classification.py | 101 ------------------------- 1 file changed, 101 deletions(-) delete mode 100644 machine_learning/cnn_classification.py diff --git a/machine_learning/cnn_classification.py b/machine_learning/cnn_classification.py deleted file mode 100644 index b1d5e2bb777f..000000000000 --- a/machine_learning/cnn_classification.py +++ /dev/null @@ -1,101 +0,0 @@ -# Convolutional Neural Network - -# Resoucres : https://en.wikipedia.org/wiki/Convolutional_neural_network - - # Installing Tensorflow - # pip install tensorflow - - # Installing Keras - # pip install --upgrade keras - - # Part 1 - Building the CNN - - # Importing the Keras libraries and packages - from keras.models import Sequential - from keras.layers import Conv2D - from keras.layers import MaxPooling2D - from keras.layers import Flatten - from keras.layers import Dense - - # Initialising the CNN - classifier = Sequential() - - # Step 1 - Convolution - classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) - - # Step 2 - Pooling - classifier.add(MaxPooling2D(pool_size = (2, 2))) - - # Adding a second convolutional layer - classifier.add(Conv2D(32, (3, 3), activation = 'relu')) - classifier.add(MaxPooling2D(pool_size = (2, 2))) - - # Step 3 - Flattening - classifier.add(Flatten()) - - # Step 4 - Full connection - classifier.add(Dense(units = 128, activation = 'relu')) - classifier.add(Dense(units = 1, activation = 'sigmoid')) - - # Compiling the CNN - classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) - - # Part 2 - Fitting the CNN to the images - - -# Load Trained model weights - - # from keras.models import load_model - # regressor=load_model('cnn.h5') - - - from keras.preprocessing.image import ImageDataGenerator - train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, - horizontal_flip = True) - - train_datagen = ImageDataGenerator(rescale = 1./255, - shear_range = 0.2, - zoom_range = 0.2, - horizontal_flip = True) - - test_datagen = ImageDataGenerator(rescale = 1./255) - training_set = train_datagen.flow_from_directory('dataset/training_set',target_size = (64, 64), - batch_size = 32, class_mode = 'binary') - test_set = test_datagen.flow_from_directory('dataset/test_set', target_size = (64, 64), batch_size = - 32, class_mode = 'binary') - classifier.fit_generator(training_set, _per_epoch = 23, = 25, validation_data = test_set, - validation_steps = 2) - - training_set = train_datagen.flow_from_directory('dataset/training_set', - target_size = (64, 64), - batch_size = 32, - class_mode = 'binary') - - test_set = test_datagen.flow_from_directory('dataset/test_set', - target_size = (64, 64), - batch_size = 32, - class_mode = 'binary') - - classifier.fit_generator(training_set, - steps_per_epoch = 5, - epochs = 30, - validation_data = test_set) - #classifier.save("cnn.h5") - - # Part 3 - Making new predictions - - import numpy as np - from keras.preprocessing import image - test_image = image.load_img('dataset/single_prediction/image.png', target_size = (64, 64)) - test_image = image.load_img(image, target_size = (64, 64)) - test_image = image.img_to_array(test_image) - test_image = np.expand_dims(test_image, axis = 0) - result = classifier.predict(test_image) - training_set.class_indices - if result[0][0] == 0: - prediction = 'TB' - if result[0][0] == 1: - prediction = 'Abnormality detected' - else: - prediction = ' NO TB' - prediction = 'Normal' From d575ef1a1ea141ca0943c7bb83368bc93ec9c46a Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:26:27 +0530 Subject: [PATCH 04/32] cnn classifcation added --- computer_vision/cnn_classification.py | 99 +++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 computer_vision/cnn_classification.py diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py new file mode 100644 index 000000000000..f5edc137d1e0 --- /dev/null +++ b/computer_vision/cnn_classification.py @@ -0,0 +1,99 @@ +# Convolutional Neural Network + + # Installing Tensorflow + # pip install tensorflow + + # Installing Keras + # pip install --upgrade keras + + # Part 1 - Building the CNN + + # Importing the Keras libraries and packages + from keras.models import Sequential + from keras.layers import Conv2D + from keras.layers import MaxPooling2D + from keras.layers import Flatten + from keras.layers import Dense + + # Initialising the CNN + classifier = Sequential() + + # Step 1 - Convolution + classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) + + # Step 2 - Pooling + classifier.add(MaxPooling2D(pool_size = (2, 2))) + + # Adding a second convolutional layer + classifier.add(Conv2D(32, (3, 3), activation = 'relu')) + classifier.add(MaxPooling2D(pool_size = (2, 2))) + + # Step 3 - Flattening + classifier.add(Flatten()) + + # Step 4 - Full connection + classifier.add(Dense(units = 128, activation = 'relu')) + classifier.add(Dense(units = 1, activation = 'sigmoid')) + + # Compiling the CNN + classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) + + # Part 2 - Fitting the CNN to the images + + +# Load Trained model weights + + # from keras.models import load_model + # regressor=load_model('cnn.h5') + + + from keras.preprocessing.image import ImageDataGenerator + train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, + horizontal_flip = True) + + train_datagen = ImageDataGenerator(rescale = 1./255, + shear_range = 0.2, + zoom_range = 0.2, + horizontal_flip = True) + + test_datagen = ImageDataGenerator(rescale = 1./255) + training_set = train_datagen.flow_from_directory('dataset/training_set',target_size = (64, 64), + batch_size = 32, class_mode = 'binary') + test_set = test_datagen.flow_from_directory('dataset/test_set', target_size = (64, 64), batch_size = + 32, class_mode = 'binary') + classifier.fit_generator(training_set, _per_epoch = 23, = 25, validation_data = test_set, + validation_steps = 2) + + training_set = train_datagen.flow_from_directory('dataset/training_set', + target_size = (64, 64), + batch_size = 32, + class_mode = 'binary') + + test_set = test_datagen.flow_from_directory('dataset/test_set', + target_size = (64, 64), + batch_size = 32, + class_mode = 'binary') + + classifier.fit_generator(training_set, + steps_per_epoch = 5, + epochs = 30, + validation_data = test_set) + #classifier.save("cnn.h5") + + # Part 3 - Making new predictions + + import numpy as np + from keras.preprocessing import image + test_image = image.load_img('dataset/single_prediction/image.png', target_size = (64, 64)) + test_image = image.load_img(image, target_size = (64, 64)) + test_image = image.img_to_array(test_image) + test_image = np.expand_dims(test_image, axis = 0) + result = classifier.predict(test_image) + training_set.class_indices + if result[0][0] == 0: + prediction = 'TB' + if result[0][0] == 1: + prediction = 'Abnormality detected' + else: + prediction = ' NO TB' + prediction = 'Normal' \ No newline at end of file From e24fdf636cc580423fd96f6932684322d7b619bd Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:26:54 +0530 Subject: [PATCH 05/32] cnn classification added From 62785b780dc268dbbf77d3138b634b8844940c4c Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:35:28 +0530 Subject: [PATCH 06/32] Update cnn_classification.py --- computer_vision/cnn_classification.py | 159 +++++++++++++------------- 1 file changed, 77 insertions(+), 82 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index f5edc137d1e0..499668458ee9 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -1,99 +1,94 @@ # Convolutional Neural Network - # Installing Tensorflow - # pip install tensorflow +# Installing Tensorflow +# pip install tensorflow - # Installing Keras - # pip install --upgrade keras +# Installing Keras +# pip install --upgrade keras - # Part 1 - Building the CNN +# Part 1 - Building the CNN - # Importing the Keras libraries and packages - from keras.models import Sequential - from keras.layers import Conv2D - from keras.layers import MaxPooling2D - from keras.layers import Flatten - from keras.layers import Dense +# Importing the Keras libraries and packages +from keras.models import Sequential +from keras.layers import Conv2D +from keras.layers import MaxPooling2D +from keras.layers import Flatten +from keras.layers import Dense - # Initialising the CNN - classifier = Sequential() +# Initialising the CNN +classifier = Sequential() - # Step 1 - Convolution - classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) +# Step 1 - Convolution +classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) - # Step 2 - Pooling - classifier.add(MaxPooling2D(pool_size = (2, 2))) +# Step 2 - Pooling +classifier.add(MaxPooling2D(pool_size = (2, 2))) - # Adding a second convolutional layer - classifier.add(Conv2D(32, (3, 3), activation = 'relu')) - classifier.add(MaxPooling2D(pool_size = (2, 2))) +# Adding a second convolutional layer +classifier.add(Conv2D(32, (3, 3), activation = 'relu')) +classifier.add(MaxPooling2D(pool_size = (2, 2))) - # Step 3 - Flattening - classifier.add(Flatten()) +# Step 3 - Flattening +classifier.add(Flatten()) - # Step 4 - Full connection - classifier.add(Dense(units = 128, activation = 'relu')) - classifier.add(Dense(units = 1, activation = 'sigmoid')) +# Step 4 - Full connection +classifier.add(Dense(units = 128, activation = 'relu')) +classifier.add(Dense(units = 1, activation = 'sigmoid')) - # Compiling the CNN - classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) +# Compiling the CNN +classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) - # Part 2 - Fitting the CNN to the images +# Part 2 - Fitting the CNN to the images # Load Trained model weights - # from keras.models import load_model - # regressor=load_model('cnn.h5') - - - from keras.preprocessing.image import ImageDataGenerator - train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, - horizontal_flip = True) - - train_datagen = ImageDataGenerator(rescale = 1./255, - shear_range = 0.2, - zoom_range = 0.2, - horizontal_flip = True) - - test_datagen = ImageDataGenerator(rescale = 1./255) - training_set = train_datagen.flow_from_directory('dataset/training_set',target_size = (64, 64), - batch_size = 32, class_mode = 'binary') - test_set = test_datagen.flow_from_directory('dataset/test_set', target_size = (64, 64), batch_size = - 32, class_mode = 'binary') - classifier.fit_generator(training_set, _per_epoch = 23, = 25, validation_data = test_set, - validation_steps = 2) - - training_set = train_datagen.flow_from_directory('dataset/training_set', - target_size = (64, 64), - batch_size = 32, - class_mode = 'binary') - - test_set = test_datagen.flow_from_directory('dataset/test_set', - target_size = (64, 64), - batch_size = 32, - class_mode = 'binary') - - classifier.fit_generator(training_set, - steps_per_epoch = 5, - epochs = 30, - validation_data = test_set) - #classifier.save("cnn.h5") - - # Part 3 - Making new predictions - - import numpy as np - from keras.preprocessing import image - test_image = image.load_img('dataset/single_prediction/image.png', target_size = (64, 64)) - test_image = image.load_img(image, target_size = (64, 64)) - test_image = image.img_to_array(test_image) - test_image = np.expand_dims(test_image, axis = 0) - result = classifier.predict(test_image) - training_set.class_indices - if result[0][0] == 0: - prediction = 'TB' - if result[0][0] == 1: - prediction = 'Abnormality detected' - else: - prediction = ' NO TB' - prediction = 'Normal' \ No newline at end of file +# from keras.models import load_model +# regressor=load_model('cnn.h5') + + +from keras.preprocessing.image import ImageDataGenerator + +train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, +horizontal_flip = True) + +train_datagen = ImageDataGenerator(rescale = 1./255, + shear_range = 0.2, + zoom_range = 0.2, + horizontal_flip = True) + +test_datagen = ImageDataGenerator(rescale = 1./255) + +training_set = train_datagen.flow_from_directory('dataset/training_set', + target_size = (64, 64), + batch_size = 32, + class_mode = 'binary') + +test_set = test_datagen.flow_from_directory('dataset/test_set', + target_size = (64, 64), + batch_size = 32, + class_mode = 'binary') + +classifier.fit_generator(training_set, + steps_per_epoch = 5, + epochs = 30, + validation_data = test_set) +#classifier.save("cnn.h5") + +# Part 3 - Making new predictions + +import numpy as np +from keras.preprocessing import image +test_image = image.load_img('dataset/single_prediction/image.png', target_size = (64, 64)) +test_image = image.load_img(image, target_size = (64, 64)) +test_image = image.img_to_array(test_image) +test_image = np.expand_dims(test_image, axis = 0) +result = classifier.predict(test_image) +training_set.class_indices +if result[0][0] == 0: + prediction = 'TB' +if result[0][0] == 1: + prediction = 'Abnormality detected' +else: + prediction = ' NO TB' + prediction = 'Normal' From 96714a3b2da1849c4cc5db503e8f8f5ec956541a Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:36:12 +0530 Subject: [PATCH 07/32] Update cnn_classification.py --- computer_vision/cnn_classification.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index 499668458ee9..238ab9a323f6 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -1,5 +1,7 @@ # Convolutional Neural Network +#Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network + # Installing Tensorflow # pip install tensorflow From 61a8e6537ced05db6c8c116a9c894319c55d6e44 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:40:26 +0530 Subject: [PATCH 08/32] Update cnn_classification.py --- computer_vision/cnn_classification.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index 238ab9a323f6..1576f33de430 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -88,9 +88,7 @@ result = classifier.predict(test_image) training_set.class_indices if result[0][0] == 0: - prediction = 'TB' + prediction = 'Normal' if result[0][0] == 1: prediction = 'Abnormality detected' -else: - prediction = ' NO TB' - prediction = 'Normal' + From 9e9aa1cbe0d7e670e0f48c93e3e918e9e435a9cb Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:41:45 +0530 Subject: [PATCH 09/32] Update cnn_classification.py --- computer_vision/cnn_classification.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index 1576f33de430..d0b84c02e868 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -88,7 +88,7 @@ result = classifier.predict(test_image) training_set.class_indices if result[0][0] == 0: - prediction = 'Normal' + prediction = 'Normal' if result[0][0] == 1: - prediction = 'Abnormality detected' + prediction = 'Abnormality detected' From 5d93c2766500506d5c200e555a9d3c39473605bf Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Fri, 23 Apr 2021 17:21:52 +0530 Subject: [PATCH 10/32] black formatted --- computer_vision/cnn_classification.py | 65 +++++++++++++-------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index d0b84c02e868..c8344f4c6520 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -1,6 +1,6 @@ # Convolutional Neural Network -#Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network +# Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network # Installing Tensorflow # pip install tensorflow @@ -21,24 +21,24 @@ classifier = Sequential() # Step 1 - Convolution -classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) +classifier.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu")) # Step 2 - Pooling -classifier.add(MaxPooling2D(pool_size = (2, 2))) +classifier.add(MaxPooling2D(pool_size=(2, 2))) # Adding a second convolutional layer -classifier.add(Conv2D(32, (3, 3), activation = 'relu')) -classifier.add(MaxPooling2D(pool_size = (2, 2))) +classifier.add(Conv2D(32, (3, 3), activation="relu")) +classifier.add(MaxPooling2D(pool_size=(2, 2))) # Step 3 - Flattening classifier.add(Flatten()) # Step 4 - Full connection -classifier.add(Dense(units = 128, activation = 'relu')) -classifier.add(Dense(units = 1, activation = 'sigmoid')) +classifier.add(Dense(units=128, activation="relu")) +classifier.add(Dense(units=1, activation="sigmoid")) # Compiling the CNN -classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) +classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) # Part 2 - Fitting the CNN to the images @@ -51,44 +51,41 @@ from keras.preprocessing.image import ImageDataGenerator -train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, -horizontal_flip = True) +train_datagen = ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True +) -train_datagen = ImageDataGenerator(rescale = 1./255, - shear_range = 0.2, - zoom_range = 0.2, - horizontal_flip = True) +train_datagen = ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True +) -test_datagen = ImageDataGenerator(rescale = 1./255) +test_datagen = ImageDataGenerator(rescale=1.0 / 255) -training_set = train_datagen.flow_from_directory('dataset/training_set', - target_size = (64, 64), - batch_size = 32, - class_mode = 'binary') +training_set = train_datagen.flow_from_directory( + "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" +) -test_set = test_datagen.flow_from_directory('dataset/test_set', - target_size = (64, 64), - batch_size = 32, - class_mode = 'binary') +test_set = test_datagen.flow_from_directory( + "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" +) -classifier.fit_generator(training_set, - steps_per_epoch = 5, - epochs = 30, - validation_data = test_set) -#classifier.save("cnn.h5") +classifier.fit_generator( + training_set, steps_per_epoch=5, epochs=30, validation_data=test_set +) +# classifier.save("cnn.h5") # Part 3 - Making new predictions import numpy as np from keras.preprocessing import image -test_image = image.load_img('dataset/single_prediction/image.png', target_size = (64, 64)) -test_image = image.load_img(image, target_size = (64, 64)) + +test_image = image.load_img("dataset/single_prediction/image.png", target_size=(64, 64)) +test_image = image.load_img(image, target_size=(64, 64)) test_image = image.img_to_array(test_image) -test_image = np.expand_dims(test_image, axis = 0) +test_image = np.expand_dims(test_image, axis=0) result = classifier.predict(test_image) training_set.class_indices if result[0][0] == 0: - prediction = 'Normal' + prediction = "Normal" if result[0][0] == 1: - prediction = 'Abnormality detected' - + prediction = "Abnormality detected" From b27e7af7152e75275a64f3869d3e47cdd058902c Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Fri, 23 Apr 2021 17:28:52 +0530 Subject: [PATCH 11/32] flake8 corrected --- computer_vision/cnn_classification.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index c8344f4c6520..0b1500a083a1 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -16,6 +16,11 @@ from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense +from keras.preprocessing import image +from keras.preprocessing.image import ImageDataGenerator + +import numpy as np + # Initialising the CNN classifier = Sequential() @@ -49,8 +54,6 @@ # regressor=load_model('cnn.h5') -from keras.preprocessing.image import ImageDataGenerator - train_datagen = ImageDataGenerator( rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) @@ -76,8 +79,6 @@ # Part 3 - Making new predictions -import numpy as np -from keras.preprocessing import image test_image = image.load_img("dataset/single_prediction/image.png", target_size=(64, 64)) test_image = image.load_img(image, target_size=(64, 64)) From 24bb00e24602a5ed937ec1b51d1f02072264a093 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Fri, 23 Apr 2021 17:44:15 +0530 Subject: [PATCH 12/32] Add files via upload --- computer_vision/cnn_classification.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index 0b1500a083a1..90797fb4cb9a 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -43,7 +43,8 @@ classifier.add(Dense(units=1, activation="sigmoid")) # Compiling the CNN -classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) +classifier.compile(optimizer="adam", loss="binary_crossentropy", + metrics=["accuracy"]) # Part 2 - Fitting the CNN to the images @@ -65,11 +66,13 @@ test_datagen = ImageDataGenerator(rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" + "dataset/training_set", target_size=(64, 64), batch_size=32, + class_mode="binary" ) test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" + "dataset/test_set", target_size=(64, 64), batch_size=32, + class_mode="binary" ) classifier.fit_generator( @@ -80,7 +83,8 @@ # Part 3 - Making new predictions -test_image = image.load_img("dataset/single_prediction/image.png", target_size=(64, 64)) +test_image = image.load_img("dataset/single_prediction/image.png", + target_size=(64, 64)) test_image = image.load_img(image, target_size=(64, 64)) test_image = image.img_to_array(test_image) test_image = np.expand_dims(test_image, axis=0) From 96a770e7f9b295b23d9ecd47e04cb534e1e45ec7 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:10:22 +0530 Subject: [PATCH 13/32] added dataset link --- computer_vision/cnn_classification.py | 50 ++------------------------- 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py index 90797fb4cb9a..78f4507d5dda 100644 --- a/computer_vision/cnn_classification.py +++ b/computer_vision/cnn_classification.py @@ -1,6 +1,7 @@ # Convolutional Neural Network # Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network +# Download dataset from : https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html # Installing Tensorflow # pip install tensorflow @@ -46,51 +47,4 @@ classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) -# Part 2 - Fitting the CNN to the images - - -# Load Trained model weights - -# from keras.models import load_model -# regressor=load_model('cnn.h5') - - -train_datagen = ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True -) - -train_datagen = ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True -) - -test_datagen = ImageDataGenerator(rescale=1.0 / 255) - -training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, - class_mode="binary" -) - -test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, - class_mode="binary" -) - -classifier.fit_generator( - training_set, steps_per_epoch=5, epochs=30, validation_data=test_set -) -# classifier.save("cnn.h5") - -# Part 3 - Making new predictions - - -test_image = image.load_img("dataset/single_prediction/image.png", - target_size=(64, 64)) -test_image = image.load_img(image, target_size=(64, 64)) -test_image = image.img_to_array(test_image) -test_image = np.expand_dims(test_image, axis=0) -result = classifier.predict(test_image) -training_set.class_indices -if result[0][0] == 0: - prediction = "Normal" -if result[0][0] == 1: - prediction = "Abnormality detected" +# Part From 9f0064be93b1e727c191f018d5cb09dada78af51 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:30:08 +0530 Subject: [PATCH 14/32] Delete cnn_classification.py --- computer_vision/cnn_classification.py | 50 --------------------------- 1 file changed, 50 deletions(-) delete mode 100644 computer_vision/cnn_classification.py diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py deleted file mode 100644 index 78f4507d5dda..000000000000 --- a/computer_vision/cnn_classification.py +++ /dev/null @@ -1,50 +0,0 @@ -# Convolutional Neural Network - -# Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network -# Download dataset from : https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html - -# Installing Tensorflow -# pip install tensorflow - -# Installing Keras -# pip install --upgrade keras - -# Part 1 - Building the CNN - -# Importing the Keras libraries and packages -from keras.models import Sequential -from keras.layers import Conv2D -from keras.layers import MaxPooling2D -from keras.layers import Flatten -from keras.layers import Dense -from keras.preprocessing import image -from keras.preprocessing.image import ImageDataGenerator - -import numpy as np - - -# Initialising the CNN -classifier = Sequential() - -# Step 1 - Convolution -classifier.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu")) - -# Step 2 - Pooling -classifier.add(MaxPooling2D(pool_size=(2, 2))) - -# Adding a second convolutional layer -classifier.add(Conv2D(32, (3, 3), activation="relu")) -classifier.add(MaxPooling2D(pool_size=(2, 2))) - -# Step 3 - Flattening -classifier.add(Flatten()) - -# Step 4 - Full connection -classifier.add(Dense(units=128, activation="relu")) -classifier.add(Dense(units=1, activation="sigmoid")) - -# Compiling the CNN -classifier.compile(optimizer="adam", loss="binary_crossentropy", - metrics=["accuracy"]) - -# Part From f6b14d8dfc308aa82239b6da2f440997300aa3c5 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:30:24 +0530 Subject: [PATCH 15/32] added cnn classification --- .../cnn_classification/cnn_classification.py | 97 +++++++++++++++++++ .../cnn_classification/requirements.txt | 3 + 2 files changed, 100 insertions(+) create mode 100644 computer_vision/cnn_classification/cnn_classification.py create mode 100644 computer_vision/cnn_classification/requirements.txt diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py new file mode 100644 index 000000000000..c3b94b8dd769 --- /dev/null +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -0,0 +1,97 @@ + +""" +Convolutional Neural Network + +Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network + +Download dataset from : +https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html + +""" + +# Part 1 - Building the CNN + +# Importing the Keras libraries and packages +from keras.models import Sequential +from keras.layers import Conv2D +from keras.layers import MaxPooling2D +from keras.layers import Flatten +from keras.layers import Dense +from keras.preprocessing import image +from keras.preprocessing.image import ImageDataGenerator + +import numpy as np + + +# Initialising the CNN +classifier = Sequential() + +# Step 1 - Convolution +classifier.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu")) + +# Step 2 - Pooling +classifier.add(MaxPooling2D(pool_size=(2, 2))) + +# Adding a second convolutional layer +classifier.add(Conv2D(32, (3, 3), activation="relu")) +classifier.add(MaxPooling2D(pool_size=(2, 2))) + +# Step 3 - Flattening +classifier.add(Flatten()) + +# Step 4 - Full connection +classifier.add(Dense(units=128, activation="relu")) +classifier.add(Dense(units=1, activation="sigmoid")) + +# Compiling the CNN +classifier.compile(optimizer="adam", + loss="binary_crossentropy", metrics=["accuracy"]) + +# Part 2 - Fitting the CNN to the images + + +# Load Trained model weights + +# from keras.models import load_model +# regressor=load_model('cnn.h5') + +train_datagen = ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True +) + +train_datagen = ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True +) + +test_datagen = ImageDataGenerator(rescale=1.0 / 255) + +training_set = train_datagen.flow_from_directory( + "dataset/training_set", target_size=(64, 64), batch_size=32, + class_mode="binary" +) + +test_set = test_datagen.flow_from_directory( + "dataset/test_set", target_size=(64, 64), batch_size=32, + class_mode="binary" +) + +classifier.fit_generator( + training_set, steps_per_epoch=5, epochs=30, validation_data=test_set +) + +classifier.save("cnn.h5") + +# Part 3 - Making new predictions + + +test_image = image.load_img("dataset/single_prediction/image.png", + target_size=(64, 64)) +test_image = image.load_img(image, target_size=(64, 64)) +test_image = image.img_to_array(test_image) +test_image = np.expand_dims(test_image, axis=0) +result = classifier.predict(test_image) +training_set.class_indices +if result[0][0] == 0: + prediction = "Normal" +if result[0][0] == 1: + prediction = "Abnormality detected" diff --git a/computer_vision/cnn_classification/requirements.txt b/computer_vision/cnn_classification/requirements.txt new file mode 100644 index 000000000000..8f65fd9896c1 --- /dev/null +++ b/computer_vision/cnn_classification/requirements.txt @@ -0,0 +1,3 @@ +keras +numpy +tensorflow From 2e5ccbd989a7ef379935322a24ac7346e49d47db Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:35:35 +0530 Subject: [PATCH 16/32] Update cnn_classification.py --- computer_vision/cnn_classification/cnn_classification.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index c3b94b8dd769..9d6f756a9086 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -2,6 +2,8 @@ """ Convolutional Neural Network +Objective : To train a CNN model detect if TB is present in Lung X-ray or not. + Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network Download dataset from : From 7981c4a99961fd6df86e2a16b299ef8b96c017fb Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:38:46 +0530 Subject: [PATCH 17/32] Update cnn_classification.py --- computer_vision/cnn_classification/cnn_classification.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 9d6f756a9086..c5a4a3ca0ff8 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -61,10 +61,6 @@ rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) -train_datagen = ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True -) - test_datagen = ImageDataGenerator(rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( From ab1e53db530d2512753047f8a59375948a7789dd Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:39:49 +0530 Subject: [PATCH 18/32] Update cnn_classification.py --- computer_vision/cnn_classification/cnn_classification.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index c5a4a3ca0ff8..41767c91e954 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -4,7 +4,8 @@ Objective : To train a CNN model detect if TB is present in Lung X-ray or not. -Resources : https://en.wikipedia.org/wiki/Convolutional_neural_network +Resources CNN Theory : https://en.wikipedia.org/wiki/Convolutional_neural_network +Resources Tensorflow : https://www.tensorflow.org/tutorials/images/cnn Download dataset from : https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html From ca54ea03bcafcab605cd52f6765c8e5a3bf524a9 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 18:13:17 +0530 Subject: [PATCH 19/32] Delete requirements.txt --- computer_vision/cnn_classification/requirements.txt | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 computer_vision/cnn_classification/requirements.txt diff --git a/computer_vision/cnn_classification/requirements.txt b/computer_vision/cnn_classification/requirements.txt deleted file mode 100644 index 8f65fd9896c1..000000000000 --- a/computer_vision/cnn_classification/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -keras -numpy -tensorflow From c8ff1759d4cd00f6390e2585d4d3fded6c5e40c4 Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 19:17:41 +0530 Subject: [PATCH 20/32] Update cnn_classification.py --- .../cnn_classification/cnn_classification.py | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 41767c91e954..59eca1734cb9 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -14,12 +14,10 @@ # Part 1 - Building the CNN -# Importing the Keras libraries and packages -from keras.models import Sequential -from keras.layers import Conv2D -from keras.layers import MaxPooling2D -from keras.layers import Flatten -from keras.layers import Dense +# Importing the libraries and packages +import tensorflow as tf +from tensorflow.keras import layers, models + from keras.preprocessing import image from keras.preprocessing.image import ImageDataGenerator @@ -27,24 +25,24 @@ # Initialising the CNN -classifier = Sequential() +classifier = models.Sequential() # Step 1 - Convolution -classifier.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu")) +classifier.add(layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu")) # Step 2 - Pooling -classifier.add(MaxPooling2D(pool_size=(2, 2))) +classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) # Adding a second convolutional layer -classifier.add(Conv2D(32, (3, 3), activation="relu")) -classifier.add(MaxPooling2D(pool_size=(2, 2))) +classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) +classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) # Step 3 - Flattening -classifier.add(Flatten()) +classifier.add(layers.Flatten()) # Step 4 - Full connection -classifier.add(Dense(units=128, activation="relu")) -classifier.add(Dense(units=1, activation="sigmoid")) +classifier.add(layers.Dense(units=128, activation="relu")) +classifier.add(layers.Dense(units=1, activation="sigmoid")) # Compiling the CNN classifier.compile(optimizer="adam", From 8d12d8d8081beb5a2ac9358ae2115aa0e44a88ed Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 19:17:50 +0530 Subject: [PATCH 21/32] Create cnn_classification.py From ecd416147041faa441cf65d6f48f15e768ee0ffa Mon Sep 17 00:00:00 2001 From: 9harshit <43147421+9harshit@users.noreply.github.com> Date: Tue, 27 Apr 2021 19:21:54 +0530 Subject: [PATCH 22/32] Add files via upload --- .../cnn_classification/cnn_classification.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 59eca1734cb9..b0e37ebf5c33 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -1,4 +1,3 @@ - """ Convolutional Neural Network @@ -14,8 +13,7 @@ # Part 1 - Building the CNN -# Importing the libraries and packages -import tensorflow as tf +# Importing the Keras libraries and packages from tensorflow.keras import layers, models from keras.preprocessing import image @@ -28,7 +26,8 @@ classifier = models.Sequential() # Step 1 - Convolution -classifier.add(layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu")) +classifier.add(layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), + activation="relu")) # Step 2 - Pooling classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) @@ -45,8 +44,8 @@ classifier.add(layers.Dense(units=1, activation="sigmoid")) # Compiling the CNN -classifier.compile(optimizer="adam", - loss="binary_crossentropy", metrics=["accuracy"]) +classifier.compile(optimizer="adam", loss="binary_crossentropy", + metrics=["accuracy"]) # Part 2 - Fitting the CNN to the images From 201d6363c5640a95906eee5bda6fc751a569fd4a Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Fri, 30 Apr 2021 10:34:54 +0530 Subject: [PATCH 23/32] using keras from tensorflow only --- .../cnn_classification/cnn_classification.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index b0e37ebf5c33..615c2ff8bf90 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -14,11 +14,9 @@ # Part 1 - Building the CNN # Importing the Keras libraries and packages +import tensorflow as tf from tensorflow.keras import layers, models -from keras.preprocessing import image -from keras.preprocessing.image import ImageDataGenerator - import numpy as np @@ -55,11 +53,11 @@ # from keras.models import load_model # regressor=load_model('cnn.h5') -train_datagen = ImageDataGenerator( +train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) -test_datagen = ImageDataGenerator(rescale=1.0 / 255) +test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( "dataset/training_set", target_size=(64, 64), batch_size=32, @@ -80,10 +78,10 @@ # Part 3 - Making new predictions -test_image = image.load_img("dataset/single_prediction/image.png", +test_image = tf.keras.preprocessing.image.load_img("dataset/single_prediction/image.png", target_size=(64, 64)) -test_image = image.load_img(image, target_size=(64, 64)) -test_image = image.img_to_array(test_image) +test_image = tf.keras.preprocessing.image.load_img(image, target_size=(64, 64)) +test_image = tf.keras.preprocessing.image.img_to_array(test_image) test_image = np.expand_dims(test_image, axis=0) result = classifier.predict(test_image) training_set.class_indices From 89e0107fe592fa9fa925399efc027e57e687e16a Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Fri, 30 Apr 2021 10:48:50 +0530 Subject: [PATCH 24/32] update tensorflow --- .../cnn_classification/cnn_classification.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 615c2ff8bf90..7c310b4ab4af 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -57,16 +57,17 @@ rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) -test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) +test_datagen = tf.keras.preprocessing.image.ImageDataGenerator( + rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, - class_mode="binary" + "dataset/training_set", target_size=(64, 64), + batch_size=32, class_mode="binary" ) test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, - class_mode="binary" + "dataset/test_set", target_size=(64, 64), + batch_size=32, class_mode="binary" ) classifier.fit_generator( @@ -78,9 +79,8 @@ # Part 3 - Making new predictions -test_image = tf.keras.preprocessing.image.load_img("dataset/single_prediction/image.png", - target_size=(64, 64)) -test_image = tf.keras.preprocessing.image.load_img(image, target_size=(64, 64)) +test_image = tf.keras.preprocessing.image.load_img( + "dataset/single_prediction/image.png", target_size=(64, 64)) test_image = tf.keras.preprocessing.image.img_to_array(test_image) test_image = np.expand_dims(test_image, axis=0) result = classifier.predict(test_image) From 2c83aafb633a632697949ccd74e592bce1acc77c Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Mon, 24 May 2021 13:20:51 +0530 Subject: [PATCH 25/32] Add files via upload --- .../cnn_classification/cnn_classification.py | 110 +++++++++--------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 7c310b4ab4af..cf5909474839 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -9,83 +9,89 @@ Download dataset from : https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html +1. Download the dataset folder and create two folder training set and test set in the parent dataste folder +2. Move 30-40 image from both TB positive and TB Negative folder in the test set folder +3. The labels of the iamges will be extracted from the folder name the image is present in. + """ # Part 1 - Building the CNN # Importing the Keras libraries and packages -import tensorflow as tf +import tensorflow as tf from tensorflow.keras import layers, models - import numpy as np -# Initialising the CNN -classifier = models.Sequential() +if __name__ == '__main__': + + + # Initialising the CNN + classifier = models.Sequential() -# Step 1 - Convolution -classifier.add(layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), - activation="relu")) + # Step 1 - Convolution + classifier.add(layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), + activation="relu")) -# Step 2 - Pooling -classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) + # Step 2 - Pooling + classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) -# Adding a second convolutional layer -classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) -classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) + # Adding a second convolutional layer + classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) + classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) -# Step 3 - Flattening -classifier.add(layers.Flatten()) + # Step 3 - Flattening + classifier.add(layers.Flatten()) -# Step 4 - Full connection -classifier.add(layers.Dense(units=128, activation="relu")) -classifier.add(layers.Dense(units=1, activation="sigmoid")) + # Step 4 - Full connection + classifier.add(layers.Dense(units=128, activation="relu")) + classifier.add(layers.Dense(units=1, activation="sigmoid")) -# Compiling the CNN -classifier.compile(optimizer="adam", loss="binary_crossentropy", - metrics=["accuracy"]) + # Compiling the CNN + classifier.compile(optimizer="adam", loss="binary_crossentropy", + metrics=["accuracy"]) -# Part 2 - Fitting the CNN to the images + # Part 2 - Fitting the CNN to the images -# Load Trained model weights + # Load Trained model weights -# from keras.models import load_model -# regressor=load_model('cnn.h5') + # from keras.models import load_model + # regressor=load_model('cnn.h5') -train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True -) + train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True + ) -test_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255) + test_datagen = tf.keras.preprocessing.image.ImageDataGenerator( + rescale=1.0 / 255) -training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), - batch_size=32, class_mode="binary" -) + training_set = train_datagen.flow_from_directory( + "dataset/training_set", target_size=(64, 64), + batch_size=32, class_mode="binary" + ) -test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), - batch_size=32, class_mode="binary" -) + test_set = test_datagen.flow_from_directory( + "dataset/test_set", target_size=(64, 64), + batch_size=32, class_mode="binary" + ) -classifier.fit_generator( - training_set, steps_per_epoch=5, epochs=30, validation_data=test_set -) + classifier.fit_generator( + training_set, steps_per_epoch=5, epochs=30, validation_data=test_set + ) -classifier.save("cnn.h5") + classifier.save("cnn.h5") -# Part 3 - Making new predictions + # Part 3 - Making new predictions -test_image = tf.keras.preprocessing.image.load_img( - "dataset/single_prediction/image.png", target_size=(64, 64)) -test_image = tf.keras.preprocessing.image.img_to_array(test_image) -test_image = np.expand_dims(test_image, axis=0) -result = classifier.predict(test_image) -training_set.class_indices -if result[0][0] == 0: - prediction = "Normal" -if result[0][0] == 1: - prediction = "Abnormality detected" + test_image = tf.keras.preprocessing.image.load_img( + "dataset/single_prediction/image.png", target_size=(64, 64)) + test_image = tf.keras.preprocessing.image.img_to_array(test_image) + test_image = np.expand_dims(test_image, axis=0) + result = classifier.predict(test_image) + training_set.class_indices + if result[0][0] == 0: + prediction = "Normal" + if result[0][0] == 1: + prediction = "Abnormality detected" From c43489d5f409785d6dd6a8afd7319542a31bf813 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Mon, 24 May 2021 13:23:40 +0530 Subject: [PATCH 26/32] Add files via upload --- .../cnn_classification/cnn_classification.py | 107 +++++++++--------- 1 file changed, 52 insertions(+), 55 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index cf5909474839..0f48f34c620d 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -18,80 +18,77 @@ # Part 1 - Building the CNN # Importing the Keras libraries and packages -import tensorflow as tf +import tensorflow as tf from tensorflow.keras import layers, models import numpy as np -if __name__ == '__main__': +if __name__ == "__main__": + # Initialising the CNN + classifier = models.Sequential() - # Initialising the CNN - classifier = models.Sequential() + # Step 1 - Convolution + classifier.add( + layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu") + ) - # Step 1 - Convolution - classifier.add(layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), - activation="relu")) + # Step 2 - Pooling + classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) - # Step 2 - Pooling - classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) + # Adding a second convolutional layer + classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) + classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) - # Adding a second convolutional layer - classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) - classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) + # Step 3 - Flattening + classifier.add(layers.Flatten()) - # Step 3 - Flattening - classifier.add(layers.Flatten()) + # Step 4 - Full connection + classifier.add(layers.Dense(units=128, activation="relu")) + classifier.add(layers.Dense(units=1, activation="sigmoid")) - # Step 4 - Full connection - classifier.add(layers.Dense(units=128, activation="relu")) - classifier.add(layers.Dense(units=1, activation="sigmoid")) + # Compiling the CNN + classifier.compile( + optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"] + ) - # Compiling the CNN - classifier.compile(optimizer="adam", loss="binary_crossentropy", - metrics=["accuracy"]) + # Part 2 - Fitting the CNN to the images - # Part 2 - Fitting the CNN to the images + # Load Trained model weights + # from keras.models import load_model + # regressor=load_model('cnn.h5') - # Load Trained model weights + train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True + ) - # from keras.models import load_model - # regressor=load_model('cnn.h5') + test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) - train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True - ) + training_set = train_datagen.flow_from_directory( + "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" + ) - test_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255) + test_set = test_datagen.flow_from_directory( + "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" + ) - training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), - batch_size=32, class_mode="binary" - ) + classifier.fit_generator( + training_set, steps_per_epoch=5, epochs=30, validation_data=test_set + ) - test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), - batch_size=32, class_mode="binary" - ) + classifier.save("cnn.h5") - classifier.fit_generator( - training_set, steps_per_epoch=5, epochs=30, validation_data=test_set - ) + # Part 3 - Making new predictions - classifier.save("cnn.h5") - - # Part 3 - Making new predictions - - - test_image = tf.keras.preprocessing.image.load_img( - "dataset/single_prediction/image.png", target_size=(64, 64)) - test_image = tf.keras.preprocessing.image.img_to_array(test_image) - test_image = np.expand_dims(test_image, axis=0) - result = classifier.predict(test_image) - training_set.class_indices - if result[0][0] == 0: - prediction = "Normal" - if result[0][0] == 1: - prediction = "Abnormality detected" + test_image = tf.keras.preprocessing.image.load_img( + "dataset/single_prediction/image.png", target_size=(64, 64) + ) + test_image = tf.keras.preprocessing.image.img_to_array(test_image) + test_image = np.expand_dims(test_image, axis=0) + result = classifier.predict(test_image) + training_set.class_indices + if result[0][0] == 0: + prediction = "Normal" + if result[0][0] == 1: + prediction = "Abnormality detected" From 4ac3d3bcae56744ffd45be68f2bccc0f99e15192 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Mon, 24 May 2021 16:55:18 +0530 Subject: [PATCH 27/32] Update cnn_classification.py --- computer_vision/cnn_classification/cnn_classification.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 0f48f34c620d..9a8a9e05bd31 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -9,9 +9,12 @@ Download dataset from : https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html -1. Download the dataset folder and create two folder training set and test set in the parent dataste folder -2. Move 30-40 image from both TB positive and TB Negative folder in the test set folder -3. The labels of the iamges will be extracted from the folder name the image is present in. +1. Download the dataset folder and create two folder training set and test set in the parent +dataste folder +2. Move 30-40 image from both TB positive and TB Negative folder in the test +set folder +3. The labels of the iamges will be extracted from the folder name the image +is present in. """ From a3b550cc0472110fa56c2e8033004cc0b376bd78 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Mon, 24 May 2021 17:01:43 +0530 Subject: [PATCH 28/32] Add files via upload --- .../cnn_classification/cnn_classification.py | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 9a8a9e05bd31..01d83fd26937 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -3,18 +3,19 @@ Objective : To train a CNN model detect if TB is present in Lung X-ray or not. -Resources CNN Theory : https://en.wikipedia.org/wiki/Convolutional_neural_network +Resources CNN Theory : + https://en.wikipedia.org/wiki/Convolutional_neural_network Resources Tensorflow : https://www.tensorflow.org/tutorials/images/cnn Download dataset from : https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html -1. Download the dataset folder and create two folder training set and test set in the parent -dataste folder -2. Move 30-40 image from both TB positive and TB Negative folder in the test -set folder -3. The labels of the iamges will be extracted from the folder name the image -is present in. +1. Download the dataset folder and create two folder training set and test set +in the parent dataste folder +2. Move 30-40 image from both TB positive and TB Negative folder +in the test set folder +3. The labels of the iamges will be extracted from the folder name +the image is present in. """ @@ -63,17 +64,21 @@ # regressor=load_model('cnn.h5') train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, + horizontal_flip=True ) - test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) + test_datagen = tf.keras.preprocessing.image.ImageDataGenerator( + rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" + "dataset/training_set", target_size=(64, 64), + batch_size=32, class_mode="binary" ) test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" + "dataset/test_set", target_size=(64, 64), + batch_size=32, class_mode="binary" ) classifier.fit_generator( From 3b100ec439ca10ba62870e2b6a6b34c2981d7f38 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Mon, 24 May 2021 17:10:11 +0530 Subject: [PATCH 29/32] Add files via upload --- computer_vision/cnn_classification/cnn_classification.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index 01d83fd26937..c07e255ef199 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -72,13 +72,13 @@ rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), - batch_size=32, class_mode="binary" + "dataset/training_set", target_size=(64, 64), batch_size=32, + class_mode="binary" ) test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), - batch_size=32, class_mode="binary" + "dataset/test_set", target_size=(64, 64), batch_size=32, + class_mode="binary" ) classifier.fit_generator( From 9c3b895fcb7f2913911f3e0c3fa63701ec90be23 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Mon, 24 May 2021 17:31:51 +0530 Subject: [PATCH 30/32] changes made --- .../cnn_classification/cnn_classification.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py index c07e255ef199..6d4f19639c24 100644 --- a/computer_vision/cnn_classification/cnn_classification.py +++ b/computer_vision/cnn_classification/cnn_classification.py @@ -21,11 +21,11 @@ # Part 1 - Building the CNN +import numpy as np + # Importing the Keras libraries and packages import tensorflow as tf from tensorflow.keras import layers, models -import numpy as np - if __name__ == "__main__": @@ -64,21 +64,17 @@ # regressor=load_model('cnn.h5') train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, - horizontal_flip=True + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) - test_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255) + test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, - class_mode="binary" + "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" ) test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, - class_mode="binary" + "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" ) classifier.fit_generator( From 57f85c6a8b5d55a3ded0e9543d860f59c854e176 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Thu, 24 Jun 2021 10:22:31 +0530 Subject: [PATCH 31/32] Delete computer_vision/cnn_classification directory --- .../cnn_classification/cnn_classification.py | 98 ------------------- 1 file changed, 98 deletions(-) delete mode 100644 computer_vision/cnn_classification/cnn_classification.py diff --git a/computer_vision/cnn_classification/cnn_classification.py b/computer_vision/cnn_classification/cnn_classification.py deleted file mode 100644 index 6d4f19639c24..000000000000 --- a/computer_vision/cnn_classification/cnn_classification.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -Convolutional Neural Network - -Objective : To train a CNN model detect if TB is present in Lung X-ray or not. - -Resources CNN Theory : - https://en.wikipedia.org/wiki/Convolutional_neural_network -Resources Tensorflow : https://www.tensorflow.org/tutorials/images/cnn - -Download dataset from : -https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html - -1. Download the dataset folder and create two folder training set and test set -in the parent dataste folder -2. Move 30-40 image from both TB positive and TB Negative folder -in the test set folder -3. The labels of the iamges will be extracted from the folder name -the image is present in. - -""" - -# Part 1 - Building the CNN - -import numpy as np - -# Importing the Keras libraries and packages -import tensorflow as tf -from tensorflow.keras import layers, models - -if __name__ == "__main__": - - # Initialising the CNN - classifier = models.Sequential() - - # Step 1 - Convolution - classifier.add( - layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu") - ) - - # Step 2 - Pooling - classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) - - # Adding a second convolutional layer - classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) - classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) - - # Step 3 - Flattening - classifier.add(layers.Flatten()) - - # Step 4 - Full connection - classifier.add(layers.Dense(units=128, activation="relu")) - classifier.add(layers.Dense(units=1, activation="sigmoid")) - - # Compiling the CNN - classifier.compile( - optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"] - ) - - # Part 2 - Fitting the CNN to the images - - # Load Trained model weights - - # from keras.models import load_model - # regressor=load_model('cnn.h5') - - train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True - ) - - test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) - - training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" - ) - - test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" - ) - - classifier.fit_generator( - training_set, steps_per_epoch=5, epochs=30, validation_data=test_set - ) - - classifier.save("cnn.h5") - - # Part 3 - Making new predictions - - test_image = tf.keras.preprocessing.image.load_img( - "dataset/single_prediction/image.png", target_size=(64, 64) - ) - test_image = tf.keras.preprocessing.image.img_to_array(test_image) - test_image = np.expand_dims(test_image, axis=0) - result = classifier.predict(test_image) - training_set.class_indices - if result[0][0] == 0: - prediction = "Normal" - if result[0][0] == 1: - prediction = "Abnormality detected" From 0e2880129e52eda2c8d97bee2c81f6c1a1a72f30 Mon Sep 17 00:00:00 2001 From: Harshit Agarwal <43147421+9harshit@users.noreply.github.com> Date: Thu, 24 Jun 2021 10:22:40 +0530 Subject: [PATCH 32/32] Add files via upload --- computer_vision/cnn_classification.py | 98 +++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 computer_vision/cnn_classification.py diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py new file mode 100644 index 000000000000..6d4f19639c24 --- /dev/null +++ b/computer_vision/cnn_classification.py @@ -0,0 +1,98 @@ +""" +Convolutional Neural Network + +Objective : To train a CNN model detect if TB is present in Lung X-ray or not. + +Resources CNN Theory : + https://en.wikipedia.org/wiki/Convolutional_neural_network +Resources Tensorflow : https://www.tensorflow.org/tutorials/images/cnn + +Download dataset from : +https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html + +1. Download the dataset folder and create two folder training set and test set +in the parent dataste folder +2. Move 30-40 image from both TB positive and TB Negative folder +in the test set folder +3. The labels of the iamges will be extracted from the folder name +the image is present in. + +""" + +# Part 1 - Building the CNN + +import numpy as np + +# Importing the Keras libraries and packages +import tensorflow as tf +from tensorflow.keras import layers, models + +if __name__ == "__main__": + + # Initialising the CNN + classifier = models.Sequential() + + # Step 1 - Convolution + classifier.add( + layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu") + ) + + # Step 2 - Pooling + classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) + + # Adding a second convolutional layer + classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) + classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) + + # Step 3 - Flattening + classifier.add(layers.Flatten()) + + # Step 4 - Full connection + classifier.add(layers.Dense(units=128, activation="relu")) + classifier.add(layers.Dense(units=1, activation="sigmoid")) + + # Compiling the CNN + classifier.compile( + optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"] + ) + + # Part 2 - Fitting the CNN to the images + + # Load Trained model weights + + # from keras.models import load_model + # regressor=load_model('cnn.h5') + + train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( + rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True + ) + + test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) + + training_set = train_datagen.flow_from_directory( + "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" + ) + + test_set = test_datagen.flow_from_directory( + "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" + ) + + classifier.fit_generator( + training_set, steps_per_epoch=5, epochs=30, validation_data=test_set + ) + + classifier.save("cnn.h5") + + # Part 3 - Making new predictions + + test_image = tf.keras.preprocessing.image.load_img( + "dataset/single_prediction/image.png", target_size=(64, 64) + ) + test_image = tf.keras.preprocessing.image.img_to_array(test_image) + test_image = np.expand_dims(test_image, axis=0) + result = classifier.predict(test_image) + training_set.class_indices + if result[0][0] == 0: + prediction = "Normal" + if result[0][0] == 1: + prediction = "Abnormality detected"