diff --git a/.gitignore b/.gitignore index 6121cab..f9bdb82 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /runs/ .vim/ .ipynb_checkpoints +/models/ diff --git a/CIFAR-10.ipynb b/CIFAR-10.ipynb index c1e7125..407fed7 100644 --- a/CIFAR-10.ipynb +++ b/CIFAR-10.ipynb @@ -36,13 +36,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "import torch\n", "import torchvision\n", - "from torchvision import datasets, transforms" + "from torchvision import datasets, transforms\n", + "from time import time" ] }, { @@ -211,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 80, "metadata": {}, "outputs": [], "source": [ @@ -253,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -275,49 +276,311 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "def train(net, use_gpu=False):\n", + " if use_gpu:\n", + " net = net.cuda()\n", + "\n", + " start = time()\n", + " for epoch in range(2):\n", + " running_loss = 0.0\n", + " for i, data in enumerate(trainloader, 0):\n", + " # 取得数据\n", + " inputs, labels = data\n", + " if use_gpu:\n", + " inputs = inputs.cuda()\n", + " labels = labels.cuda()\n", + " # 清空参数的梯度\n", + " optimizer.zero_grad()\n", + " # 前向传递 + 反向传递 + 优化\n", + " outputs = net(inputs)\n", + " if use_gpu:\n", + " outputs = outputs.cuda()\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " # 输出统计数据\n", + " running_loss += loss.item()\n", + " if i % 2000 == 1999: # 每两千个 min-batch 输出 一次\n", + " print('[%d, %d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000))\n", + " running_loss = 0.0\n", + " end = time()\n", + " print(f'Finished Training gpu: {use_gpu} elapsed: {end - start}')" + ] + }, + { + "cell_type": "code", + "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[%d, %d] loss: %.3f (1, 2000, 2.2382535316944123)\n", - "[%d, %d] loss: %.3f (1, 4000, 1.8497418144643307)\n", - "[%d, %d] loss: %.3f (1, 6000, 1.6522739474773407)\n", - "[%d, %d] loss: %.3f (1, 8000, 1.5884874777793885)\n", - "[%d, %d] loss: %.3f (1, 10000, 1.4998263758718968)\n", - "[%d, %d] loss: %.3f (1, 12000, 1.4663247963935138)\n", - "[%d, %d] loss: %.3f (2, 2000, 1.3832163302749396)\n", - "[%d, %d] loss: %.3f (2, 4000, 1.3675593894198537)\n", - "[%d, %d] loss: %.3f (2, 6000, 1.343863714851439)\n", - "[%d, %d] loss: %.3f (2, 8000, 1.3134881352633239)\n", - "[%d, %d] loss: %.3f (2, 10000, 1.3093935765009372)\n", - "[%d, %d] loss: %.3f (2, 12000, 1.2925918441154063)\n", - "Finished Training\n" + "[1, 2000] loss: 2.185\n", + "[1, 4000] loss: 1.899\n", + "[1, 6000] loss: 1.716\n", + "[1, 8000] loss: 1.603\n", + "[1, 10000] loss: 1.552\n", + "[1, 12000] loss: 1.478\n", + "[2, 2000] loss: 1.414\n", + "[2, 4000] loss: 1.404\n", + "[2, 6000] loss: 1.367\n", + "[2, 8000] loss: 1.363\n", + "[2, 10000] loss: 1.317\n", + "[2, 12000] loss: 1.321\n", + "Finished Training gpu: True elapsed: 119.58787202835083\n" ] } ], "source": [ - "for epoch in range(2):\n", - " running_loss = 0.0\n", - " for i, data in enumerate(trainloader, 0):\n", - " # 取得数据\n", - " inputs, labels = data\n", - " # 清空参数的梯度\n", - " optimizer.zero_grad()\n", - " # 前向传递 + 反向传递 + 优化\n", - " outputs = net(inputs)\n", - " loss = criterion(outputs, labels)\n", - " loss.backward()\n", - " optimizer.step()\n", - " # 输出统计数据\n", - " running_loss += loss.item()\n", - " if i % 2000 == 1999: # 每两千个 min-batch 输出 一次\n", - " print('[%d, %d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000))\n", - " running_loss = 0.0\n", - " \n", - "print('Finished Training')" + "train(net, True) # train with gpu" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "快速保存一下训练好的模型" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "MODEL_PATH = './models/cifar_10_net.pth'\n", + "torch.save(net.state_dict(), MODEL_PATH)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. 测试网络\n", + "\n", + "现在,我们已经使用训练数据集对网络进行了两个周期的训练。是时候检验一下成果了。\n", + "\n", + "通过将测试数据集放进网络进行预测,再将预测结果与真实值进行对比,就可以衡量模型的效果。\n", + "\n", + "好,第一步,我们先看下测试集里面的图片长什么样子。" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ground truth: ship ship frog dog\n" + ] + } + ], + "source": [ + "images, labels = next(iter(testloader))\n", + "\n", + "imshow(torchvision.utils.make_grid(images))\n", + "print('Ground truth:', ' '.join('%5s' % classes[labels[j]] for j in range(4)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "接下来,把之前保存的模型加载进来(这里不是必须,主要是演示一下实际情况下应该怎么保存和加载模型)" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "net_cpu = Net()\n", + "net_cpu.load_state_dict(torch.load(MODEL_PATH))" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 2.7197, 4.4017, -2.5704, -2.7393, -2.8257, -3.1298, -3.3686, -3.0573,\n", + " 5.1788, 1.8149],\n", + " [ 0.1971, -2.3470, 1.6536, 0.7511, 0.4000, 0.1193, 0.6587, -1.4892,\n", + " 0.6543, -1.6453],\n", + " [-0.9781, -0.9720, -0.0265, 0.8705, 0.5040, 0.6212, 1.5730, 0.1373,\n", + " -0.9968, 0.0374],\n", + " [-1.0276, -0.6625, 0.1193, 0.9498, 1.0150, 0.7573, 1.2253, 1.2796,\n", + " -2.8082, 0.3094]], grad_fn=)" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outputs = net_cpu(images)\n", + "outputs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "模型的输出是一个二维数据 ,第一维代表着不同的图像,第二维是图像对于10个不同类别的应激能量,能量越高,代表着神经网络认为这个图片\n", + "属于对应类别的可能性越高。 因此,我们只要取得最高能量的元素的索引就知道它属于哪个类别了。" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predicted: ship bird frog horse\n" + ] + }, + { + "data": { + "text/plain": [ + "(tensor([8, 2, 6, 7]), 0.0014629364013671875)" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "start = time()\n", + "with torch.no_grad():\n", + " _, predicted = torch.max(outputs, dim=1)\n", + " print('Predicted: ', ' '.join('%5s' % classes[predicted[j]]\n", + " for j in range(4)))\n", + "end = time()\n", + "predicted, end - start" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "命中率貌似有一半的样子,用整测试集验证一下:" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy of the network on the 10000 test images: 55 %\n" + ] + } + ], + "source": [ + "correct = 0\n", + "total = 0\n", + "with torch.no_grad():\n", + " for data in testloader:\n", + " images, labels = data\n", + " outputs = net_cpu(images)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " total += labels.size(0)\n", + " correct += (predicted == labels).sum().item()\n", + "print('Accuracy of the network on the 10000 test images: %d %%' % (\n", + " 100 * correct / total))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "瞎猜的命中率是10%,而网络的预测结果显然好得多, 看起来网络确实学习到了一些东西。\n", + "我们来看看模型对于不同类别的表现是怎么样子。" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy of plane : 71 %\n", + "Accuracy of car : 70 %\n", + "Accuracy of bird : 38 %\n", + "Accuracy of cat : 27 %\n", + "Accuracy of deer : 49 %\n", + "Accuracy of dog : 36 %\n", + "Accuracy of frog : 64 %\n", + "Accuracy of horse : 70 %\n", + "Accuracy of ship : 64 %\n", + "Accuracy of truck : 58 %\n" + ] + } + ], + "source": [ + "class_correct = list(0. for i in range(10))\n", + "class_total = list(0. for i in range(10))\n", + "with torch.no_grad():\n", + " for data in testloader:\n", + " images, labels = data\n", + " outputs = net_cpu(images)\n", + " _, predicted = torch.max(outputs, 1)\n", + " c = (predicted == labels).squeeze()\n", + " for i in range(4):\n", + " label = labels[i]\n", + " class_correct[label] += c[i].item()\n", + " class_total[label] += 1\n", + "\n", + "\n", + "for i in range(10):\n", + " print('Accuracy of %5s : %2d %%' % (\n", + " classes[i], 100 * class_correct[i] / class_total[i]))" ] } ], diff --git a/TorchObjectDetection.ipynb b/TorchObjectDetection.ipynb new file mode 100644 index 0000000..c3ffe1c --- /dev/null +++ b/TorchObjectDetection.ipynb @@ -0,0 +1,52 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "本教程将会在预训练模型 [Mask R_CNN](https://arxiv.org/abs/1703.06870) 上针对 [Penn-Fudan Database for Pedestrian Detection and Segmentation](https://www.cis.upenn.edu/~jshi/ped_html/)数据进行调优。这个数据集有170张图片,345个行人,通过本教程可学习到如何使用 torchvision 的新特性来训练针对特定数据集的分割模型。\n", + "\n", + "\n", + "# 定义数据集\n", + "\n", + "按照训练物体检测,分割和人体关键点模型的参考脚本,可以很方便地支持添加新的自定义数据集。新的数据集必须继承 `torch.utils.data.Dataset` 类,同时实现 `__len__` 和 `__getitem__` 方法\n", + "\n", + "唯一需要注意的话,我们要坟 `__getitem__` 返回的格式如下:\n", + "\n", + "* image: 一个 `PILImage` 图像对象,其尺寸为 `(H,W)`\n", + "* target: 一个 `dict` 对象,含有以下的键:\n", + " * `boxes[FloatTensor[N, 4)`: 含有 `N` 个 bounding box 的数组,其元素为4个,格式为`[x0, y0, x1, y1]`\n", + " * `labels (Int64Tensor[N])`: 每个 bounding box 的标签。 `0` 表示背景\n", + " * `image_id (Int64Tensor[1])`: 图像id,必须在整个数据集中唯一。\n", + " * `area (Tensor[N])`: bounding box 的面积。用以 Coco metric 评估,分离大小不同的boxes\n", + " * `iscrowd (UintTensor[N])': 该值为True时,将不会被用以评估\n", + " * 可选 `masks (UInt8Tensor[N, H, W])`: 每个物体的分离蒙板\n", + " * 可选 `keypoints (FloatTensor[N, K, 3])`: 对于 `N` 个物体,含有 `K` 个关键点。关键点的格式为`[x, y, visibility]`。`visibility=0` 表示关键点不可见。\n", + "\n", + "\n", + "data source: https://www.cis.upenn.edu/~jshi/ped_html/PennFudanPed.zip" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}