{"cells":[{"metadata":{},"cell_type":"raw","source":""},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import glob, pylab, pandas as pd\nimport pydicom, numpy as np\nfrom os import listdir\nfrom os.path import isfile, join\nimport matplotlib.pylab as plt\nimport os\nimport seaborn as sns","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras import layers\nfrom keras.applications import DenseNet121\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import Callback, ModelCheckpoint\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.models import Sequential\nfrom keras.optimizers import Adam\nfrom keras import models \nfrom tqdm import tqdm","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ls ../input\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_train.csv')\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train1=train[0:119808]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train1.head(100)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_images_dir = '/kaggle/input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_train/'\ntrain_images = [f for f in listdir(train_images_dir) if isfile(join(train_images_dir, f))]\n#print(train_images[0:5])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_images1=train_images[0:19968]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#ds = pydicom.dcmread(train_images_dir + train_images[1])\n#plt.imshow(ds.pixel_array, cmap=plt.cm.bone)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_images_dir= '/kaggle/input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection/stage_2_test/'\ntest_images= [f for f in listdir(test_images_dir) if isfile(join(test_images_dir, f))]\n#print(test_images[0:5])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_images1=test_images[0:3000]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(train_images1))\nprint(len(test_images1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.countplot(train1.Label)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train1['Sub_type'] = train1['ID'].str.split(\"_\", n = 3, expand = True)[2]\ntrain1['PatientID'] = train1['ID'].str.split(\"_\", n = 3, expand = True)[1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train['Sub_type'] = train['ID'].str.split(\"_\", n = 3, expand = True)[2]\ntrain['PatientID'] = train['ID'].str.split(\"_\", n = 3, expand = True)[1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train1.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"gbSub = train1.groupby('Sub_type').sum()\ngbSub","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ds = pydicom.dcmread(train_images_dir + train_images[1])\nprint(ds)\nds1 = pydicom.dcmread(train_images_dir + train_images[1000])\nprint(ds1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"im = ds.pixel_array\nprint(type(im))\nprint(im.dtype)\nprint(im.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def window_image(img, window_center,window_width, intercept, slope):\n\n    img = (img*slope +intercept)\n    img_min = window_center - window_width//2\n    img_max = window_center + window_width//2\n    img[img<img_min] = img_min\n    img[img>img_max] = img_max\n    return img \n\ndef get_first_of_dicom_field_as_int(x):\n    #get x[0] as in int is x is a 'pydicom.multival.MultiValue', otherwise get int(x)\n    if type(x) == pydicom.multival.MultiValue:\n        return int(x[0])\n    else:\n        return int(x)\n\ndef get_windowing(data):\n    dicom_fields = [data[('0028','1050')].value, #window center\n                    data[('0028','1051')].value, #window width\n                    data[('0028','1052')].value, #intercept\n                    data[('0028','1053')].value] #slope\n    return [get_first_of_dicom_field_as_int(x) for x in dicom_fields]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndef view_images(images, title = '', aug = None):\n    width = 5\n    height = 2\n    fig, axs = plt.subplots(height, width, figsize=(15,5))\n    \n    for im in range(0, height * width):\n        ''''\n        image = pydicom.read_file(os.path.join(train_images_dir,'ID_'+images[im]+ '.dcm')).pixel_array\n        i = im // width\n        j = im % width\n        axs[i,j].imshow(image, cmap=plt.cm.bone) \n        axs[i,j].axis('off')'''''\n        \n        data = pydicom.read_file(os.path.join(train_images_dir,'ID_'+images[im]+ '.dcm'))\n        image = data.pixel_array\n        window_center , window_width, intercept, slope = get_windowing(data)\n        image_windowed = window_image(image, window_center, window_width, intercept, slope)\n\n\n        i = im // width\n        j = im % width\n        axs[i,j].imshow(image_windowed, cmap=plt.cm.bone) \n        axs[i,j].axis('off')\n        \n        \n    plt.suptitle(title)\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#view_images(train1[(train1['Sub_type'] == 'epidural') & (train1['Label'] == 1)][:10].PatientID.values, title = 'Images of hemorrhage epidural')\nprint(train1[(train1['Sub_type'] == 'epidural') & (train1['Label'] == 1)][:].PatientID.values.shape)\nprint(train1[:].PatientID.values.dtype)\nprint(train1[0:1].PatientID.values.shape)\nprint(train1[0:1].shape)\nprint(train1.shape)\n# print(train1[369:370].Label.values)\nadd = np.zeros((19968,1))\nfor i in range(0,119808):\n    j=i//6\n    add[j, 0] = add[j, 0] + train1[i:i+1].Label.values\nprint(sum(add==1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\ndata = pydicom.read_file(os.path.join(train_images_dir,'ID_'+np.asscalar(train1[0:1].PatientID.values)+ '.dcm'))\nimage = data.pixel_array\nwindow_center , window_width, intercept, slope = get_windowing(data)\nimage_windowed = window_image(image, window_center, window_width, intercept, slope)\nprint(image_windowed.dtype)\nprint(image_windowed.shape)\n#ds = pydicom.dcmread(train_images_dir + train_images[1])\nplt.imshow(image, cmap=plt.cm.bone)\n#plt.imshow(image_windowed, cmap=plt.cm.bone)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(len(train_images1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"data = pydicom.read_file(os.path.join(train_images_dir,'ID_'+np.asscalar(train1[12:13].PatientID.values)+ '.dcm'))\nimage = data.pixel_array\nwindow_center , window_width, intercept, slope = get_windowing(data)\nimage_windowed = window_image(image, window_center, window_width, intercept, slope)\nplt.imshow(image_windowed, cmap=plt.cm.bone)\n# data = pydicom.read_file(os.path.join(train_images_dir,'ID_'+np.asscalar(train1[1:2].PatientID.values)+ '.dcm'))\n# image = data.pixel_array\n# window_center , window_width, intercept, slope = get_windowing(data)\n# image_windowed = window_image(image, window_center, window_width, intercept, slope)\n# plt.imshow(image_windowed, cmap=plt.cm.bone)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_input = layers.Input(batch_shape = (128,512,512,1))\n#conv layer 1\nlayer = layers.Conv2D(filters = 32, kernel_size = (3,3), strides = (1,1), padding = \"same\", kernel_initializer = 'glorot_uniform')(model_input)\n# print(layer.shape)\nlayer = layers.normalization.BatchNormalization(axis=3, momentum = 0.5)(layer)\nlayer = layers.advanced_activations.LeakyReLU(0.2)(layer)\nlayer = layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2), padding='valid')(layer)\n# print(layer.shape)\n    \nlayer = layers.Conv2D(filters = 32, kernel_size = (3,3), strides = (1,1), padding = \"same\", kernel_initializer = 'glorot_uniform')(layer)\nlayer = layers.normalization.BatchNormalization(axis=3, momentum = 0.5)(layer)\nlayer = layers.advanced_activations.LeakyReLU(0.2)(layer)\nlayer = layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2), padding='valid')(layer)\n \n\nlayer = layers.Conv2D(filters = 64, kernel_size = (3,3), strides = (1,1), padding = \"same\", kernel_initializer = 'glorot_uniform')(layer)\nlayer = layers.normalization.BatchNormalization(axis=3, momentum = 0.5)(layer)\nlayer = layers.advanced_activations.LeakyReLU(0.2)(layer)\nlayer = layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2), padding='valid')(layer)\n# print(layer.shape)\n \nlayer = layers.Conv2D(filters = 128, kernel_size = (3,3), strides = (1,1), padding = \"same\", kernel_initializer = 'glorot_uniform')(layer)\nlayer = layers.normalization.BatchNormalization(axis=3, momentum = 0.5)(layer)\nlayer = layers.advanced_activations.LeakyReLU(0.2)(layer)\nlayer = layers.MaxPooling2D(2)(layer)\n# print(layer.shape)\n\n    \nlayer = layers.Conv2D(filters = 128, kernel_size = (3,3), strides = (1,1), padding = \"same\", kernel_initializer = 'glorot_uniform')(layer)\nlayer = layers.normalization.BatchNormalization(axis=3, momentum = 0.5)(layer)\nlayer = layers.advanced_activations.LeakyReLU(0.2)(layer)\n# print(layer.shape)\n    \n    \nlayer = layers.Conv2D(filters = 256, kernel_size = (3,3), strides = (1,1), padding = \"same\", kernel_initializer = 'glorot_uniform')(layer)\nlayer = layers.normalization.BatchNormalization(axis=3, momentum = 0.5)(layer)\nlayer = layers.advanced_activations.LeakyReLU(0.2)(layer)\nlayer = layers.MaxPooling2D(2)(layer)\nprint(layer.shape)\nlayer = layers.Flatten()(layer)\nlayer = layers.Dense(100, activation = 'relu')(layer)\noutput = layers.Dense(6, activation ='sigmoid')(layer)\n    \nmodel = models.Model(input =  model_input, output = output)\n\nopt = Adam(lr=0.0002, beta_1=0.5)\nmodel.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#ds = pydicom.dcmread(train_images_dir + train_images1[1])\n#im=ds.pixel_array\n#print(im.shape)\nfor batch_num in range(0, 156): \n    image_windowed=np.zeros((128, 512, 512,1))\n    y_train=np.zeros((128,6))\n    for i in range(128):\n        data = pydicom.read_file(os.path.join(train_images_dir,'ID_'+np.asscalar(train1[(batch_num*128+i)*6:(batch_num*128+i)*6+1].PatientID.values)+ '.dcm'))\n        image = data.pixel_array\n        window_center , window_width, intercept, slope = get_windowing(data)\n        image_windowed [ i, :, :,0]= window_image(image, window_center, window_width, intercept, slope)\n        image_windowed=image_windowed/255\n        y_train[i,:] = train1[(batch_num*128 + i)*6:(batch_num*128 + i)*6 + 6].Label.values\n\n    model.train_on_batch(image_windowed, y_train, reset_metrics = False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"# "},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}