{"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":"markdown","source":"# 数据说明\n\n竞赛数据包括从五个全切片图像（WSI）中提取的图块，分为两个数据集。数据集1的图块经过专家审核进行了注释。数据集2包含来自同一组WSI的其余图块，其中包含未经专家审核的标注。\n\n-   所有测试集图块来自数据集1。\n-   两个WSI组成训练集，两个WSI组成公共测试集，一个WSI组成私有测试集。\n-   训练数据包括公共测试WSI的数据集2图块，但不包括私有测试WSI的数据集2图块。\n\n![image.png](attachment:439a5557-c02f-4a39-b084-dfab19caf801.png)\n","metadata":{},"attachments":{"439a5557-c02f-4a39-b084-dfab19caf801.png":{"image/png":"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IBAIBAKBRkEg2H+jtHTUMxAIBAKBQCAQCAQCgUAgEAj2H30gEAgEAoFAIBAIBAKBQCAQaBQEgv03SktHPQOBQCAQCAQCgUAgEAgEAoFg/9EHAoFAIBAIBAKBQCAQCAQCgUZBoM7s/5prrtlwww3PPvvsiRMn5gnyuXPnXnfddfvss89aa6211157DRkyZPbs2Zmr4GOPPfaFL3zh05/+9AYbbPDd73733XffzVwVOlvgSZMmHX/88dttt90zzzzT2d+m5P4zzzxznXXWWWXBodXefvvtlBSsgsUYOXKkam6x+eYDBw68+eab586ZW8GH1/5Rl19++eabb540mc+NNtrob3/7W+2LUaU3Tp8+/Yorrthpp53WX3/9r371qy88/0KVXlTLx86fP//ee+895JBDPvOZzxx77LFPPfWUK7UsQM3eZfE6/PDDjzjiiKefftpL33///V/+8pebbbaZBrXGzZgxo2YlqciLhg4devTRRx988MFPPPFE8kAz5Pe+970dd9xRdSryino9xOL1xz/+cZNNNjnrrLOUYfTo0T//+c+33HJL4+600057880361Wwzr53yuQpf/7znzfddNPTTz/db1966aWTTjrJrKgiX//611988cXOPjBt948bN84g2mabbS688MJi2SaMn/B///d/22+//Y033li8WNWTRar69HYePnPmzF/84hdW7k8++aSd2zL6lUrdfvvtFvJdd931tttuO+ecc373u99hKtmqTs+ePa1tqmC83XXXXYbfAQcc0Lt372zVolOlRVOee+65xRdfvFO/StXNU6dOXX311ffcc89VV11Vl1t22WVTVbzuFwb/MKDIokcdfbQK6pYLLVxnLUY3K7XDDjussMIK06ZNmzNnTpMwM3duv379uvnM9Pz80UcfVSl8cfDgwSbDO/965yqrrrL88sunp4RdKAlGctVVV/Xo0QMtfvLJJ//0pz8ttdRS6667bhceldqf6I2kUARlxIgRmIpy6pm33nqrRsRRPv74YzRlpZVW2nnnnVNbhdKCqQ6BzUL86quvbrHFFslXL7zwwnnnnffggw+aLUtvztz5mDFjLrvssquvvjrRM5JFVfP555+nyXKugksssQSNySKL1I3ylQkpZmwVNqBmzZqV/GThhRemRTXPm/n/+te/9unThzrS0CvzgWm77fXXXz///PPvuOOO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jFEr+ogp/7q6usbGxoyMDLnvdEIEiAARIAJEYCkESP0vhRLlIQJEYJUS8Pl8J06caGpqkscAkj5epc295WZpNJrq6uqGnQ3WrNUbPeyWe0kFEAEiQASIwDISIPW/jHCpaCJABFJGAMFAm5ubYQs0NjaGIUEsliZBqzCYQUgfbHWcl5e3cePGnJwc8u5N2YeKKiICRIAIpCUBUv9p+VipU0SACBABIkAEiAARIAJEIAkBCm+SBAolEQEiQASIABEgAkSACBCBtCRA6j8tHyt1iggQASJABIgAESACRIAIJCFA6j8JFEoiAkSACBABIkAEiAARIAJpSYDUf1o+VuoUESACRIAIEAEiQASIABFIQoDUfxIolEQEiAARIAJEgAgQASJABNKSAKn/tHys1CkiQASIABEgAkSACBABIpCEAKn/JFAoiQgQASJABIgAESACRIAIpCUBUv9p+VipU0SACBABIkAEiAARIAJEIAkBUv9JoFASESACRIAIEAEiQASIABFISwKk/tPysVKniAARIAJEgAgQASJABIhAEgKk/pNAoSQiQASIABEgAkSACBABIpCWBEj9p+VjpU4RASJABIgAESACRIAIEIEkBEj9J4FCSUSACBABIkAEiAARIAJEIC0JkPpPy8dKnSICRIAIEAEiQASIABEgAkkIkPpPAoWSiAARIAJEgAgQASJABIhAWhIg9Z+Wj5U6RQSIABEgAkSACBABIkAEkhAg9Z8ECiURASJABIgAESACRIAIEIG0JEDqPy0fK3WKCBABIkAEiAARIAJEgAgkIUDqPwkUSiICRIAIEAEiQASIABEgAmlJgNR/Wj5W6hQRIAJEgAgQASJABIgAEUhCgNR/EiiURASIABEgAkSACBABIkAE0pLA/wecZrCVUzbmQAAAAABJRU5ErkJggg=="}}},{"cell_type":"markdown","source":"请注意，这是一个[**代码竞赛**](https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/overview/code-requirements)，其中实际测试集是隐藏的。当评分您的提交时，这个示例测试数据将被完整的测试集替换。完整的测试集中大约有650个图块。\n\n之前的HuBMAP竞赛的资源：\n\n-   [HuBMAP：肾脏分割](https://www.kaggle.com/competitions/hubmap-kidney-segmentation/)\n-   [HuBMAP + HPA：人体器官分割](https://www.kaggle.com/competitions/hubmap-organ-segmentation/)\n\n现有的数据文件说明：\n\n-   {train|test}/：包含图块的TIFF图像的文件夹。每个图块的大小为512x512。\n-   polygons.jsonl：JSONL格式的多边形分割掩模，可用于数据集1和数据集2。每行提供单个图像的JSON注释，包括：\n    -   `id`：在**train/**中标识相应的图像。\n    -   `annotations`：带有掩模注释的列表，包括：\n    -   `type`：标识注释结构的类型：\n        -   `blood_vessel`：目标结构。您在本竞赛中的目标是在测试集上预测这些类型的掩模。\n        -   `glomerulus`：肾脏中的毛细血管球结构。这些图像部分被排除在血管注释之外。您应该确保您的测试集预测不包含在毛细血管球结构内，否则将计为假阳性。测试集图块已提供注释。\n        -   `unsure`：专家无法确定是否为血管的结构。\n    -   `coordinates`：定义分割掩模的多边形坐标的列表。\n-   tile_meta.csv：每个图像的元数据。\n    -   `source_wsi`：标识从中提取出该图块的WSI。\n    -   `{i|j}`：在WSI中提取的图块的左上角位置。\n    -   `dataset`：该图块所属的数据集，如上所述。\n-   wsi_meta.csv：提取图块的全切片图像的元数据。\n    -   `source_wsi`：标识WSI。\n    -   `age`、`sex`、`race`、`height`、`weight`和`bmi`：有关组织供体的人口统计信息。\n-   sample_submission.csv：格式正确的样本提交文件。请参阅[**评估**](https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/overview/evaluation)页面了解更多详情。","metadata":{}},{"cell_type":"markdown","source":"# 数据读取\n\n原始链接: [https://www.kaggle.com/code/mersico/hubmap-eda-pycocotools-submission/notebook](https://www.kaggle.com/code/mersico/hubmap-eda-pycocotools-submission/notebook)","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt \nimport numpy as np\nimport os \nos.environ['WANDB_DISABLED'] = 'true'\n\nimport pandas as pd \nfrom tqdm import tqdm, notebook \nfrom collections import Counter\nimport warnings ","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:25:54.181470Z","iopub.execute_input":"2023-06-25T13:25:54.181922Z","iopub.status.idle":"2023-06-25T13:25:54.269265Z","shell.execute_reply.started":"2023-06-25T13:25:54.181890Z","shell.execute_reply":"2023-06-25T13:25:54.268352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_path = '/kaggle/input/hubmap-hacking-the-human-vasculature/'\nsample_submission_path = os.path.join(data_path, 'sample_submission.csv')\ntile_meta_path = os.path.join(data_path, 'tile_meta.csv')\nwsi_meta_path = os.path.join(data_path, 'wsi_meta.csv')\npolygons_path = os.path.join(data_path, 'polygons.jsonl')\ntrain_path = os.path.join(data_path, 'train/')","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:25:55.354714Z","iopub.execute_input":"2023-06-25T13:25:55.355058Z","iopub.status.idle":"2023-06-25T13:25:55.360495Z","shell.execute_reply.started":"2023-06-25T13:25:55.355030Z","shell.execute_reply":"2023-06-25T13:25:55.359524Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Sample submission","metadata":{}},{"cell_type":"markdown","source":"对于测试集中的每个图像，您需要预测一系列实例分割掩模及其关联的检测得分（`Confidence`）。`submission.csv`文件采用以下格式：\n\n```\nid,height,width,prediction_string\n72e40acccadf,512,512,0 1.0 eNoLTDAwyrM3yI/PMwcAE94DZA==\n```\n\n其中，`prediction_string`的格式为`0 {confidence} {EncodedMask}`。请注意，该度量标准有几个\"样板文件\"值，用于适应本竞赛；即`height`、`width`和`prediction_string`中的前导`0`，通常是一个类别标签。\n\n如果同一图像有多个实例分割掩模，请使用空格分隔不同的预测字符串，例如：\n\n```\nid,height,width,prediction_string\n72e40acccadf,512,512,0 1.0 eNoLTDAwyrM3yI/PMwcAE94DZA== 0 0.5 eAndnnDS1A/mdmkE35Ek9d\n```\n\n二进制分割掩模是经过[游程编码](https://en.wikipedia.org/wiki/Run-length_encoding)（RLE）编码、[zlib](https://en.wikipedia.org/wiki/Zlib)压缩和[base64](https://en.wikipedia.org/wiki/Base64)编码以文本格式使用的`EncodedMask`。具体来说，使用Coco分割掩模的RLE编码/解码（参见[COCO的分割掩模API](http://cocodataset.org/#download)中的`encode`方法）、zlib压缩/解压缩（[RFC1950](https://www.ietf.org/rfc/rfc1950.txt)）和标准的base64编码。","metadata":{}},{"cell_type":"code","source":"sample_submission = pd.read_csv(sample_submission_path)\nsample_submission","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:25:57.258661Z","iopub.execute_input":"2023-06-25T13:25:57.260520Z","iopub.status.idle":"2023-06-25T13:25:57.287606Z","shell.execute_reply.started":"2023-06-25T13:25:57.260478Z","shell.execute_reply":"2023-06-25T13:25:57.286595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Tile meta\n\n从五张大图像（称为\"全切片图像\"，WSI）中提取的小图块，称为\"瓦片\"（tiles）。这些WSI被分成两个数据集。在数据集1中，图块经过专家的审核和标记。而在数据集2中，图块来自同样的大图像，但它们没有像数据集1那样多的标记，并且这些标记没有经过专家的审核。","metadata":{}},{"cell_type":"code","source":"tile_meta = pd.read_csv(tile_meta_path)\ntile_meta","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:25:58.593186Z","iopub.execute_input":"2023-06-25T13:25:58.593556Z","iopub.status.idle":"2023-06-25T13:25:58.719793Z","shell.execute_reply.started":"2023-06-25T13:25:58.593527Z","shell.execute_reply":"2023-06-25T13:25:58.718921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tile_meta[['dataset', 'source_wsi']].drop_duplicates()","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:25:58.971008Z","iopub.execute_input":"2023-06-25T13:25:58.971681Z","iopub.status.idle":"2023-06-25T13:25:58.991209Z","shell.execute_reply.started":"2023-06-25T13:25:58.971634Z","shell.execute_reply":"2023-06-25T13:25:58.990305Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Wsi meta","metadata":{}},{"cell_type":"code","source":"wsi_meta = pd.read_csv(wsi_meta_path)\nwsi_meta","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:25:59.927078Z","iopub.execute_input":"2023-06-25T13:25:59.928115Z","iopub.status.idle":"2023-06-25T13:25:59.947770Z","shell.execute_reply.started":"2023-06-25T13:25:59.928075Z","shell.execute_reply":"2023-06-25T13:25:59.946912Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Polygons","metadata":{}},{"cell_type":"code","source":"!pip install pycocotools","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:01.196959Z","iopub.execute_input":"2023-06-25T13:26:01.197333Z","iopub.status.idle":"2023-06-25T13:26:34.705879Z","shell.execute_reply.started":"2023-06-25T13:26:01.197302Z","shell.execute_reply":"2023-06-25T13:26:34.704547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.utils.data import Dataset\nimport cv2\nimport yaml\nimport json\nfrom PIL import Image\n\ndataset_config = {\n    \"background\": {\n        \"apply_mask\": None,\n        \"label\": 0,\n        \"rgb\": (0, 0, 0),\n        \"loss_weight\": None\n    },\n    \"blood_vessel\": {\n        \"apply_mask\": True,\n        \"label\": 1,\n        \"rgb\": (255, 8, 8),\n        \"loss_weight\": None\n    },\n    \"glomerulus\": {\n        \"apply_mask\": True,\n        \"label\": 2,\n        \"rgb\": (8, 12, 255),\n        \"loss_weight\": None\n    },\n    \"unsure\": {\n        \"apply_mask\": True,\n        \"label\": 3,\n        \"rgb\": (8, 255, 20),\n        \"loss_weight\": None\n    }\n}\n\nclass HuBMAPDataset(Dataset):\n    def __init__(self, \n                 annotation_path: str,\n                 image_path: str):\n        self.__image_path = image_path\n        self.__samples = self.parse_jsonl(annotation_path)\n    \n    def __len__(self) -> int:\n        return len(self.__samples)\n\n    def __getitem__(self, idx: int) -> tuple[np.ndarray, np.ndarray]:\n        image = self.__get_image(idx)\n        mask = self.__get_mask(idx)\n        return image, mask\n    \n    @staticmethod\n    def parse_jsonl(path: str) -> list[dict, ...]:\n        with open(path, 'r') as json_file:\n            jsonl_labels = [\n                json.loads(line)\n                for line in notebook.tqdm(\n                    json_file, desc=\"Processing polygons\", total=1633\n                )\n            ]\n        return jsonl_labels\n\n    @staticmethod\n    def load_config(path: str) -> dict:\n        with open(path, mode=\"r\") as f:\n            data = yaml.load(stream=f, Loader=yaml.SafeLoader)\n        return data\n    \n    def __get_image_path(self, id: str) -> str:\n        path = os.path.join(\n            self.__image_path, f\"{id}.tif\"\n        )\n        return path\n    \n    def __get_image(self, idx: int) -> np.ndarray:\n        id = self.__samples[idx][\"id\"]\n        image_path = self.__get_image_path(id)\n        image = Image.open(image_path)\n        image = np.asarray(image)\n        return image\n    \n    def __get_mask(self, idx: int) -> np.ndarray:\n        mask = np.zeros((512, 512), dtype=np.uint8)\n        annotations = self.__samples[idx][\"annotations\"]\n        \n        for vessel in annotations:\n            vessel_type = vessel[\"type\"] \n            config = dataset_config[vessel_type]\n            \n            if config[\"apply_mask\"]:\n                coordinates = np.array(vessel[\"coordinates\"])\n                mask = cv2.fillPoly(\n                    mask, pts=coordinates,\n                    color=config[\"rgb\"]\n                )\n        return mask","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:34.708230Z","iopub.execute_input":"2023-06-25T13:26:34.708557Z","iopub.status.idle":"2023-06-25T13:26:37.566242Z","shell.execute_reply.started":"2023-06-25T13:26:34.708527Z","shell.execute_reply":"2023-06-25T13:26:37.565249Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = HuBMAPDataset(polygons_path, train_path)","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:37.567620Z","iopub.execute_input":"2023-06-25T13:26:37.568390Z","iopub.status.idle":"2023-06-25T13:26:41.883527Z","shell.execute_reply.started":"2023-06-25T13:26:37.568353Z","shell.execute_reply":"2023-06-25T13:26:41.882466Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image, mask = dataset[10]\nfig, (ax1, ax2) = plt.subplots(1, 2)\n\nax1.imshow(image)\nax2.imshow(mask)\nplt.show()","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:41.886353Z","iopub.execute_input":"2023-06-25T13:26:41.886786Z","iopub.status.idle":"2023-06-25T13:26:42.351844Z","shell.execute_reply.started":"2023-06-25T13:26:41.886753Z","shell.execute_reply":"2023-06-25T13:26:42.350914Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 转换COCO格式\n\n原始链接: [https://www.kaggle.com/code/fnands/convert-training-data-to-coco-format](https://www.kaggle.com/code/fnands/convert-training-data-to-coco-format)","metadata":{}},{"cell_type":"code","source":"import json\nfrom pathlib import Path\nimport os\nimport shutil\nimport cv2\nimport itertools\nimport numpy as np\nfrom typing import List, Dict\nfrom sklearn.model_selection import train_test_split\n\nwith open(polygons_path, 'r') as json_file:\n    json_list = list(json_file)\n    \ntiles_dicts = []\nfor json_str in json_list:\n    tiles_dicts.append(json.loads(json_str))\n    \nid_dict = {'blood_vessel': 0, 'glomerulus': 1, 'unsure': 2}","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:42.352850Z","iopub.execute_input":"2023-06-25T13:26:42.353161Z","iopub.status.idle":"2023-06-25T13:26:46.497382Z","shell.execute_reply.started":"2023-06-25T13:26:42.353134Z","shell.execute_reply":"2023-06-25T13:26:46.496367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Split into train and validation \ntrain_dicts, valid_dicts = train_test_split(tiles_dicts, test_size=0.2, random_state=42)","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:46.499277Z","iopub.execute_input":"2023-06-25T13:26:46.499653Z","iopub.status.idle":"2023-06-25T13:26:46.506136Z","shell.execute_reply.started":"2023-06-25T13:26:46.499618Z","shell.execute_reply":"2023-06-25T13:26:46.505288Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"id_dict = {'blood_vessel': 0, 'glomerulus': 1, 'unsure': 2}\n\ndef tile_to_coco(tile: List[Dict], output_folder: Path):\n    tile_id = tile['id']    \n    \n    shutil.copyfile(data_path + f'/train/{tile_id}.tif', output_folder + f'/{tile_id}.tif')\n    \n    with open(output_folder + f'/{tile_id}.txt', 'w') as text_file:\n        for annotation in tile['annotations']:\n            \n            class_id = id_dict[annotation['type']]\n            flat_mask_polygon = list(itertools.chain(*annotation['coordinates'][0]))\n            array = np.array(flat_mask_polygon)/512.\n            text_file.write(f'{class_id} {\" \".join(map(str, array))}\\n')\n\nos.makedirs('./coco-dataset/', exist_ok=True)\nos.makedirs('./coco-dataset/train/', exist_ok=True)\nos.makedirs('./coco-dataset/valid/', exist_ok=True)","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:46.507361Z","iopub.execute_input":"2023-06-25T13:26:46.507874Z","iopub.status.idle":"2023-06-25T13:26:46.519727Z","shell.execute_reply.started":"2023-06-25T13:26:46.507843Z","shell.execute_reply":"2023-06-25T13:26:46.518798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for train_dict in train_dicts: \n    tile_to_coco(train_dict, './coco-dataset/train/')\n    \nfor valid_dict in valid_dicts: \n    tile_to_coco(valid_dict, './coco-dataset/valid/')","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:26:46.520932Z","iopub.execute_input":"2023-06-25T13:26:46.521720Z","iopub.status.idle":"2023-06-25T13:27:15.342279Z","shell.execute_reply.started":"2023-06-25T13:26:46.521687Z","shell.execute_reply":"2023-06-25T13:27:15.341290Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create a yaml file as expected by YOLOv7 (and others)\nyaml_text = \"\"\"\n# HuBMAP - Hacking the Human Vasculature dataset \n# https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature\n\n\n# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]\ntrain: /kaggle/working/coco-dataset/train/\nval: /kaggle/working/coco-dataset/valid/\n\n# class names\nnames: \n  0: blood_vessel\n  1: glomerulus\n  2: unsure\n\"\"\"\n\nwith open('./coco-dataset/hubmap-coco.yaml', 'w') as text_file:\n    text_file.write(yaml_text)","metadata":{"tags":[],"execution":{"iopub.status.busy":"2023-06-25T13:27:15.343731Z","iopub.execute_input":"2023-06-25T13:27:15.344068Z","iopub.status.idle":"2023-06-25T13:27:15.350432Z","shell.execute_reply.started":"2023-06-25T13:27:15.344035Z","shell.execute_reply":"2023-06-25T13:27:15.349496Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# YOLOV7 训练\n\n参考链接：[https://www.kaggle.com/code/fnands/a-quick-yolov7-baseline/](https://www.kaggle.com/code/fnands/a-quick-yolov7-baseline/)","metadata":{}},{"cell_type":"code","source":"!git clone -b u7 --single-branch https://github.com/WongKinYiu/yolov7.git\n!pip install -r yolov7/seg/requirements.txt\n\n# !mkdir yolo_wheel\n# !pip wheel -r yolov7/seg/requirements.txt --wheel-dir=yolo_wheel yolov7\n\n!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-seg.pt .\n\n!\\rm -rf /kaggle/working/wandb /kaggle/working/runs","metadata":{"execution":{"iopub.status.busy":"2023-06-25T13:27:15.354539Z","iopub.execute_input":"2023-06-25T13:27:15.355568Z","iopub.status.idle":"2023-06-25T13:27:34.969826Z","shell.execute_reply.started":"2023-06-25T13:27:15.355536Z","shell.execute_reply":"2023-06-25T13:27:34.968522Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create a yaml file as expected by YOLOv7 (and others)\nyaml_text = \"\"\"\n# YOLOv5 🚀 by Ultralytics, GPL-3.0 license\n# Hyperparameters for high-augmentation COCO training from scratch\n# python train.py --batch 32 --cfg yolov5m6.yaml --weights '' --data coco.yaml --img 1280 --epochs 300\n# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials\n\nlr0: 0.0005  # initial learning rate (SGD=1E-2, Adam=1E-3)\nlrf: 0.1  # final OneCycleLR learning rate (lr0 * lrf)\nmomentum: 0.937  # SGD momentum/Adam beta1\nweight_decay: 0.0005  # optimizer weight decay 5e-4\nwarmup_epochs: 3.0  # warmup epochs (fractions ok)\nwarmup_momentum: 0.8  # warmup initial momentum\nwarmup_bias_lr: 0.1  # warmup initial bias lr\nbox: 0.05  # box loss gain\ncls: 0.3  # cls loss gain\ncls_pw: 1.0  # cls BCELoss positive_weight\nobj: 0.7  # obj loss gain (scale with pixels)\nobj_pw: 1.0  # obj BCELoss positive_weight\niou_t: 0.20  # IoU training threshold\nanchor_t: 4.0  # anchor-multiple threshold\n# anchors: 3  # anchors per output layer (0 to ignore)\nfl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)\nhsv_h: 0.015  # image HSV-Hue augmentation (fraction)\nhsv_s: 0.7  # image HSV-Saturation augmentation (fraction)\nhsv_v: 0.4  # image HSV-Value augmentation (fraction)\ndegrees: 0.0  # image rotation (+/- deg)\ntranslate: 0.1  # image translation (+/- fraction)\nscale: 0.9  # image scale (+/- gain)\nshear: 0.0  # image shear (+/- deg)\nperspective: 0.0  # image perspective (+/- fraction), range 0-0.001\nflipud: 0.0  # image flip up-down (probability)\nfliplr: 0.5  # image flip left-right (probability)\nmosaic: 1.0  # image mosaic (probability)\nmixup: 0.1  # image mixup (probability)\ncopy_paste: 0.1  # segment copy-paste (probability)\n\"\"\"\nwith open('/kaggle/working/hyp.yaml', 'w') as text_file:\n    text_file.write(yaml_text)","metadata":{"execution":{"iopub.status.busy":"2023-06-25T13:27:34.972076Z","iopub.execute_input":"2023-06-25T13:27:34.972503Z","iopub.status.idle":"2023-06-25T13:27:34.979905Z","shell.execute_reply.started":"2023-06-25T13:27:34.972461Z","shell.execute_reply":"2023-06-25T13:27:34.978866Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from yolov7.seg.segment import train\n\ntrain.run(data='/kaggle/working/coco-dataset/hubmap-coco.yaml',\n          imgsz=512, \n          batch=16,\n          weights='yolov7-seg.pt',\n          cfg='yolov7/seg/models/segment/yolov7-seg.yaml',\n          epochs=45,\n          name='yolov7-fine-tune',\n          project='yolov7-fine-tune',\n          hyp='/kaggle/working/hyp.yaml',\n          optimizer='Adam'\n          )","metadata":{"execution":{"iopub.status.busy":"2023-06-25T13:27:34.981335Z","iopub.execute_input":"2023-06-25T13:27:34.981944Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!\\rm coco-dataset -rf","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}