{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"\"\"\" Model callbacks setup.\n\"\"\"\n!pip install kaggle_tools\n!pip install asd.conf\nfrom kaggle_tools.metrics.keras import FBetaMetricCallback\nfrom keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau\n\nfrom asd.conf import EARLY_STOPPING_PATIENCE, REDUCE_LR_PATIENCE\n\n# TODO: Add some documentation for these callbacks.\n\nWEIGHTS_PATH = \"best_weights.h5\"\n\n# TODO: Move some of the hyperparameters to the constants list\nMODEL_CHECKPOINT_CALLABACK = ModelCheckpoint(WEIGHTS_PATH, monitor='val_loss',\n                                             verbose=1, save_best_only=True,\n                                             mode='min', save_weights_only=True)\n\nREDUCE_LR_CALLBACK = ReduceLROnPlateau(monitor='val_loss', factor=0.2,\n                                       patience=REDUCE_LR_PATIENCE, verbose=1, mode='min',\n                                       min_delta=0.0001, cooldown=2, min_lr=1e-7)\n# probably needs to be more patient, but kaggle time is limited\nEARLY_STOPPING_CALLBACK = EarlyStopping(monitor=\"val_loss\", mode=\"min\", verbose=2,\n                                        patience=EARLY_STOPPING_PATIENCE)\n\n\nF2_METRIC_CALLBACK = FBetaMetricCallback(beta=2)\n# TODO: Add the FbetaMetricCallback => Added but doesn't yet work, check why (probably wrong input...)\nCALLBACKS = [MODEL_CHECKPOINT_CALLABACK, EARLY_STOPPING_CALLBACK, REDUCE_LR_CALLBACK]\n","metadata":{"_uuid":"499086e4-02a0-42e3-851f-ba815424757d","_cell_guid":"b06e7d44-3b00-4fa7-ab29-1ca4fdd8e5fb","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-02-12T04:41:27.878843Z","iopub.execute_input":"2023-02-12T04:41:27.879673Z","iopub.status.idle":"2023-02-12T04:41:41.453208Z","shell.execute_reply.started":"2023-02-12T04:41:27.879623Z","shell.execute_reply":"2023-02-12T04:41:41.451335Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Requirement already satisfied: kaggle_tools in /opt/conda/lib/python3.7/site-packages (0.0.3)\n\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n\u001b[0m\u001b[31mERROR: Could not find a version that satisfies the requirement asd.conf (from versions: none)\u001b[0m\u001b[31m\n\u001b[0m\u001b[31mERROR: No matching distribution found for asd.conf\u001b[0m\u001b[31m\n\u001b[0m","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/1877080697.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mEarlyStopping\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mModelCheckpoint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mReduceLROnPlateau\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0masd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconf\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mEARLY_STOPPING_PATIENCE\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mREDUCE_LR_PATIENCE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;31m# TODO: Add some documentation for these callbacks.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'asd.conf'"],"ename":"ModuleNotFoundError","evalue":"No module named 'asd.conf'","output_type":"error"}],"execution_count":15},{"cell_type":"code","source":"\nimport numpy as np\nfrom keras.models import Sequential\nfrom keras.layers import Dense\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\n\nX=np.linspace(-1,1,200)\nY=0.5*X+2+np.random.normal(0,0.05,(200,))\nplt.scatter(X,Y)\nplt.show()\n\nx_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2)\n\nmodel=Sequential()\nmodel.add(Dense(\n    output_dim=1,\n    input_dim=1\n))\nmodel.compile(\n    loss='mse', # mean(square())\n    optimizer='sgd'\n)\n\nfor i in range(1000):\n    cost=model.train_on_batch(x_train,y_train)\n    if i%50==0:\n        print(cost)\n\nprint()\ncost=model.evaluate(x_test,y_test,batch_size=40)\nprint(cost)\nw,b=model.layers[0].get_weights()\nprint(w,b)\n\ny_pre=model.predict(x_test)\nplt.scatter(x_test,y_test)\nplt.plot(x_test,y_pre)\nplt.show()\n\n\n# TODO: Try this model.\n","metadata":{"execution":{"iopub.status.busy":"2023-02-12T05:57:38.895211Z","iopub.execute_input":"2023-02-12T05:57:38.896193Z","iopub.status.idle":"2023-02-12T05:57:44.947266Z","shell.execute_reply.started":"2023-02-12T05:57:38.895588Z","shell.execute_reply":"2023-02-12T05:57:44.945954Z"},"trusted":true},"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}},{"name":"stderr","text":"2023-02-12 05:57:44.661708: I tensorflow/core/common_runtime/process_util.cc:146] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.\n","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/3318080347.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     15\u001b[0m model.add(Dense(\n\u001b[1;32m     16\u001b[0m     \u001b[0moutput_dim\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m     \u001b[0minput_dim\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     18\u001b[0m ))\n\u001b[1;32m     19\u001b[0m model.compile(\n","\u001b[0;31mTypeError\u001b[0m: __init__() missing 1 required positional argument: 'units'"],"ename":"TypeError","evalue":"__init__() missing 1 required positional argument: 'units'","output_type":"error"}],"execution_count":1},{"cell_type":"code","source":"from PIL import Image\nimport numpy as np\n\n\ndef array_to_image(array, shape):\n    img = Image.new(\"L\", (shape[0], shape[1]))\n    pixdata = img.load()\n    for i in range(shape[0]):\n        for j in range(shape[1]):\n            pixdata[i, j] = tuple(array[j][i])\n\n    img.show()\n\n\ndef rle_to_array(img, rles):\n    x = np.asarray(img).reshape((768, 768, 3))\n    y = np.zeros(768 * 768, dtype=np.uint8)\n\n    for rle in rles.values:\n        if rle is np.nan:\n            break\n        rle = rle.split(' ')\n        starts, lengths = [np.asarray(x, dtype=int) for x in (rle[0:][::2], rle[1:][::2])]\n        starts -= 1\n        ends = starts + lengths\n        for s, e in zip(starts, ends):\n            y[s:e] = 1\n\n    y = y.reshape((768, 768)).T.reshape((768, 768, 1))\n    return x, y\n\n# import pandas as pd\n#\n# results = pd.read_csv(r\"E:\\DataSet\\airbus-ship-detection\\segmentations.csv\")\n# img = Image.open(r\"E:\\DataSet\\airbus-ship-detection\\balance_train_data\\000f1f959.jpg\")\n# mask = results[\"EncodedPixels\"][results[\"ImageId\"] == \"000f1f959.jpg\"]\n# a=rle_to_array(img, mask)[1]\n#from liushupei.preprocess.data_deal import rle_to_array\nimport numpy as np\nfrom PIL import Image\n\n\ndef generator(imgs, results, batch_size, seed=None):\n    if seed:\n        np.random.seed(seed)\n    ImageId, EncodedPixels = results[\"ImageId\"], results[\"EncodedPixels\"]\n    while True:\n        samples = np.random.choice(imgs, size=batch_size)\n        X, Y = [], []\n        for s in samples:\n            img = Image.open(r\"E:\\DataSet\\airbus-ship-detection\\balance_train_data\" + \"\\\\\" + s)\n            rles = EncodedPixels[ImageId == s]\n            x, y = rle_to_array(img, rles)\n            X.append(x)\n            Y.append(y)\n        X, Y = np.asarray(X) / 255, np.asarray(Y)\n        yield (X, Y)\n\n# import pandas as pd\n# import os\n#\n# imgs = os.listdir(r\"E:\\DataSet\\airbus-ship-detection\\ship\")\n# results = pd.read_csv(r\"E:\\DataSet\\airbus-ship-detection\\segmentations.csv\")\n# gen=generator(imgs, results, 5)\n# for i in gen:\n#     continue\n array_to_image(a,a.shape)\n    ","metadata":{"execution":{"iopub.status.busy":"2023-02-12T06:05:58.47002Z","iopub.execute_input":"2023-02-12T06:05:58.470564Z","iopub.status.idle":"2023-02-12T06:05:58.483919Z","shell.execute_reply.started":"2023-02-12T06:05:58.47052Z","shell.execute_reply":"2023-02-12T06:05:58.481656Z"},"trusted":true},"outputs":[{"traceback":["\u001b[0;36m  File \u001b[0;32m\"<tokenize>\"\u001b[0;36m, line \u001b[0;32m67\u001b[0m\n\u001b[0;31m    array_to_image(a,a.shape)\u001b[0m\n\u001b[0m    ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unindent does not match any outer indentation level\n"],"ename":"IndentationError","evalue":"unindent does not match any outer indentation level (<tokenize>, line 67)","output_type":"error"}],"execution_count":7},{"cell_type":"code","source":"def load_airbus_ship_detection_dataset():\n    # Load the CSV file containing the ship detection labels\n    df = pd.read_csv('/kaggle/input/new-guess/new_guess.csv')\n    \n    # Initialize an empty list to store the images\n    images = []\n\n    # Load the images from disk\n    for i, image_id in enumerate(df['ImageId']):\n        image = cv2.imread(f'/kaggle/input/sipppbroo2/{image_id}')\n        # Resize the images to 128x128\n        if image.shape[0] != 128 or image.shape[1] != 128:\n            image = cv2.resize(image, (128, 128))\n        images.append(image)\n\n    return np.array(images), df['EncodedPixels'].values\n","metadata":{"execution":{"iopub.status.busy":"2023-02-12T08:09:06.326421Z","iopub.execute_input":"2023-02-12T08:09:06.326824Z","iopub.status.idle":"2023-02-12T08:09:06.335138Z","shell.execute_reply.started":"2023-02-12T08:09:06.326792Z","shell.execute_reply":"2023-02-12T08:09:06.333889Z"},"trusted":true},"outputs":[],"execution_count":94},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import precision_recall_fscore_support\n\ndef calculate_metrics(true_labels, predicted_labels):\n    # Convert the labels to binary format\n    true_labels = (true_labels > 0).astype(int)\n    predicted_labels = (predicted_labels > 0).astype(int)\n    \n    # Calculate the precision, recall, F1 score, and support\n    precision, recall, f1_score, support = precision_recall_fscore_support(\n        true_labels, predicted_labels, average='binary')\n    \n    return precision, recall, f1_score\n","metadata":{"execution":{"iopub.status.busy":"2023-02-12T08:08:30.810053Z","iopub.execute_input":"2023-02-12T08:08:30.811539Z","iopub.status.idle":"2023-02-12T08:08:30.819366Z","shell.execute_reply.started":"2023-02-12T08:08:30.811494Z","shell.execute_reply":"2023-02-12T08:08:30.817422Z"},"trusted":true},"outputs":[],"execution_count":90},{"cell_type":"code","source":"def detect_ships(image):\n    if len(image.shape) == 3:\n        # Convert the image to grayscale\n        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n    else:\n        gray = image\n        \n    # Use a threshold to binarize the image\n    binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)[1]\n    \n    return binary\n","metadata":{"execution":{"iopub.status.busy":"2023-02-12T08:08:32.698009Z","iopub.execute_input":"2023-02-12T08:08:32.698492Z","iopub.status.idle":"2023-02-12T08:08:32.704775Z","shell.execute_reply.started":"2023-02-12T08:08:32.698457Z","shell.execute_reply":"2023-02-12T08:08:32.703769Z"},"trusted":true},"outputs":[],"execution_count":91},{"cell_type":"code","source":"import numpy as np\n\n# Load the airbus-ship-detection dataset\nimages, true_labels = load_airbus_ship_detection_dataset()\n\n# Generate predicted labels using some ship detection model\npredicted_labels = np.zeros_like(true_labels)\nimages = np.array([cv2.resize(img, (128, 128)) for img in images])\nfor i in range(true_labels.shape[0]):\n    # Use some method to detect ships in the images and generate predicted labels\n    predicted_labels[i, :, :] = detect_ships(images[i, :, :])\n\n# Calculate precision, recall, and F1 score\nprecision, recall, f1_score = calculate_metrics(true_labels, predicted_labels)\n\nprint(\"Precision: {:.2f}\".format(precision))\nprint(\"Recall: {:.2f}\".format(recall))\nprint(\"F1 Score: {:.2f}\".format(f1_score))\n","metadata":{"execution":{"iopub.status.busy":"2023-02-12T08:09:10.931101Z","iopub.execute_input":"2023-02-12T08:09:10.931564Z","iopub.status.idle":"2023-02-12T08:09:11.007787Z","shell.execute_reply.started":"2023-02-12T08:09:10.931528Z","shell.execute_reply":"2023-02-12T08:09:11.006596Z"},"trusted":true},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/1878477354.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrue_labels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m     \u001b[0;31m# Use some method to detect ships in the images and generate predicted labels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m     \u001b[0mpredicted_labels\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdetect_ships\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimages\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;31m# Calculate precision, recall, and F1 score\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mIndexError\u001b[0m: too many indices for array: array is 1-dimensional, but 3 were indexed"],"ename":"IndexError","evalue":"too many indices for array: array is 1-dimensional, but 3 were indexed","output_type":"error"}],"execution_count":95},{"cell_type":"code","source":"def calculate_confusion_matrix(tp, fp, fn):\n    tn = total_examples - tp - fp - fn\n    precision = tp / (tp + fp)  if (tp + fp) != 0 else 0\n    recall = tp / (tp + fn) if (tp + fn) != 0 else 0\n    f1_score = 2 * (precision * recall) / (precision + recall) if (precision + recall) != 0 else 0\n    return tn, precision, recall, f1_score\n\niou = 0.3706896551724138\nf2 = 0.0\nthresholds = [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95]\n    tp = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n    fp = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]\n    fn = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]\ntotal_examples = 10000\n\nfor i in range(len(thresholds)):\n    tn, precision, recall, f1_score = calculate_confusion_matrix(tp[i], fp[i], fn[i])\n    print(\"Threshold: \", thresholds[i])\n    print(\"True Negatives: \", tn)\n    print(\"Precision: \", precision)\n    print(\"Recall: \", recall)\n    print(\"F1 Score: \", f1_score)\n    print(\"\\n\")    ","metadata":{"execution":{"iopub.status.busy":"2023-02-12T11:39:33.198392Z","iopub.execute_input":"2023-02-12T11:39:33.198786Z","iopub.status.idle":"2023-02-12T11:39:33.210929Z","shell.execute_reply.started":"2023-02-12T11:39:33.198754Z","shell.execute_reply":"2023-02-12T11:39:33.209637Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Threshold:  0.5\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.55\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.6\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.65\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.7\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.75\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.8\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.85\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.9\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\nThreshold:  0.95\nTrue Negatives:  9998.0\nPrecision:  0.0\nRecall:  0.0\nF1 Score:  0\n\n\n","output_type":"stream"}],"execution_count":2},{"cell_type":"code","source":"import numpy as np\nimport os\nfrom PIL import Image\n\ndef load_data(data_dir, split=0.8):\n    images = []\n    filenames = []\n    for filename in os.listdir(data_dir):\n        if filename.endswith(\".jpg\"):\n            filepath = os.path.join(data_dir, filename)\n            image = Image.open(filepath)\n            images.append(np.array(image))\n            filenames.append(filename)\n    if images:\n        images = np.stack(images)\n        split_index = int(split * len(images))\n        X_train = images[:split_index]\n        X_val = images[split_index:]\n        return X_train, X_val\n    else:\n        raise ValueError(\"No images found in the data directory\")\n\ndata_dir = '/kaggle/input/sipppbroo2'\nX_train, X_val = load_data(data_dir)","metadata":{"execution":{"iopub.status.busy":"2023-02-13T19:41:07.181326Z","iopub.execute_input":"2023-02-13T19:41:07.181816Z","iopub.status.idle":"2023-02-13T19:41:07.245113Z","shell.execute_reply.started":"2023-02-13T19:41:07.181776Z","shell.execute_reply":"2023-02-13T19:41:07.243849Z"},"trusted":true},"outputs":[],"execution_count":11},{"cell_type":"code","source":"import numpy as np\nimport os\nfrom PIL import Image\n\ndef load_data(data_dir, split=0.8):\n    images = []\n    filenames = []\n    for filename in os.listdir(data_dir):\n        if filename.endswith(\".jpg\"):\n            filepath = os.path.join(data_dir, filename)\n            image = Image.open(filepath)\n            images.append(np.array(image))\n            filenames.append(filename)\n    if images:\n        images = np.stack(images)\n        split_index = int(split * len(images))\n        X_train = images[:split_index]\n        X_test = images[split_index:]\n        return X_train, X_test\n    else:\n        raise ValueError(\"No images found in the data directory\")\n\ndata_dir = '/kaggle/input/sipppbroo2'\nX_train, X_test = load_data(data_dir)","metadata":{"execution":{"iopub.status.busy":"2023-02-13T19:41:53.584248Z","iopub.execute_input":"2023-02-13T19:41:53.584661Z","iopub.status.idle":"2023-02-13T19:41:53.646389Z","shell.execute_reply.started":"2023-02-13T19:41:53.584626Z","shell.execute_reply":"2023-02-13T19:41:53.645247Z"},"trusted":true},"outputs":[],"execution_count":14},{"cell_type":"code","source":"import numpy as np\nimport os\nfrom PIL import Image\n\ndef load_data(data_dir, split=0.8):\n    images = []\n    labels = []\n    filenames = []\n    filename = \"00003e153.jpg\"\n    label = int(filename.split(\"abc\")[1].split(\".jpg\")[0])\n    for filename in os.listdir(data_dir):\n        if filename.endswith(\".jpg\"):\n            filepath = os.path.join(data_dir, filename)\n            image = Image.open(filepath)\n            images.append(np.array(image))\n            label = int(filename.split('_')[0])\n            labels.append(label)\n            filenames.append(filename)\n    if images:\n\n        images = np.stack(images)\n        labels = np.array(labels)\n        split_index = int(split * len(images))\n        X_train = images[:split_index]\n        X_val = images[split_index:]\n        y_train = labels[:split_index]\n        y_val = labels[split_index:]\n        return X_train, y_train, X_val, y_val\n    else:\n        raise ValueError(\"No images found in the data directory\")\n\ndata_dir = '/kaggle/input/sipppbroo2'\nX_train, y_train, X_val, y_val = load_data(data_dir)\n\n# y_pred will be generated by the UNET model during inference\nmodel = UNET()\nmodel.fit(X_train, y_train)\ny_pred = model.predict(X_val)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-13T19:57:53.236282Z","iopub.execute_input":"2023-02-13T19:57:53.236714Z","iopub.status.idle":"2023-02-13T19:57:53.28867Z","shell.execute_reply.started":"2023-02-13T19:57:53.236678Z","shell.execute_reply":"2023-02-13T19:57:53.286917Z"},"trusted":true},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/3645649563.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     32\u001b[0m \u001b[0mdata_dir\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'/kaggle/input/sipppbroo2'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 33\u001b[0;31m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_val\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_val\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mload_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_dir\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     34\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;31m# y_pred will be generated by the UNET model during inference\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/tmp/ipykernel_27/3645649563.py\u001b[0m in \u001b[0;36mload_data\u001b[0;34m(data_dir, split)\u001b[0m\n\u001b[1;32m      8\u001b[0m     \u001b[0mfilenames\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m     \u001b[0mfilename\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"00003e153.jpg\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m     \u001b[0mlabel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"abc\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\".jpg\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mfilename\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlistdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_dir\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mfilename\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mendswith\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\".jpg\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mIndexError\u001b[0m: list index out of range"],"ename":"IndexError","evalue":"list index out of range","output_type":"error"}],"execution_count":29},{"cell_type":"code","source":"import numpy as np\nimport keras\nfrom keras.models import Model\nfrom keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate\nfrom sklearn.metrics import precision_recall_fscore_support\n\n# Define the UNET model architecture\ninputs = Input((768, 768, 3))\nc1 = Conv2D(16, (3, 3), activation='relu', padding='same')(inputs)\np1 = MaxPooling2D((2, 2))(c1)\nc2 = Conv2D(32, (3, 3), activation='relu', padding='same')(p1)\np2 = MaxPooling2D((2, 2))(c2)\nc3 = Conv2D(64, (3, 3), activation='relu', padding='same')(p2)\np3 = MaxPooling2D((2, 2))(c3)\nc4 = Conv2D(128, (3, 3), activation='relu', padding='same')(p3)\np4 = MaxPooling2D((2, 2))(c4)\nc5 = Conv2D(256, (3, 3), activation='relu', padding='same')(p4)\nu6 = UpSampling2D((2, 2))(c5)\nu6 = concatenate([u6, c4])\nc6 = Conv2D(128, (3, 3), activation='relu', padding='same')(u6)\nu7 = UpSampling2D((2, 2))(c6)\nu7 = concatenate([u7, c3])\nc7 = Conv2D(64, (3, 3), activation='relu', padding='same')(u7)\nu8 = UpSampling2D((2, 2))(c7)\nu8 = concatenate([u8, c2])\nc8 = Conv2D(32, (3, 3), activation='relu', padding='same')(u8)\nu9 = UpSampling2D((2, 2))(c8)\nu9 = concatenate([u9, c1])\nc9 = Conv2D(16, (3, 3), activation='relu', padding='same')(u9)\noutputs = Conv2D(1, (1, 1), activation='sigmoid')(c9)\n\nmodel = Model(inputs, outputs)\nmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n\n# Train the model\nmodel.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))\n\n# Make predictions on the test data\ny_pred = model.predict(X_test)\ny_pred = np.round(y_pred)\n\n# Calculate the precision, recall, and F1 score\nprecision, recall, f1_score, _ = precision_recall_fscore_support(y_test, y_pred\n                                                                )","metadata":{"execution":{"iopub.status.busy":"2023-02-13T19:43:04.248039Z","iopub.execute_input":"2023-02-13T19:43:04.24842Z","iopub.status.idle":"2023-02-13T19:43:12.009866Z","shell.execute_reply.started":"2023-02-13T19:43:04.248389Z","shell.execute_reply":"2023-02-13T19:43:12.00823Z"},"trusted":true},"outputs":[{"name":"stderr","text":"2023-02-13 19:43:11.539466: I tensorflow/core/common_runtime/process_util.cc:146] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.\n","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_27/1934876317.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     34\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;31m# Train the model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidation_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_val\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_val\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     37\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     38\u001b[0m \u001b[0;31m# Make predictions on the test data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'y_train' is not defined"],"ename":"NameError","evalue":"name 'y_train' is not defined","output_type":"error"}],"execution_count":16}]}