{"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":11039310,"sourceType":"datasetVersion","datasetId":6876115}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install ultralytics dicomsdl","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport cv2\nimport numpy as np\nimport torch\nimport yaml\nfrom ultralytics import YOLO\nimport dicomsdl\nfrom pathlib import Path","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-04T08:06:25.388555Z","iopub.execute_input":"2025-07-04T08:06:25.388865Z","iopub.status.idle":"2025-07-04T08:06:29.581104Z","shell.execute_reply.started":"2025-07-04T08:06:25.388826Z","shell.execute_reply":"2025-07-04T08:06:29.580458Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n# Đường dẫn chính của tập dữ liệu\nDATASET_PATH = \"/kaggle/input/rsna-roi/rsna_annotations/yolo_ds\"\n\n# Kiểm tra thư mục chứa dữ liệu\nprint(\"Thư mục trong dataset:\", os.listdir(DATASET_PATH))\n\n# Kiểm tra thư mục train và valid\nprint(\"Thư mục train:\", os.listdir(os.path.join(DATASET_PATH, \"train\"))[:5])  # Hiển thị 5 file đầu tiên\nprint(\"Thư mục valid:\", os.listdir(os.path.join(DATASET_PATH, \"valid\"))[:5])\n\n# Kiểm tra số lượng ảnh và nhãn trong train/\ntrain_images = os.listdir(os.path.join(DATASET_PATH, \"train/images\"))\ntrain_labels = os.listdir(os.path.join(DATASET_PATH, \"train/labels\"))\n\n# Kiểm tra số lượng ảnh và nhãn trong valid/\nval_images = os.listdir(os.path.join(DATASET_PATH, \"valid/images\"))\nval_labels = os.listdir(os.path.join(DATASET_PATH, \"valid/labels\"))\n\nprint(f\"Tổng số ảnh train: {len(train_images)}, Số nhãn train: {len(train_labels)}\")\nprint(f\"Tổng số ảnh valid: {len(val_images)}, Số nhãn valid: {len(val_labels)}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-04T08:06:29.58189Z","iopub.execute_input":"2025-07-04T08:06:29.582329Z","iopub.status.idle":"2025-07-04T08:06:29.724898Z","shell.execute_reply.started":"2025-07-04T08:06:29.5823Z","shell.execute_reply":"2025-07-04T08:06:29.724272Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n\n# Đường dẫn đến mô hình YOLO11n đã huấn luyện\nYOLO11_MODEL_PATH = \"/kaggle/working/runs/detect/train/weights/best.pt\"\n\n# Đường dẫn đến tập test của Kaggle\nTEST_DICOM_PATH = \"/kaggle/input/rsna-breast-cancer-detection/test_images\"\nprint(\"Thư mục trong dataset:\", os.listdir(DATASET_PATH))\n\n# Thư mục lưu ảnh PNG đã crop\nSAVE_IMG_ROOT_DIR = \"/kaggle/working/test_cropped_images\"\nos.makedirs(SAVE_IMG_ROOT_DIR, exist_ok=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-04T08:06:29.725635Z","iopub.execute_input":"2025-07-04T08:06:29.725869Z","iopub.status.idle":"2025-07-04T08:06:29.731327Z","shell.execute_reply.started":"2025-07-04T08:06:29.72585Z","shell.execute_reply":"2025-07-04T08:06:29.730499Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n\n# Đường dẫn file data.yaml\nyaml_path = \"/kaggle/input/rsna-roi/rsna_annotations/yolo_ds/data.yaml\"\n\n# Đọc file yaml\nwith open(yaml_path, 'r') as f:\n    data_yaml = yaml.safe_load(f)\n\n# Cập nhật đường dẫn đúng\ndata_yaml[\"path\"] = \"/kaggle/input/rsna-roi/rsna_annotations/yolo_ds\"\ndata_yaml[\"train\"] = \"train/images\"\ndata_yaml[\"val\"] = \"valid/images\"\n\n# Ghi lại file yaml vào thư mục /kaggle/working/ để sử dụng\nyaml_path_updated = \"/kaggle/working/data.yaml\"\nwith open(yaml_path_updated, 'w') as f:\n    yaml.dump(data_yaml, f)\n\nprint(\"✅ File `data.yaml` đã được cập nhật tại:\", yaml_path_updated)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-04T08:06:29.732127Z","iopub.execute_input":"2025-07-04T08:06:29.732427Z","iopub.status.idle":"2025-07-04T08:06:29.753084Z","shell.execute_reply.started":"2025-07-04T08:06:29.732407Z","shell.execute_reply":"2025-07-04T08:06:29.752451Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!yolo task=detect mode=train model=/kaggle/working/yolo11n.pt data=/kaggle/working/data.yaml epochs=50 imgsz=416 batch=16 device=0","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-04T08:06:29.754829Z","iopub.execute_input":"2025-07-04T08:06:29.755032Z","iopub.status.idle":"2025-07-04T08:10:40.368435Z","shell.execute_reply.started":"2025-07-04T08:06:29.755016Z","shell.execute_reply":"2025-07-04T08:10:40.36734Z"}},"outputs":[],"execution_count":null}]}