{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "KogbS3grmdiJ" }, "source": [ "# 遥感影像建筑物足迹分割\n", "\n", "**目标:**\n", "\n", "\n", "1. 使用深度神经网络(Deep Neural network, DNN)来解决语义分割问题\n", "2. 学习基本的DNN训练方法\n", "3. 熟悉目前主流的深度学习框架Pytorch\n", "\n", "本次作业我们提供了训练集、验证集(均带有标签)以及测试集(不带标签),你可以通过训练集和验证集寻找最好的模型,并在测试集上得到你的预测结果。\n", "\n", "最后你需要将预测结果提交到kaggle上(https://www.kaggle.com/competitions/dl-geo-2025fall-homework1), 系统会自动返回给交并比IoU。\n", "\n", "总的来说,本次作业的目标就是基于我们给定的代码,发挥你在课堂上学习到的知识,修改代码,从而得到尽可能低的**测试集**误差。\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 研究准备" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "gX9f7FIMrtHH" }, "source": [ "### **下载数据**\n", "\n", "在这里,我们从google drive上下载训练集,验证集和测试集,并将其解压到data路径" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "eK3Ov0RirG-j", "outputId": "aec8d73d-7629-404f-fd79-06e88ece2b2e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting imagecodecs-lite\n", " Downloading imagecodecs_lite-2022.9.26-py3-none-any.whl (1.4 kB)\n", "Collecting imagecodecs\n", " Downloading imagecodecs-2022.12.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m36.4/36.4 MB\u001b[0m \u001b[31m41.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from imagecodecs->imagecodecs-lite) (1.21.6)\n", "Installing collected packages: imagecodecs, imagecodecs-lite\n", "Successfully installed imagecodecs-2022.12.24 imagecodecs-lite-2022.9.26\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Requirement already satisfied: gdown in /usr/local/lib/python3.8/dist-packages (4.4.0)\n", "Collecting gdown\n", " Downloading gdown-4.6.0-py3-none-any.whl (14 kB)\n", "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.8/dist-packages (from gdown) (4.6.3)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from gdown) (4.64.1)\n", "Requirement already satisfied: requests[socks] in /usr/local/lib/python3.8/dist-packages (from gdown) (2.25.1)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.8/dist-packages (from gdown) (3.9.0)\n", "Requirement already satisfied: six in /usr/local/lib/python3.8/dist-packages (from gdown) (1.15.0)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests[socks]->gdown) (2.10)\n", "Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.8/dist-packages (from requests[socks]->gdown) (4.0.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests[socks]->gdown) (2022.12.7)\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests[socks]->gdown) (1.24.3)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.8/dist-packages (from requests[socks]->gdown) (1.7.1)\n", "Installing collected packages: gdown\n", " Attempting uninstall: gdown\n", " Found existing installation: gdown 4.4.0\n", " Uninstalling gdown-4.4.0:\n", " Successfully uninstalled gdown-4.4.0\n", "Successfully installed gdown-4.6.0\n", "/usr/local/lib/python3.8/dist-packages/gdown/cli.py:121: FutureWarning: Option `--id` was deprecated in version 4.3.1 and will be removed in 5.0. You don't need to pass it anymore to use a file ID.\n", " warnings.warn(\n", "Downloading...\n", "From: https://drive.google.com/uc?id=1SGxB0031J3pXsi0vq-8dvu5ONDA9Ea0a\n", "To: /content/data.zip\n", "100% 500M/500M [00:14<00:00, 35.7MB/s]\n", "Reading package lists... Done\n", "Building dependency tree \n", "Reading state information... Done\n", "p7zip-full is already the newest version (16.02+dfsg-6).\n", "The following package was automatically installed and is no longer required:\n", " libnvidia-common-460\n", "Use 'sudo apt autoremove' to remove it.\n", "0 upgraded, 0 newly installed, 0 to remove and 21 not upgraded.\n", "\n", "7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21\n", "p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs Intel(R) Xeon(R) CPU @ 2.00GHz (50653),ASM,AES-NI)\n", "\n", "Scanning the drive for archives:\n", " 0M Scan\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b1 file, 500037720 bytes (477 MiB)\n", "\n", "Extracting archive: data.zip\n", " 89% 4096 Open\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b--\n", "Path = data.zip\n", "Type = zip\n", "Physical Size = 500037720\n", "\n", " 0%\b\b\b\b \b\b\b\b 0% 20\b\b\b\b\b\b\b \b\b\b\b\b\b\b 1% 37\b\b\b\b\b\b\b \b\b\b\b\b\b\b 1% 55\b\b\b\b\b\b\b \b\b\b\b\b\b\b 2% 72\b\b\b\b\b\b\b \b\b\b\b\b\b\b 3% 89\b\b\b\b\b\b\b \b\b\b\b\b\b\b 3% 107\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 4% 126\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 5% 143\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 5% 160\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 6% 178\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 7% 196\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 7% 215\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 8% 231\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 9% 247\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 9% 265\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 10% 282\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 10% 299\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 11% 316\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 12% 333\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 12% 351\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 13% 369\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 14% 386\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 14% 404\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 15% 421\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 16% 438\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 16% 455\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 17% 472\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 18% 490\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 18% 509\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 19% 526\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 19% 544\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 20% 562\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 21% 582\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 21% 601\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 22% 618\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 23% 636\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 23% 653\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 24% 668\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 24% 686\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 25% 704\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 26% 722\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 26% 738\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 27% 755\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 28% 773\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 28% 791\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 29% 809\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 29% 828\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 30% 845\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 31% 862\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 31% 879\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 32% 897\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 33% 914\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 33% 931\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 34% 949\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 35% 967\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 35% 985\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b 36% 1004\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 37% 1023\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 37% 1041\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 38% 1059\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 39% 1077\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 39% 1094\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 40% 1109\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 41% 1127\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 41% 1144\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 42% 1162\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 42% 1179\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 43% 1197\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 44% 1214\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 44% 1231\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 45% 1248\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 46% 1267\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 46% 1284\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 47% 1302\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 48% 1322\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 48% 1338\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 49% 1354\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 50% 1370\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 50% 1387\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 51% 1404\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 51% 1422\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 52% 1439\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 53% 1456\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 53% 1474\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 54% 1491\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 55% 1508\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 55% 1526\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 56% 1543\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 57% 1560\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 57% 1578\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 58% 1596\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 58% 1613\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 59% 1630 - image/train/23578990_15_3_4.tiff\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 60% 1649\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 60% 1669\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 61% 1687\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 62% 1704\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 62% 1724\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 63% 1742\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 64% 1761\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 64% 1780\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 65% 1801\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 65% 1818\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 66% 1835\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 67% 1854\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 67% 1872\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 68% 1890\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 69% 1908\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 69% 1926\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 70% 1945 - image/train/24029050_15_2_1.tiff\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 71% 1963\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 71% 1980\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 72% 1996\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 72% 2014\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 73% 2031\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 74% 2048\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 74% 2065\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 75% 2083\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 75% 2100\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 76% 2117\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 77% 2136\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 77% 2153 - image/train/24479005_15_2_1.tiff\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 78% 2173\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 79% 2191\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 79% 2208\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 80% 2226\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 81% 2244\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 81% 2262\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 82% 2279 - image/val/22978945_15_0_1.tiff\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 83% 2297\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 83% 2314\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 84% 2330\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 84% 2349\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 85% 2368\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 86% 2385\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 86% 2402\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 87% 2420\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 88% 2436\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 88% 2453\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 89% 2470\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 90% 2487\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 90% 2505\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 91% 2524\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 92% 2542\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 92% 2561\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 93% 2579\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 93% 2599\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 94% 2617\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 95% 2636\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 95% 2654\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 96% 2673\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 97% 2691\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 97% 2814\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b 98% 3261 - label/train/23278945_15_1_0.tif\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 98% 3602 - label/train/23728930_15_4_2.tif\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 99% 3917 - label/train/24328840_15_2_2.tif\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b 99% 4330 - label/val/23428945_15_3_2.tif\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bEverything is Ok\n", "\n", "Folders: 7\n", "Files: 4590\n", "Size: 519898232\n", "Compressed: 500037720\n" ] } ], "source": [ "!pip install imagecodecs-lite\n", "!pip install -U --no-cache-dir gdown --pre\n", "# 获取数据\n", "!gdown --id 1SGxB0031J3pXsi0vq-8dvu5ONDA9Ea0a --output \"data.zip\"\n", "# 解压\n", "root = \"data\"\n", "!sudo apt-get install p7zip-full\n", "!7z x data.zip -odata" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "25YeHA2cvAxQ" }, "source": [ "### **环境配置**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "nIAMhnebmbQY", "outputId": "95e8dd20-72a4-48f8-b422-5b3178a5739d" }, "outputs": [ { "data": { "text/plain": [ "device(type='cuda')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 如果你引入了新的库,可以从这里导入\n", "import torch # pytorch,目前主流的深度学习框架\n", "from torch.utils import data # 从torch.utils导入data模块,用来构建pytorch中的数据结构--->dataloader\n", "from torch import nn # 从torch导入nn模块,用来提供基本的神经网络接口,如全连接层nn.Linear()\n", "import numpy as np # 导入numpy,并将其重命名为np,numpy是一个高效的用来处理矩阵的库\n", "from tqdm import tqdm # tqdm是一个可视化代码进程的模块\n", "import skimage.io # skimage.io 可以用来读取图像\n", "import cv2 # 用来处理图像的库\n", "import os # os库用来处理磁盘读写过程\n", "import csv # 读写csv文件的库\n", "import torchvision.transforms.functional as TF # 用于进行图像变换的库\n", "import torch.nn.functional as F\n", "import matplotlib.pyplot as plt\n", "\n", "# 为了处理大批量数据,在目前主流的深度学习框架下,数据都是以矩阵的形式表示的\n", "# 而对于CPU来讲,其对于矩阵数据处理效率欠佳,而GPU(显卡)则擅长处理矩阵,因此深度学习模型都会部署到GPU上\n", "# 这段代码的意思是,判断目前的设备中是否有安装CUDA(GPU加速模块)。\n", "# 如果有的话,我们就让模型部署到GPU上,如果没有,我们继续用CPU(速度会慢一点)\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\") \n", "device" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "gcAwNdiPm1IT" }, "source": [ "### **数据说明**\n", "\n", "本次作业我们的任务是从遥感影像中提取建筑物的足迹(footprint)。建筑足迹提供了沿外墙绘制的建筑轮廓,并对其基础的确切大小、形状和位置进行了描述。你也可以近似理解其为建筑物屋顶的分布。\n", "\n", "我们提供了三波段(RGB)遥感影像(分辨率为1米),以及其对应的建筑物足迹分布,如下所示\n", "\n", "我们可以发现,建筑物足迹分布图实际上是一个二值图,即背景的像素值为0(黑色),建筑物区域的像素值为255(红色)。本次作业我们的任务就是,训练一个模型,这个模型的输入是影像,输出是对应的足迹分布,我们要尽可能地让这个模型的预测结果准确。\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 222 }, "id": "k-I_I8o0qeD7", "outputId": "0e596301-5369-4ee8-d9f1-29225e7d39cd" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 可视化我们用于训练的遥感影像及其对应的建筑物标签\n", "image = skimage.io.imread(\"/content/data/image/train/22678915_15_1_4.tiff\")\n", "label = skimage.io.imread(\"/content/data/label/train/22678915_15_1_4.tif\")\n", "fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2)\n", "ax1.imshow(image)\n", "ax2.imshow(label)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 进行实验" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "o3tM14MFvHxR" }, "source": [ "### **构建数据**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "ICVrVPvLu6bc" }, "outputs": [], "source": [ "def makeDataset(mode):\n", "\n", " all_tokens = []\n", "\n", " assert mode in ['train', 'val', 'test']\n", " image_path = os.path.join(root, \"image\", mode)\n", "\n", " if mode == \"test\":\n", " \n", " img_tokens = os.listdir(image_path)\n", " for img_token in img_tokens:\n", " all_tokens.append(os.path.join(image_path, img_token))\n", " return all_tokens\n", " else:\n", " label_path = os.path.join(root, \"label\", mode)\n", "\n", " img_tokens = os.listdir(image_path)\n", " img_tokens.sort()\n", "\n", " label_tokens = os.listdir(label_path)\n", " label_tokens.sort()\n", "\n", " assert len(img_tokens) == len(label_tokens), \"The number of images is inconsistent with the number of labels\"\n", "\n", " for img_token, label_token in zip(img_tokens, label_tokens):\n", " token = (os.path.join(image_path, img_token), os.path.join(label_path, label_token))\n", " all_tokens.append(token)\n", "\n", " print(f' 在{mode}阶段,我们有{len(all_tokens)}个样本')\n", "\n", " return all_tokens\n", "\n", "\n", "class BuildingDataset(data.Dataset):\n", " def __init__(self, mode):\n", "\n", " self.mode = mode\n", " self.data_tokens = makeDataset(mode)\n", " assert len(self.data_tokens), \"the data is empty!Please check the root\"\n", "\n", " def __getitem__(self, index):\n", " token = self.data_tokens[index]\n", " if self.mode == \"test\":\n", " image_path = token\n", " image = skimage.io.imread(image_path)\n", " image = TF.to_pil_image(image)\n", " image_name = os.path.splitext(os.path.basename(image_path))[0]\n", " image = TF.to_tensor(image)\n", " image = TF.normalize(image, mean=[0.33, 0.34, 0.30], std=[0.17, 0.165, 0.17])\n", " return image, image_name\n", "\n", " else:\n", " image_path, label_path = token\n", " image, label = skimage.io.imread(image_path), skimage.io.imread(label_path)\n", " image = TF.to_pil_image(image)\n", " label = TF.to_pil_image(label)\n", " image_name = os.path.splitext(os.path.basename(image_path))[0]\n", " if self.mode in [\"val\"]:\n", " image = TF.to_tensor(image)\n", " label = TF.to_tensor(label)\n", " image = TF.normalize(image, mean=[0.33, 0.34, 0.30], std=[0.17, 0.165, 0.17]) # 图像标准化\n", " else:\n", " \"\"\"\n", " TODO:一般来讲,增加数据多样性会提高模型的泛化性能,这一操作叫做即数据增强(data augumentation)。常用的图像增强的方法有:color jittering, roate, vflip和hflip等。\n", " 请查阅如何用TF库实现数据增强,并在此处进行修改,来增加数据的多样性\n", " \"\"\"\n", " image = TF.to_tensor(image)\n", " label = TF.to_tensor(label)\n", " image = TF.normalize(image, mean=[0.33, 0.34, 0.30], std=[0.17, 0.165, 0.17]) \n", " label = label[0, :, :]\n", " label = torch.unsqueeze(label, 0)\n", " return image, label\n", "\n", " def __len__(self):\n", " return len(self.data_tokens)\n", " # 该函数可以用来提取建筑物的轮廓\n", " # 将轮廓信息,做为辅助的监督信息会提升模型对建筑物预测的精度,一种简单的设计是这样↓,即我们让模型有两个预测分支,一个是建筑物足迹掩膜(我们所需要的),另一个是建筑物边缘掩膜,并对这两个结果同时计算损失并反向传播\n", " # -----> building prediction <-> building ground truth\n", " # image->model->\n", " # -----> boundary prediction <-> boundary ground truth\n", " @staticmethod\n", " def get_boundary(mask, thicky=8): # thicky即轮廓的\"厚度\"\n", " tmp = mask.data.numpy().astype('uint8')\n", " tmp = tmp[0] # 从 [1,w,h] to [w,h]\n", " contour, _, = cv2.findContours(tmp, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n", " boundary = np.zeros_like(tmp)\n", " boundary = cv2.drawContours(boundary, contour, -1, 1, thicky)\n", " boundary = boundary.astype(np.float)\n", " boundary = TF.to_tensor(boundary)\n", " return boundary" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "uLpSczzDv7Tp" }, "source": [ "### **搭建模型**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "DgaQse7LuuzT" }, "outputs": [], "source": [ "class MyCNN(nn.Module):\n", " \"\"\"\n", " 我们使用的模型是一个我加以改进的FCN模型, FCN(Fully Convolutional Networks)是利用卷积神经网络实现语义分割的开山之作。\n", " 在使用这个模型的时候,请思考:\n", " (1)什么是语义分割?它的特点是什么?\n", " (2)FCN为什么这样设计?这样设计的目的是什么?\n", " \"\"\"\n", " def __init__(self):\n", " super().__init__()\n", " # 第一层卷积\n", " self.layer1 = nn.Sequential(\n", " nn.Conv2d(3, 48, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.Conv2d(48, 48, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.MaxPool2d(2, stride=2, ceil_mode=True) # Downsampling 1/2\n", " )\n", "\n", " # 第二层卷积\n", " self.layer2 = nn.Sequential(\n", " nn.Conv2d(48, 128, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.Conv2d(128, 128, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.MaxPool2d(2, stride=2, ceil_mode=True) # Downsampling 1/4\n", " )\n", "\n", " # 第三层卷积\n", " self.layer3 = nn.Sequential(\n", " nn.Conv2d(128, 192, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.Conv2d(192, 192, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.MaxPool2d(2, stride=2, ceil_mode=True) # Downsampling 1/8\n", " )\n", "\n", " # 第四层卷积\n", " self.layer4 = nn.Sequential(\n", " nn.Conv2d(192, 256, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.Conv2d(256, 256, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.MaxPool2d(2, stride=2, ceil_mode=True) # Downsampling 1/16\n", " )\n", "\n", " # 第五层卷积\n", " self.layer5 = nn.Sequential(\n", " nn.Conv2d(256, 512, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.Conv2d(512, 512, (3, 3), padding=1),\n", " nn.ReLU(inplace=True),\n", " nn.MaxPool2d(2, stride=2, ceil_mode=True) # Downsampling 1/32\n", " )\n", "\n", " self.score_1 = nn.Conv2d(512, 128, (1, 1))\n", " self.score_2 = nn.Conv2d(256, 128, (1, 1))\n", " self.score_3 = nn.Conv2d(192, 128, (1, 1))\n", " self.score_4 = nn.Conv2d(128, 128, (1, 1))\n", "\n", " self.final_layer = nn.Conv2d(128, 1, (1, 1))\n", " def forward(self,x):\n", " _,_,h,w = x.shape\n", " # 输入的图像为x,通过下面的五个layer的操作,我们发现特征的尺寸在逐渐变小,为什么我们要这么做,这样做的目的是什么?\n", " # (提示:从物体尺度和模型计算量角度思考)\n", " x1 = self.layer1(x) # (B,C,H/2,W/2)\n", " x2 = self.layer2(x1) # (B,C,H/4,W/4)\n", " x3 = self.layer3(x2) # (B,C,H/8,W/8)\n", " x4 = self.layer4(x3) # (B,C,H/16,W/16)\n", " x5 = self.layer5(x4) # (B,C,H/32,W/32)\n", "\n", " # 上述操作让我们的特征图尺寸逐渐变小,我们为了得到原始分辨率的预测,在这里我们逐步恢复图像分辨率\n", " x5 = self.score_1(x5) # 在这里,我们在恢复特征图分辨率之前,先用一个卷积进行特征提取,目的有1)保证不同尺度特征图通道数相同2)将不同尺度特征图映射到相同的特征空间,使得相加有意义。\n", " # 代码默认的方法是双线性插值上采样,你有更好的办法吗,如反卷积等?这些方法会提高模型的精度吗?\n", " x5 = F.upsample(input=x5, size=(int(h/16), int(w/16)), mode='bilinear')\n", " x4 = self.score_2(x4)\n", " x4 += x5\n", "\n", " x4 = F.upsample(input=x4, size=(int(h/8), int(w/8)), mode='bilinear')\n", " x3 = self.score_3(x3)\n", " x3 +=x4\n", " \n", " x3 = F.upsample(input=x3, size=(int(h/4), int(w/4)), mode='bilinear')\n", " x2 = self.score_4(x2)\n", " x2 += x3\n", " \n", " final_score = self.final_layer(x2)\n", " final = F.upsample(input=final_score, size=(h, w), mode='bilinear')\n", "\n", " return final\n", " \n", "# TODO: 事实上,语义分割领域目前有非常多的网络可供选择,你会使用它们,并将它们应用到建筑物足迹提取上来吗?\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "wE6yCDl1v_mr" }, "source": [ "### **评价方式**\n", "\n", "在这里,我们直接提供一个评价预测结果的类,里面包含很多评价指标。这部分你不需要修改,因为这些评价指标足够本次作业的使用了" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Vg_sFUaDwu_a" }, "outputs": [], "source": [ "class Evaluator(object):\n", " \"\"\"\n", " Code is modified based on https://github.com/jfzhang95/pytorch-deeplab-xception/blob/master/utils/metrics.py#L33\n", " \"\"\"\n", "\n", " def __init__(self, num_class):\n", " self.num_class = num_class\n", " self.confusion_matrix = np.zeros((self.num_class,) * 2)\n", "\n", " self.TP = 0\n", " self.FN = 0\n", " self.FP = 0\n", " self.TN = 0\n", "\n", " def Pixel_Accuracy(self):\n", " Acc = np.diag(self.confusion_matrix).sum() / self.confusion_matrix.sum() # (TP+TN)/(ALL)\n", " return Acc\n", "\n", " def Pixel_Accuracy_Class(self):\n", " Acc = np.diag(self.confusion_matrix) / self.confusion_matrix.sum(axis=1)\n", " Acc = np.nanmean(Acc)\n", " return Acc\n", "\n", " def Mean_Intersection_over_Union(self):\n", " MIoU = np.diag(self.confusion_matrix) / (\n", " np.sum(self.confusion_matrix, axis=1) + np.sum(self.confusion_matrix, axis=0) -\n", " np.diag(self.confusion_matrix))\n", "\n", " MIoU = np.nanmean(MIoU)\n", "\n", " return MIoU\n", "\n", " def Frequency_Weighted_Intersection_over_Union(self):\n", " freq = np.sum(self.confusion_matrix, axis=1) / np.sum(self.confusion_matrix)\n", " iu = np.diag(self.confusion_matrix) / (\n", " np.sum(self.confusion_matrix, axis=1) + np.sum(self.confusion_matrix, axis=0) -\n", " np.diag(self.confusion_matrix))\n", "\n", " FWIoU = (freq[freq > 0] * iu[freq > 0]).sum()\n", " return FWIoU\n", "\n", " def _generate_matrix(self, gt_image, pre_image):\n", " mask = (gt_image >= 0) & (gt_image < self.num_class)\n", " label = self.num_class * gt_image[mask].astype('int') + pre_image[mask]\n", " count = np.bincount(label, minlength=self.num_class ** 2)\n", " confusion_matrix = count.reshape(self.num_class, self.num_class)\n", " return confusion_matrix\n", "\n", " def add_batch(self, gt_image, pre_image):\n", " assert gt_image.shape == pre_image.shape, f\"gt shape is {gt_image.shape}, while pre shape is {pre_image.shape}\"\n", "\n", " # gt_image=gt_image.astype(np.int8)\n", " # pre_image = pre_image.astype(np.int8)\n", " self.confusion_matrix += self._generate_matrix(gt_image, pre_image)\n", " self.TP = self.confusion_matrix[1, 1]\n", " self.FN = self.confusion_matrix[1, 0]\n", " self.FP = self.confusion_matrix[0, 1]\n", " self.TN = self.confusion_matrix[0, 0]\n", "\n", " def F1(self):\n", " return (2 * self.TP) / (2 * self.TP + self.FP + self.FN)\n", "\n", " def Precision(self):\n", " return self.TP / (self.TP + self.FP)\n", "\n", " def Recall(self):\n", " return self.TP / (self.TP + self.FN)\n", "\n", " def OA(self):\n", " return (self.TP + self.TN) / (self.TP + self.FP + self.TN + self.FN)\n", "\n", " def IoU(self):\n", " \"\"\"只算前景(1)类的IoU\"\"\"\n", " return self.TP / (self.TP + self.FP + self.FN)\n", "\n", " def reset(self):\n", " self.confusion_matrix = np.zeros((self.num_class,) * 2)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "WFWjrC7ux4Ba" }, "source": [ "### **处理输出**\n", "\n", "在这里,我们定义一些函数用来处理我们模型的输出:\n", "\n", "\n", "\n", "* rle_encoding:将预测结果(二值掩膜)进行游程长度编码,从而压缩其大小,方便大家提交到Kaggle上\n", "* process_output和process_testOutput:用于处理模型的输出\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "mRMk9sFwu2VZ" }, "outputs": [], "source": [ "def rle_encoding(img):\n", " # 游程长度编码程序\n", " pixels = img.T.flatten()\n", " pixels = np.concatenate([[0], pixels, [0]])\n", " runs = np.where(pixels[1:] != pixels[:-1])[0] + 1\n", " runs[1::2] -= runs[::2]\n", " return ' '.join(str(x) for x in runs)\n", "# 模型的输出是建筑物概率值(0-1),我们需要二值化输出来得到最终的预测结果\n", "def process_output(model_out,threshold=0.5): \n", " model_out = torch.sigmoid(model_out) # 利用sigmoid 将预测结果转换为概率\n", " out_new = model_out.detach().cpu().numpy()\n", " out_new = np.where(out_new > threshold, 1, 0)\n", " return out_new\n", "\n", "def process_testOutput(model_out,image_name,threshold=0.5): \n", " model_out = torch.sigmoid(model_out) # 利用sigmoid 将预测结果转换为概率\n", " out_new = model_out.detach().cpu().numpy()\n", " out_new = np.where(out_new > threshold, 1, 0)\n", " out_new = out_new[0][0]\n", " out_new = out_new.astype(np.uint8)\n", " # 在这里,我们用两种方式处理预测结果\n", " # (1) 保存成二值图,方便我们肉眼观察\n", " skimage.io.imsave(f\"pre/{image_name[0]}.png\",out_new)\n", " # (2) 利用游程长度编码进行压缩,存储为csv格式,用于最终Kaggle平台上的提交\n", " pre_encoding = rle_encoding(out_new)\n", " return pre_encoding" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "51f5_MEAB9wL" }, "source": [ "### **训练、验证和测试**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "YUd5qUPZuxqC" }, "outputs": [], "source": [ "def train(train_dataset, val_dataset, config, model, evaluator):\n", " \"\"\"训练代码\"\"\"\n", " n_epochs = config['n_epochs'] # 训练次数\n", " optimizer = getattr(torch.optim, config['optimizer'])(model.parameters(), **config['optim_hparas']) # 优化器\n", " model.train() # 设置模型为训练模式(梯度可以回传)\n", " pbar = tqdm(total=n_epochs, desc=\"Train Mode\", unit=\"epoch\") \n", " loss = nn.BCEWithLogitsLoss() # 损失函数为二分类交叉熵\n", " loss_log = {\"train_loss\": [], \"val_loss\": []}\n", " iou_log = {\"train_iou\": [], \"val_iou\": []}\n", " f1_log = {\"train_f1\": [], \"val_f1\": []}\n", " oa_log = {\"train_oa\": [], \"val_oa\": []}\n", " best_accuracy = 0.0\n", " best_state_dict = None\n", " for epoch in range(n_epochs):\n", " pbar.update()\n", " epoch_loss = 0.0\n", " for i,(x, label) in enumerate(train_dataset):\n", " optimizer.zero_grad() # 将优化器里储存的梯度清零\n", " x, label = x.to(device).float(), label.to(device).float()\n", " pred = model(x)\n", " ce_loss = loss(pred, label) # 计算损失\n", " batch_loss = ce_loss.detach().cpu().item()\n", " ce_loss.backward() # 损失回传\n", " optimizer.step() # 梯度更新\n", " loss_log[\"train_loss\"].append(ce_loss.detach().cpu().item())\n", " epoch_loss += ce_loss.detach().cpu().item()\n", " pred_processed = process_output(pred)\n", " evaluator.add_batch(label.detach().cpu().numpy(), pred_processed)\n", " pbar.set_postfix(\n", " batch=f\"{i}/{len(train_dataset)}\",\n", " batch_loss=f\"{batch_loss:.4f}\",\n", " epoch=epoch+1\n", " )\n", " IoU = evaluator.IoU()\n", " OA = evaluator.OA()\n", " F1 = evaluator.F1()\n", " f1_log[\"train_f1\"].append(F1)\n", " oa_log[\"train_oa\"].append(OA)\n", " iou_log[\"train_iou\"].append(IoU)\n", " pbar.set_postfix(\n", " epoch_sum_loss=f\"{epoch_loss:.4f}\",\n", " epoch_IoU=f\"{IoU:.4f}\",\n", " epoch_OA=f\"{OA:.4f}\",\n", " epoch_F1=f\"{F1:.4f}\",\n", " epoch=epoch + 1\n", " )\n", " evaluator.reset()\n", " pbar.close()\n", " val_loss, val_IoU, val_OA, val_F1 = val(val_dataset, model, evaluator)\n", " loss_log[\"val_loss\"].append(val_loss)\n", " f1_log[\"val_f1\"].append(val_F1)\n", " oa_log[\"val_oa\"].append(val_OA)\n", " iou_log[\"val_iou\"].append(val_IoU)\n", " if val_IoU>best_accuracy:\n", " best_accuracy = val_IoU\n", " best_state_dict = model.state_dict()\n", " pbar = tqdm(total=n_epochs, desc=\"Train Mode\", unit=\"step\", initial=epoch + 1) # 重启 pbar\n", " if best_state_dict is not None:\n", " torch.save(best_state_dict, config[\"save_path\"] + \".ckpt\")\n", " pbar.write(f\"epoch {epoch + 1}, best model saved. (accuracy={best_accuracy:.4f})\")\n", " best_state_dict = None\n", " return loss_log, iou_log,oa_log,f1_log,best_accuracy\n", "\n", "def val(dataloader,model,evaluator):\n", " \"\"\"验证代码\"\"\"\n", " model.eval()\n", " pbar = tqdm(total=len(dataloader.dataset), ncols=0, desc=\"Valid Mode\", unit=\" uttr\")\n", " loss = nn.BCEWithLogitsLoss() # 损失函数为二分类交叉熵\n", " total_loss = 0.0\n", " for i, (x,label) in enumerate(dataloader):\n", " with torch.no_grad():\n", " x, label = x.to(device).float(), label.to(device).float()\n", " pred = model(x)\n", " pred_processed = process_output(pred)\n", " ce_loss = loss(pred,label)\n", " total_loss += ce_loss.detach().cpu().item()\n", " evaluator.add_batch(label.detach().cpu().numpy(), pred_processed)\n", " pbar.update(dataloader.batch_size)\n", " IoU = evaluator.IoU()\n", " OA = evaluator.OA()\n", " F1 = evaluator.F1()\n", " pbar.set_postfix(\n", " loss=f\"{total_loss :.4f}\",\n", " IoU=f\"{IoU :.4f}\",\n", " OA=f\"{OA :.4f}\",\n", " F1=f\"{F1 :.4f}\",\n", " )\n", " evaluator.reset()\n", " pbar.close()\n", " model.train()\n", "\n", " return total_loss / len(dataloader), IoU, OA, F1\n", "\n", "def test(dataloader,model):\n", " \"\"\"测试代码\"\"\"\n", " model.eval()\n", " pbar = tqdm(total=len(dataloader.dataset), ncols=0, desc=\"Valid Mode\", unit=\" uttr\")\n", " header = [\"ImageId\", \"EncodedPixels\"]\n", " with open(\"pred.csv\", \"w\", newline=\"\") as f:\n", " writer = csv.writer(f)\n", " writer.writerow(header)\n", " for i, (x,image_name) in enumerate(dataloader):\n", " with torch.no_grad():\n", " x = x.to(device).float()\n", " pred = model(x)\n", " pre_encoding = process_testOutput(pred,image_name)\n", " in_data = [image_name[0], pre_encoding]\n", " writer.writerow(in_data)\n", " pbar.update(1)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "BsVym88FCE_l" }, "source": [ "### 主程序" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fjc0cL4ZYGFt", "outputId": "166c8b9b-9c63-4f69-daac-dc038fd44257" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 在train阶段,我们有1350个样本\n", " 在val阶段,我们有540个样本\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\rTrain Mode: 0%| | 0/100 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt # 用来绘制曲线\n", "from matplotlib.pyplot import figure\n", "\n", "def plot_learning_curve(loss_record, title='',y_max=1):\n", " total_steps = len(loss_record[f'train_{title}'])\n", " x_1 = range(total_steps)\n", " x_2 = x_1[::len(loss_record[f'train_{title}']) // len(loss_record[f'val_{title}'])]\n", " figure(figsize=(6, 4))\n", " plt.plot(x_1, loss_record[f'train_{title}'], c='tab:red', label='train')\n", " plt.plot(x_2, loss_record[f'val_{title}'], c='tab:cyan', label='val')\n", " plt.ylim(0.0, y_max)\n", " plt.xlabel('Training steps')\n", " plt.ylabel('BCE loss')\n", " plt.title('Learning curve of {}'.format(title))\n", " plt.legend()\n", " plt.show()\n", "\n", "plot_learning_curve(result[0],\"loss\",1) # loss的变化曲线\n", "plot_learning_curve(result[1],\"iou\",1) # iou的变化曲线\n", "plot_learning_curve(result[2],\"oa\",1) # oa的变化曲线\n", "plot_learning_curve(result[3],\"f1\",1) # f1的变化曲线" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "ms_-zOo9ot8A" }, "source": [ "执行测试" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "drtwfuuXgQ7w", "outputId": "e2f35a99-34ec-4f97-bd4a-b08d31322f23" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\rValid Mode: 0% 0/810 [00:00