{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-output":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\n\nfolder = '/kaggle/input/mmmmmmmm/converted_1000_800/MLO/train/no_cancer'\n\nNeg_patient = [name.split('_')[0] for name in os.listdir(folder)]","metadata":{"execution":{"iopub.status.busy":"2023-02-27T20:10:05.701277Z","iopub.execute_input":"2023-02-27T20:10:05.702331Z","iopub.status.idle":"2023-02-27T20:10:06.001987Z","shell.execute_reply.started":"2023-02-27T20:10:05.702214Z","shell.execute_reply":"2023-02-27T20:10:06.001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random\ntrain_id=random.sample(Neg_patient,5000)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T10:37:36.989079Z","iopub.execute_input":"2023-02-24T10:37:36.98976Z","iopub.status.idle":"2023-02-24T10:37:37.000052Z","shell.execute_reply.started":"2023-02-24T10:37:36.989724Z","shell.execute_reply":"2023-02-24T10:37:36.99925Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import shutil\nnew=\"/kaggle/working/Neg\"\nold='/kaggle/input/mmmmmmmm/converted_1000_800/MLO/train/no_cancer'\nshutil.os.mkdir(new)\ndef make_train(old,new):\n    for dirname, subdir, filenames in os.walk(old):\n        for filename in filenames:\n            if filename.split('_')[0] in train_id:\n                old_path=os.path.join(old,filename)\n                new_path=os.path.join(new,filename)\n                shutil.copy2(old_path,new_path)\n            \n","metadata":{"execution":{"iopub.status.busy":"2023-02-24T10:39:41.522655Z","iopub.execute_input":"2023-02-24T10:39:41.523742Z","iopub.status.idle":"2023-02-24T10:39:41.530546Z","shell.execute_reply.started":"2023-02-24T10:39:41.5237Z","shell.execute_reply":"2023-02-24T10:39:41.52963Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"make_train(old,new)","metadata":{"execution":{"iopub.status.busy":"2023-02-24T10:39:45.312283Z","iopub.execute_input":"2023-02-24T10:39:45.312687Z","iopub.status.idle":"2023-02-24T10:41:23.585931Z","shell.execute_reply.started":"2023-02-24T10:39:45.312657Z","shell.execute_reply":"2023-02-24T10:41:23.584637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import glob\n\nfor path in glob.rglob(folder, recursive=True):\n    print(path)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom keras import layers\nfrom keras.layers import (Conv2D,Activation,BatchNormalization,Add,MaxPooling2D,\nInput,ZeroPadding2D,Flatten,AveragePooling2D,Dense)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-24T09:52:57.849916Z","iopub.execute_input":"2023-02-24T09:52:57.850319Z","iopub.status.idle":"2023-02-24T09:52:57.856039Z","shell.execute_reply.started":"2023-02-24T09:52:57.850291Z","shell.execute_reply":"2023-02-24T09:52:57.855115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen=tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)\ntrainCC=datagen.flow_from_directory(\"/kaggle/input/mmmmmmmm/converted_1000_800/CC/train\",batch_size=16,target_size=(1000,800),class_mode=\"binary\",shuffle=True,seed=42)\nvalCC=datagen.flow_from_directory(\"/kaggle/input/mmmmmmmm/converted_1000_800/CC/val\",batch_size=16,target_size=(1000,800),class_mode=\"binary\",seed=42)\ntrainMLO=datagen.flow_from_directory(\"/kaggle/input/mmmmmmmm/converted_1000_800/MLO/train\",batch_size=16,target_size=(1000,800),class_mode=\"binary\",seed=42)\nvalMLO=datagen.flow_from_directory(\"/kaggle/input/mmmmmmmm/converted_1000_800/MLO/val\",batch_size=16,target_size=(1000,800),class_mode=\"binary\",seed=42)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def prepare_model():\n    model = keras.Sequential()\n    model.add(layers.Conv2D(64,kernel_size=(3,3),strides=1,padding=\"same\",activation='relu',input_shape=(1000,800,3)))\n    model.add(layers.Conv2D(64,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)))\n    model.add(layers.Conv2D(128,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(128,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)))\n    model.add(layers.Conv2D(512,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(512,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)))\n    model.add(layers.Conv2D(512,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(512,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.Conv2D(256,kernel_size=(3,3),activation='relu',strides=(1,1),padding=\"same\"))\n    model.add(layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)))\n    model.add(layers.Flatten())\n    model.add(layers.Dense(4096,activation='relu'))\n    model.add(layers.Dropout(0.5))\n    model.add(layers.Dense(4096, activation='relu'))\n    model.add(layers.Dropout(0.5))\n    model.add(layers.Dense(1,activation=\"softmax\"))\n    model.compile(loss=\"kl_divergence\",optimizer=\"RMSprop\",metrics=['accuracy',keras.metrics.Recall(),keras.metrics.Precision()])\n    return model","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = prepare_model()\nmodel.fit_generator(trainMLO,\n                    validation_data =valMLO,\n                    steps_per_epoch = trainMLO.n//trainMLO.batch_size,\n                    validation_steps = valMLO.n//valMLO.batch_size,\n                    epochs=5)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save(\"/kaggle/working/model\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nimport cv2\nimport os\nimport pydicom\n\ninputdir = '/content/drive/MyDrive/Kaggle/converted_1000_800/CC/test/'\noutdir = '/content/drive/MyDrive/Kaggle/converted_1000_800/CC/test1/'\n#os.mkdir(outdir)\n\ntest_list = [ f for f in  os.listdir(inputdir)]\n\nimport numpy as np  # assuming that you have numpy installed\nimg = np.array(img, dtype = float) \nimg = (img - img.min()) / (img.max() - img.min()) * 255.0  \nimg = img.astype(np.uint8)\ncv2.imwrite(outdir + f.replace('.dcm','.png'),img)\n\nfor f in test_list:   # remove \"[:10]\" to convert all images \n    ds = pydicom.read_file(inputdir + f) # read dicom image\n    img = ds.pixel_array # get image array\n    img = np.array(img, dtype = float) \n    img = (img - img.min()) / (img.max() - img.min()) * 255.0  \n    img = img.astype(np.uint8)\n\n    cv2.imwrite(outdir + f.replace('.dcm','.png'),img) # w","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"testdir=\"/content/drive/MyDrive/Kaggle/converted_1000_800/test\"\ntest_datagen = keras.preprocessing.image.ImageDataGenerator(rescale=1./255)\n\ntest_generator = test_datagen.flow_from_directory(\n        testdir,\n        class_mode=None,\n        target_size=(1000,800)\n        )\n\n\n\npredict = model.predict(test_generator)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}