{"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"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":19989,"databundleVersionId":1160143,"sourceType":"competition"},{"sourceId":11891034,"sourceType":"datasetVersion","datasetId":7473992},{"sourceId":11896994,"sourceType":"datasetVersion","datasetId":7478378},{"sourceId":11899614,"sourceType":"datasetVersion","datasetId":7479752},{"sourceId":11940941,"sourceType":"datasetVersion","datasetId":7479093},{"sourceId":412238,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":331222,"modelId":352117}],"dockerImageVersionId":30350,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!python --version","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:02.765696Z","iopub.execute_input":"2025-05-26T03:26:02.766433Z","iopub.status.idle":"2025-05-26T03:26:03.798573Z","shell.execute_reply.started":"2025-05-26T03:26:02.766401Z","shell.execute_reply":"2025-05-26T03:26:03.797588Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip uninstall -y fairscale","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:03.800546Z","iopub.execute_input":"2025-05-26T03:26:03.800847Z","iopub.status.idle":"2025-05-26T03:26:05.692428Z","shell.execute_reply.started":"2025-05-26T03:26:03.800818Z","shell.execute_reply":"2025-05-26T03:26:05.691103Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# !pip install torch==1.10.0 torchvision==0.11.1 torchaudio==0.10.0 --extra-index-url https://download.pytorch.org/whl/cu113\n# !pip install mmcv-full==1.3.18 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html\n# !pip install mmdet==2.25.3\n# !pip install yapf\n# !pip install fairscale==0.4.6\n# !pip install fvcore\n# !pip install timm==0.9.2 --no-deps\n# !pip install pyyaml\n# !pip install einops\n\n!pip install --no-index --find-links=/kaggle/input/whl-env/whl_env \\\n  torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 mmcv-full mmdet yapf fairscale fvcore pyyaml einops\n\n!pip install --no-index --find-links=/kaggle/input/whl-env/whl_env timm --no-deps","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:05.694050Z","iopub.execute_input":"2025-05-26T03:26:05.694383Z","iopub.status.idle":"2025-05-26T03:26:16.354781Z","shell.execute_reply.started":"2025-05-26T03:26:05.694353Z","shell.execute_reply":"2025-05-26T03:26:16.353682Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\n\"\"\"\"\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\"\"\"\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:16.356979Z","iopub.execute_input":"2025-05-26T03:26:16.357296Z","iopub.status.idle":"2025-05-26T03:26:16.364018Z","shell.execute_reply.started":"2025-05-26T03:26:16.357267Z","shell.execute_reply":"2025-05-26T03:26:16.363083Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os, json\nfrom glob import glob\n\ntest_dir = '/kaggle/input/global-wheat-detection/test/'\nimage_paths = sorted(glob(os.path.join(test_dir, '*.jpg')))\n\ncoco_dict = {\n    \"images\": [],\n    \"annotations\": [],\n    \"categories\": [{\"id\": 1, \"name\": \"wheat\"}]\n}\n\nfor i, img_path in enumerate(image_paths):\n    file_name = os.path.basename(img_path)\n    coco_dict[\"images\"].append({\n        \"id\": i,\n        \"file_name\": file_name,\n        \"width\": 1024,\n        \"height\": 1024\n    })\n\nos.makedirs(\"/kaggle/working/annotations\", exist_ok=True)\nwith open(\"/kaggle/working/annotations/instances_test.json\", \"w\") as f:\n    json.dump(coco_dict, f)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:16.365209Z","iopub.execute_input":"2025-05-26T03:26:16.366128Z","iopub.status.idle":"2025-05-26T03:26:16.375162Z","shell.execute_reply.started":"2025-05-26T03:26:16.366101Z","shell.execute_reply":"2025-05-26T03:26:16.374420Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!mkdir -p /kaggle/working/Co-DETR/projects/configs/co_dino_vit/\n\n!cp /kaggle/input/configure-codetr/pretrained_wheat_co_dino_5scale_vit_large_coco.py \\\n     /kaggle/working/Co-DETR/projects/configs/co_dino_vit/","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:16.376174Z","iopub.execute_input":"2025-05-26T03:26:16.376471Z","iopub.status.idle":"2025-05-26T03:26:18.409891Z","shell.execute_reply.started":"2025-05-26T03:26:16.376448Z","shell.execute_reply":"2025-05-26T03:26:18.408548Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!cp /kaggle/input/co-detr/Co-DETR/tools/test.py /kaggle/working/test.py\n!cp /kaggle/input/co-detr/Co-DETR/tools/dist_test.sh /kaggle/working/dist_test.sh","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:18.411403Z","iopub.execute_input":"2025-05-26T03:26:18.411682Z","iopub.status.idle":"2025-05-26T03:26:20.477859Z","shell.execute_reply.started":"2025-05-26T03:26:18.411656Z","shell.execute_reply":"2025-05-26T03:26:20.476778Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!chmod +x /kaggle/working/dist_test.sh\n!chmod +x /kaggle/working/test.py","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:20.479629Z","iopub.execute_input":"2025-05-26T03:26:20.479912Z","iopub.status.idle":"2025-05-26T03:26:22.527430Z","shell.execute_reply.started":"2025-05-26T03:26:20.479883Z","shell.execute_reply":"2025-05-26T03:26:22.526087Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 將 .sh 檔轉換為 Unix 格式\nimport os\n\ndef convert_dos2unix(filepath):\n    with open(filepath, 'rb') as f:\n        content = f.read()\n    content = content.replace(b'\\r\\n', b'\\n')\n    with open(filepath, 'wb') as f:\n        f.write(content)\n\nconvert_dos2unix('/kaggle/working/dist_test.sh')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:22.528991Z","iopub.execute_input":"2025-05-26T03:26:22.529333Z","iopub.status.idle":"2025-05-26T03:26:22.535742Z","shell.execute_reply.started":"2025-05-26T03:26:22.529301Z","shell.execute_reply":"2025-05-26T03:26:22.534608Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!PYTHONPATH=/kaggle/input/co-detr/Co-DETR \\\npython /kaggle/input/co-detr/Co-DETR/tools/test.py \\\n  /kaggle/working/Co-DETR/projects/configs/co_dino_vit/pretrained_wheat_co_dino_5scale_vit_large_coco.py \\\n  /kaggle/input/co-detr-1/pytorch/default/16/new_epoch_20.pth \\\n  --format-only \\\n  --options \"jsonfile_prefix=./wheat_results\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:26:22.539551Z","iopub.execute_input":"2025-05-26T03:26:22.539884Z","iopub.status.idle":"2025-05-26T03:27:19.044055Z","shell.execute_reply.started":"2025-05-26T03:26:22.539849Z","shell.execute_reply":"2025-05-26T03:27:19.042409Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import json, os\nimport matplotlib.pyplot as plt\nimport cv2\n\n# === 設定路徑 ===\njson_path = \"/kaggle/working/wheat_results.bbox.json\"\ncoco_ann_path = \"/kaggle/working/annotations/instances_test.json\"\ntest_img_dir = \"/kaggle/input/global-wheat-detection/test\"\noutput_dir = \"/kaggle/working/vis_preds/\"\nos.makedirs(output_dir, exist_ok=True)\n\n# === Step 1: 建立 id → file_name 的 mapping ===\nwith open(coco_ann_path) as f:\n    coco = json.load(f)\nid_to_filename = {img[\"id\"]: img[\"file_name\"] for img in coco[\"images\"]}\n\n# === Step 2: 載入預測結果 ===\nwith open(json_path) as f:\n    predictions = json.load(f)\n\n# === Step 3: 繪製 bounding boxes ===\nimg_dict = {}\nfor pred in predictions:\n    image_id = pred[\"image_id\"]     # int\n    file_name = id_to_filename[image_id]  # e.g. \"2fd875eaa.jpg\"\n    bbox = pred[\"bbox\"]\n    score = pred[\"score\"]\n\n    if score < 0.5:\n        continue\n\n    if file_name not in img_dict:\n        img_path = os.path.join(test_img_dir, file_name)\n        img = cv2.imread(img_path)\n        if img is None:\n            print(f\"⚠️ 找不到圖片: {img_path}\")\n            continue\n        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n        img_dict[file_name] = img\n\n    x, y, w, h = map(int, bbox)\n    cv2.rectangle(img_dict[file_name], (x, y), (x + w, y + h), (255, 0, 0), 2)\n    cv2.putText(img_dict[file_name], f\"{score:.2f}\", (x, y - 2),\n                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)\n\n# === Step 4: 儲存每張圖像 ===\nfor file_name, img in img_dict.items():\n    out_path = os.path.join(output_dir, file_name)\n    plt.imsave(out_path, img)\n\nprint(f\"✅ 成功儲存 {len(img_dict)} 張預測圖至: {output_dir}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:27:19.045937Z","iopub.execute_input":"2025-05-26T03:27:19.046358Z","iopub.status.idle":"2025-05-26T03:27:19.791677Z","shell.execute_reply.started":"2025-05-26T03:27:19.046319Z","shell.execute_reply":"2025-05-26T03:27:19.790875Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from IPython.display import display, Image\nimport os\n\nvis_dir = \"/kaggle/working/vis_preds\"\n\n# 列出所有 .jpg 圖片並排序（可視需要改副檔名）\nimage_files = sorted([f for f in os.listdir(vis_dir) if f.endswith(\".jpg\")])\n\nfor fname in image_files[:10]:\n    print(f\"📷 {fname}\")\n    display(Image(filename=os.path.join(vis_dir, fname)))","metadata":{"execution":{"iopub.status.busy":"2025-05-26T03:27:19.792939Z","iopub.execute_input":"2025-05-26T03:27:19.793697Z","iopub.status.idle":"2025-05-26T03:27:19.866263Z","shell.execute_reply.started":"2025-05-26T03:27:19.793658Z","shell.execute_reply":"2025-05-26T03:27:19.865424Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"!cp /kaggle/input/configure-codetr/pl_pretrained_wheat_co_dino_5scale_vit_large_coco.py \\\n     /kaggle/working/Co-DETR/projects/configs/co_dino_vit/","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:10:41.863201Z","iopub.execute_input":"2025-05-25T05:10:41.863473Z","iopub.status.idle":"2025-05-25T05:10:42.885100Z","shell.execute_reply.started":"2025-05-25T05:10:41.863449Z","shell.execute_reply":"2025-05-25T05:10:42.883693Z"}}},{"cell_type":"markdown","source":"import json\nfrom collections import defaultdict\nimport os\n\n# === 檔案路徑設定 ===\ncoco_path = \"/kaggle/working/annotations/instances_test.json\"\npred_path = \"/kaggle/working/wheat_results.bbox.json\"\noutput_json = \"/kaggle/working/annotations/pseudo_instances_test.json\"\n\n# === Step 1: 載入原 COCO image metadata ===\nwith open(coco_path) as f:\n    coco = json.load(f)\nimage_id_to_name = {img[\"id\"]: img[\"file_name\"] for img in coco[\"images\"]}\n\n# === Step 2: 載入預測框 ===\nwith open(pred_path) as f:\n    preds = json.load(f)\n\n# === Step 3: 組成 COCO 格式 annotations（保留高信心框）===\nannotations = []\nann_id = 1\nfor pred in preds:\n    image_id = pred[\"image_id\"]\n    if pred[\"score\"] < 0.8:\n        continue\n    annotations.append({\n        \"id\": ann_id,\n        \"image_id\": image_id,\n        \"category_id\": 1,  # wheat 類別\n        \"bbox\": pred[\"bbox\"],  # [x, y, w, h]\n        \"area\": pred[\"bbox\"][2] * pred[\"bbox\"][3],\n        \"iscrowd\": 0\n    })\n    ann_id += 1\n\n# === Step 4: 輸出為 pseudo COCO JSON（可直接拿來 train）===\npseudo_coco = {\n    \"images\": coco[\"images\"],  # 保留原圖資訊\n    \"annotations\": annotations,\n    \"categories\": [{\"id\": 1, \"name\": \"wheat\"}]\n}\n\nos.makedirs(os.path.dirname(output_json), exist_ok=True)\nwith open(output_json, \"w\") as f:\n    json.dump(pseudo_coco, f)\n\nprint(f\"✅ 已產生 pseudo COCO json：{output_json}，共 {len(annotations)} 筆預測框\")","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:10:42.887008Z","iopub.execute_input":"2025-05-25T05:10:42.887984Z","iopub.status.idle":"2025-05-25T05:10:43.049912Z","shell.execute_reply.started":"2025-05-25T05:10:42.887939Z","shell.execute_reply":"2025-05-25T05:10:43.048863Z"}}},{"cell_type":"markdown","source":"from mmcv import Config\nfrom mmdet.datasets import build_dataset\n\ncfg = Config.fromfile('/kaggle/input/configure-codetr/pl_pretrained_wheat_co_dino_5scale_vit_large_coco.py')\ndataset = build_dataset(cfg.data.train)\n\nfor i in range(len(dataset)):\n    try:\n        data = dataset[i]\n        print(f\"✅ Loaded sample {i}\")\n    except Exception as e:\n        print(f\"❌ Failed at index {i}: {e}\")\n\nfor i in range(len(dataset)):\n    data = dataset[i]\n    bboxes = data['gt_bboxes'].data\n    num_boxes = bboxes.shape[0] if hasattr(bboxes, 'shape') else len(bboxes)\n    if num_boxes == 0:\n        filename = data['img_metas'].data['filename']\n        print(f\"⚠️ No boxes in image {filename} (index {i})\")\n\n# 確認 collate 後的 batch 是否正確\nfrom torch.utils.data import DataLoader\nfrom mmdet.datasets import build_dataloader\n\ndataloader = build_dataloader(dataset, samples_per_gpu=1, workers_per_gpu=0)\nbatch = next(iter(dataloader))\nprint(batch.keys())  # 應該包含 img, gt_bboxes, gt_labels","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:10:43.051003Z","iopub.execute_input":"2025-05-25T05:10:43.051255Z","iopub.status.idle":"2025-05-25T05:10:58.241702Z","shell.execute_reply.started":"2025-05-25T05:10:43.051232Z","shell.execute_reply":"2025-05-25T05:10:58.240530Z"}}},{"cell_type":"markdown","source":"!PYTHONPATH=/kaggle/input/co-detr/Co-DETR \\\npython /kaggle/input/co-detr/Co-DETR/tools/train.py \\\n  /kaggle/working/Co-DETR/projects/configs/co_dino_vit/pl_pretrained_wheat_co_dino_5scale_vit_large_coco.py \\\n  --gpus 1 \\\n  --work-dir /kaggle/working","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:10:58.243132Z","iopub.execute_input":"2025-05-25T05:10:58.243597Z","iopub.status.idle":"2025-05-25T05:11:11.153202Z","shell.execute_reply.started":"2025-05-25T05:10:58.243567Z","shell.execute_reply":"2025-05-25T05:11:11.152059Z"}}},{"cell_type":"markdown","source":"!PYTHONPATH=/kaggle/input/co-detr/Co-DETR \\\npython /kaggle/input/co-detr/Co-DETR/tools/test.py \\\n  /kaggle/working/Co-DETR/projects/configs/co_dino_vit/pretrained_wheat_co_dino_5scale_vit_large_coco.py \\\n  /kaggle/working/latest.pth \\\n  --format-only \\\n  --options \"jsonfile_prefix=./wheat_results\"","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:11:11.154770Z","iopub.execute_input":"2025-05-25T05:11:11.155219Z","iopub.status.idle":"2025-05-25T05:11:26.068515Z","shell.execute_reply.started":"2025-05-25T05:11:11.155175Z","shell.execute_reply":"2025-05-25T05:11:26.067239Z"}}},{"cell_type":"markdown","source":"import json, os\nimport matplotlib.pyplot as plt\nimport cv2\n\n# === 設定路徑 ===\njson_path = \"/kaggle/working/wheat_results.bbox.json\"\ncoco_ann_path = \"/kaggle/working/annotations/instances_test.json\"\ntest_img_dir = \"/kaggle/input/global-wheat-detection/test\"\noutput_dir = \"/kaggle/working/vis_preds/\"\nos.makedirs(output_dir, exist_ok=True)\n\n# === Step 1: 建立 id → file_name 的 mapping ===\nwith open(coco_ann_path) as f:\n    coco = json.load(f)\nid_to_filename = {img[\"id\"]: img[\"file_name\"] for img in coco[\"images\"]}\n\n# === Step 2: 載入預測結果 ===\nwith open(json_path) as f:\n    predictions = json.load(f)\n\n# === Step 3: 繪製 bounding boxes ===\nimg_dict = {}\nfor pred in predictions:\n    image_id = pred[\"image_id\"]     # int\n    file_name = id_to_filename[image_id]  # e.g. \"2fd875eaa.jpg\"\n    bbox = pred[\"bbox\"]\n    score = pred[\"score\"]\n\n    if score < 0.5:\n        continue\n\n    if file_name not in img_dict:\n        img_path = os.path.join(test_img_dir, file_name)\n        img = cv2.imread(img_path)\n        if img is None:\n            print(f\"⚠️ 找不到圖片: {img_path}\")\n            continue\n        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n        img_dict[file_name] = img\n\n    x, y, w, h = map(int, bbox)\n    cv2.rectangle(img_dict[file_name], (x, y), (x + w, y + h), (255, 0, 0), 2)\n    cv2.putText(img_dict[file_name], f\"{score:.2f}\", (x, y - 2),\n                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)\n\n# === Step 4: 儲存每張圖像 ===\nfor file_name, img in img_dict.items():\n    out_path = os.path.join(output_dir, file_name)\n    plt.imsave(out_path, img)\n\nprint(f\"✅ 成功儲存 {len(img_dict)} 張預測圖至: {output_dir}\")","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:11:26.070214Z","iopub.execute_input":"2025-05-25T05:11:26.070579Z","iopub.status.idle":"2025-05-25T05:11:26.950881Z","shell.execute_reply.started":"2025-05-25T05:11:26.070528Z","shell.execute_reply":"2025-05-25T05:11:26.949877Z"}}},{"cell_type":"markdown","source":"from IPython.display import display, Image\nimport os\n\nvis_dir = \"/kaggle/working/vis_preds\"\n\n# 列出所有 .jpg 圖片並排序（可視需要改副檔名）\nimage_files = sorted([f for f in os.listdir(vis_dir) if f.endswith(\".jpg\")])\n\nfor fname in image_files[:10]:\n    print(f\"📷 {fname}\")\n    display(Image(filename=os.path.join(vis_dir, fname)))","metadata":{"execution":{"iopub.status.busy":"2025-05-25T05:11:26.951969Z","iopub.execute_input":"2025-05-25T05:11:26.952245Z","iopub.status.idle":"2025-05-25T05:11:27.033944Z","shell.execute_reply.started":"2025-05-25T05:11:26.952219Z","shell.execute_reply":"2025-05-25T05:11:27.033072Z"}}},{"cell_type":"code","source":"import json\nimport pandas as pd\nfrom collections import defaultdict\n\n# Step 1: 載入 COCO 標註，建立 id → filename 映射\nwith open(\"/kaggle/working/annotations/instances_test.json\") as f:\n    coco = json.load(f)\nid_to_filename = {img[\"id\"]: img[\"file_name\"] for img in coco[\"images\"]}\n\n# Step 2: 載入預測結果\nwith open(\"/kaggle/working/wheat_results.bbox.json\") as f:\n    preds = json.load(f)\n\n# Step 3: 整理每張圖的預測框\nresults = defaultdict(list)\nfor pred in preds:\n    image_id = pred[\"image_id\"]\n    x, y, w, h = pred[\"bbox\"]\n    score = pred[\"score\"]\n    if score >= 0.5:\n        results[image_id].append(f\"{score} {x} {y} {w} {h}\")\n\n# Step 4: 組合成完整 submission，包括沒有預測的圖\nrows = []\nfor coco_id, file_name in id_to_filename.items():\n    image_id = file_name[:-4]  # 去掉 .jpg\n    preds = results.get(coco_id, [])\n    pred_str = \" \".join(preds)\n    rows.append({\"image_id\": image_id, \"PredictionString\": pred_str})\n\n# Step 5: 儲存 CSV\nsubmission = pd.DataFrame(rows)\nsubmission.to_csv(\"/kaggle/working/submission.csv\", index=False)\nprint(\"✅ 成功產出完整 submission.csv，共\", len(submission), \"筆\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:27:19.867386Z","iopub.execute_input":"2025-05-26T03:27:19.867632Z","iopub.status.idle":"2025-05-26T03:27:20.055085Z","shell.execute_reply.started":"2025-05-26T03:27:19.867609Z","shell.execute_reply":"2025-05-26T03:27:20.054161Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\n\ndf_csv = pd.read_csv(\"/kaggle/working/submission.csv\")\ndisplay(df_csv)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-05-26T03:27:20.056519Z","iopub.execute_input":"2025-05-26T03:27:20.057157Z","iopub.status.idle":"2025-05-26T03:27:20.069092Z","shell.execute_reply.started":"2025-05-26T03:27:20.057120Z","shell.execute_reply":"2025-05-26T03:27:20.068249Z"}},"outputs":[],"execution_count":null}]}