{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":87323,"databundleVersionId":9934427,"sourceType":"competition"}],"dockerImageVersionId":30823,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<h1>Roc_Fake Scene Classification Using MultiModalPredictor</h1>","metadata":{}},{"cell_type":"code","source":"pip install \"scikit-learn>=1.4.0,<1.5.3\"\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:35:15.531545Z","iopub.execute_input":"2025-01-05T07:35:15.531776Z","iopub.status.idle":"2025-01-05T07:35:23.477084Z","shell.execute_reply.started":"2025-01-05T07:35:15.531745Z","shell.execute_reply":"2025-01-05T07:35:23.476079Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install autogluon","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:35:31.832996Z","iopub.execute_input":"2025-01-05T07:35:31.833329Z","iopub.status.idle":"2025-01-05T07:36:11.845745Z","shell.execute_reply.started":"2025-01-05T07:35:31.833298Z","shell.execute_reply":"2025-01-05T07:36:11.844922Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os \n\nos.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8'\n\nimport cv2\nfrom scipy.ndimage import convolve\nfrom PIL import Image,ImageFilter\nimport argparse\nimport os\nimport random,numpy\nfrom torch.utils.data import DataLoader, random_split\nimport torchvision\nimport torchvision.transforms as transforms","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:36:17.111702Z","iopub.execute_input":"2025-01-05T07:36:17.112011Z","iopub.status.idle":"2025-01-05T07:36:21.879997Z","shell.execute_reply.started":"2025-01-05T07:36:17.111983Z","shell.execute_reply":"2025-01-05T07:36:21.879357Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:36:24.506365Z","iopub.execute_input":"2025-01-05T07:36:24.506758Z","iopub.status.idle":"2025-01-05T07:36:24.510389Z","shell.execute_reply.started":"2025-01-05T07:36:24.506735Z","shell.execute_reply":"2025-01-05T07:36:24.509511Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\ntorch.cuda.empty_cache()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:36:26.717940Z","iopub.execute_input":"2025-01-05T07:36:26.718246Z","iopub.status.idle":"2025-01-05T07:36:26.721787Z","shell.execute_reply.started":"2025-01-05T07:36:26.718198Z","shell.execute_reply":"2025-01-05T07:36:26.721123Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<h1>Enhancing Images in Train and Test</h1>","metadata":{}},{"cell_type":"code","source":"train_info = pd.read_csv('/kaggle/input/cidaut-ai-fake-scene-classification-2024/train.csv')\n\nif not os.path.exists(f\"/kaggle/working/train/\"):\n    os.mkdir(f\"/kaggle/working/train/\")\n    os.mkdir(f\"/kaggle/working/train/real/\")\n    os.mkdir(f\"/kaggle/working/train/editada/\")\n\nfor i in zip(train_info['image'], train_info['label'], range(len(train_info['image']))):\n    image = Image.open(f\"/kaggle/input/cidaut-ai-fake-scene-classification-2024/Train/{i[0]}\")\n\n    if i[1] == \"real\":\n        \n        if not os.path.exists(f\"/kaggle/working/train/real/\"):\n            os.mkdir(f\"/kaggle/working/train/real/\")\n        image.filter(ImageFilter.EDGE_ENHANCE_MORE).save(\n            f\"/kaggle/working/train/real/{i[0]}\"\n        )\n    elif i[1] == \"editada\":\n\n        if not os.path.exists(f\"/kaggle/working/train/editada/\"):\n            os.mkdir(f\"/kaggle/working/train/editada/\")\n        image.filter(ImageFilter.EDGE_ENHANCE_MORE).save(\n            f\"/kaggle/working/train/editada/{i[0]}\"\n        )\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:36:30.481493Z","iopub.execute_input":"2025-01-05T07:36:30.481784Z","iopub.status.idle":"2025-01-05T07:37:00.338942Z","shell.execute_reply.started":"2025-01-05T07:36:30.481761Z","shell.execute_reply":"2025-01-05T07:37:00.338173Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_info=os.listdir(\"/kaggle/input/cidaut-ai-fake-scene-classification-2024/Test\")\n\nif os.path.exists(f\"/kaggle/working/test/\")==False:\n    os.mkdir(f\"/kaggle/working/test/\")\n\nfor i in train_info:\n    \n    image = Image.open(f\"/kaggle/input/cidaut-ai-fake-scene-classification-2024/Test/{i}\")\n    image.filter(filter=ImageFilter.EDGE_ENHANCE_MORE).save(f\"/kaggle/working/test/{i}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:37:00.340130Z","iopub.execute_input":"2025-01-05T07:37:00.340397Z","iopub.status.idle":"2025-01-05T07:37:07.800517Z","shell.execute_reply.started":"2025-01-05T07:37:00.340374Z","shell.execute_reply":"2025-01-05T07:37:07.799805Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<h1>Transforming and Splitting Dataset</h1>","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport torchvision.transforms as transforms\nfrom torchvision.datasets import ImageFolder\nfrom sklearn.model_selection import train_test_split\nfrom autogluon.multimodal import MultiModalPredictor\n\ntrain_transform = transforms.Compose([\n    # transforms.Resize(450),\n    transforms.RandomRotation(15),\n    transforms.RandomHorizontalFlip(),\n    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),\n    transforms.ToTensor(),\n    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])\n])\n\ntrain = ImageFolder(root='/kaggle/working/train/', transform=train_transform)\n\nimage_paths = [sample[0] for sample in train.samples]\nlabels = [sample[1] for sample in train.samples]\ntrain_df = pd.DataFrame({\"image\": image_paths, \"label\": labels})\n\ntrain_df, val_df = train_test_split(train_df, test_size=0.2, random_state=42)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T07:37:24.472578Z","iopub.execute_input":"2025-01-05T07:37:24.472892Z","iopub.status.idle":"2025-01-05T07:37:37.645157Z","shell.execute_reply.started":"2025-01-05T07:37:24.472869Z","shell.execute_reply":"2025-01-05T07:37:37.644476Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<h1>Training Model</h1>","metadata":{}},{"cell_type":"code","source":"predictor = MultiModalPredictor(label=\"label\", problem_type=\"classification\", eval_metric=\"auc\")\n\npredictor.fit(\n    train_data=train_df,\n    tuning_data=val_df,\n    hyperparameters={\n        \"optimization.patience\": 3,\n    }\n)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T08:42:24.085346Z","iopub.execute_input":"2025-01-05T08:42:24.085681Z","iopub.status.idle":"2025-01-05T08:53:02.131826Z","shell.execute_reply.started":"2025-01-05T08:42:24.085654Z","shell.execute_reply":"2025-01-05T08:53:02.131007Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test =pd.read_csv(\"/kaggle/input/cidaut-ai-fake-scene-classification-2024/sample_submission.csv\")\n\ntest_path = '/kaggle/input/cidaut-ai-fake-scene-classification-2024/Test/'\n\ntest['image'] = test_path + test['image']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T08:57:46.684354Z","iopub.execute_input":"2025-01-05T08:57:46.684672Z","iopub.status.idle":"2025-01-05T08:57:46.692392Z","shell.execute_reply.started":"2025-01-05T08:57:46.684645Z","shell.execute_reply":"2025-01-05T08:57:46.691635Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds = predictor.predict(test, as_pandas=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T08:57:49.328344Z","iopub.execute_input":"2025-01-05T08:57:49.328657Z","iopub.status.idle":"2025-01-05T08:57:54.909675Z","shell.execute_reply.started":"2025-01-05T08:57:49.328634Z","shell.execute_reply":"2025-01-05T08:57:54.908810Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sub = pd.read_csv('/kaggle/input/cidaut-ai-fake-scene-classification-2024/sample_submission.csv')\n\nsub['label'] = preds\n\nsub.to_csv('submission1.csv', index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-01-05T08:58:10.892875Z","iopub.execute_input":"2025-01-05T08:58:10.893181Z","iopub.status.idle":"2025-01-05T08:58:10.982906Z","shell.execute_reply.started":"2025-01-05T08:58:10.893153Z","shell.execute_reply":"2025-01-05T08:58:10.982132Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}