This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
justhomework/AIandML/e3_deep_learning/e3.3_alexnet_classification.ipynb

636 lines
1.2 MiB
Text
Raw Permalink Normal View History

2023-01-04 14:33:43 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 实验3-4 骨干网络基于AlexNet的图像分类\n",
"\n",
"实验目标:\n",
"* 深化对基于骨干网络的拓扑结构认识\n",
"* 了解图像分类应用\n",
"\n",
"实验内容:\n",
"\n",
"* 建立骨干网络\n",
"* 载入网络权重\n",
"* 给与网络输入,获取输出结果\n",
"* 解析结果含义\n",
"\n",
"参考: https://learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"import torch, torchvision"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. 创建网络,载入权重"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ir/Code/justhomework/AIandML/.venv/lib/python3.8/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n",
" warnings.warn(\n",
"/home/ir/Code/justhomework/AIandML/.venv/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=AlexNet_Weights.IMAGENET1K_V1`. You can also use `weights=AlexNet_Weights.DEFAULT` to get the most up-to-date weights.\n",
" warnings.warn(msg)\n"
]
}
],
"source": [
"# 载入AlexNet\n",
"alexnet = torchvision.models.alexnet(pretrained=True)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AlexNet(\n",
" (features): Sequential(\n",
" (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))\n",
" (1): ReLU(inplace=True)\n",
" (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n",
" (4): ReLU(inplace=True)\n",
" (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (7): ReLU(inplace=True)\n",
" (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (9): ReLU(inplace=True)\n",
" (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (11): ReLU(inplace=True)\n",
" (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" )\n",
" (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))\n",
" (classifier): Sequential(\n",
" (0): Dropout(p=0.5, inplace=False)\n",
" (1): Linear(in_features=9216, out_features=4096, bias=True)\n",
" (2): ReLU(inplace=True)\n",
" (3): Dropout(p=0.5, inplace=False)\n",
" (4): Linear(in_features=4096, out_features=4096, bias=True)\n",
" (5): ReLU(inplace=True)\n",
" (6): Linear(in_features=4096, out_features=1000, bias=True)\n",
" )\n",
")\n"
]
}
],
"source": [
"print(alexnet)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 请回答:\n",
"> 1. 第一次和第二次调用`torchvision.models.alexnet(pretrained=True)`有何区别?参数`pretrained=True`是何含义?\n",
"> 2. 解释`print(alexnet)`的输出信息。\n",
"> 3. 请参考文档试着载入AlexNet之外的其他网络。"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch.Size([1, 1000])\n"
]
}
],
"source": [
"# 用伪输入测试一下\n",
"x = torch.rand(1, 3, 224, 224)\n",
"y = alexnet(x)\n",
"print(y.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 请回答,\n",
"> 1. 以上代码中`x`的尺寸可否修改?\n",
"> 2. `y`的尺寸是什么,是何含义?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. 准备输入数据\n",
"\n",
"将图像转化为torch.tensor数据类型且尺寸为 [B, C, H, W],并且做若干随机变换。对后文的变换说明如下:\n",
"* Line [1]: 定义图像转换的类.\n",
"* Line [2]: 图像尺寸变换 to 256×256 pixels.\n",
"* Line [3]: 随机裁剪 224×224 pixels.\n",
"* Line [4]: 转化PIL为PyTorch的Tensor.\n",
"* Line [5-7]: 通过均值方差,转化为规范化数据."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"# 准备PIL图像转为Tensor的变换模块\n",
"from torchvision import transforms\n",
"transform = transforms.Compose([ #[1]\n",
" transforms.Resize(256), #[2]\n",
" transforms.CenterCrop(224), #[3]\n",
" transforms.ToTensor(), #[4]\n",
" transforms.Normalize( #[5]\n",
" mean=[0.485, 0.456, 0.406], #[6]\n",
" std=[0.229, 0.224, 0.225] #[7]\n",
" )\n",
"])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from PIL import Image # PIL 是python的标注模块用于图像读取\n",
"import cv2\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"img = Image.open(\"dog.jpg\") "
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(371, 474, 3)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(img)\n",
"im = np.array(img)\n",
"im.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转化数据类型,并且将其转为批量形式(batch_size=1)。\n",
"\n",
"需注意网络模型的输入总是成批次的若只有一个输入则使批次数量为1即可。"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch.Size([3, 224, 224]) tensor(-2.1179)\n",
"torch.Size([1, 3, 224, 224])\n"
]
}
],
"source": [
"img_t = transform(img)\n",
"print(img_t.shape, img_t.min())\n",
"batch_t = torch.unsqueeze(img_t, 0)\n",
"print(batch_t.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 请回答:\n",
"> 1. 观测变换前后图像`im`和`img_t`的尺寸是何变化?\n",
"> 2. `torch.unsqueeze`是何功能?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. 图像分类\n",
"\n",
"用模型进行分类之前,需将模型设置为`eval`模式。"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"AlexNet(\n",
" (features): Sequential(\n",
" (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))\n",
" (1): ReLU(inplace=True)\n",
" (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n",
" (4): ReLU(inplace=True)\n",
" (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (7): ReLU(inplace=True)\n",
" (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (9): ReLU(inplace=True)\n",
" (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (11): ReLU(inplace=True)\n",
" (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
" )\n",
" (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))\n",
" (classifier): Sequential(\n",
" (0): Dropout(p=0.5, inplace=False)\n",
" (1): Linear(in_features=9216, out_features=4096, bias=True)\n",
" (2): ReLU(inplace=True)\n",
" (3): Dropout(p=0.5, inplace=False)\n",
" (4): Linear(in_features=4096, out_features=4096, bias=True)\n",
" (5): ReLU(inplace=True)\n",
" (6): Linear(in_features=4096, out_features=1000, bias=True)\n",
" )\n",
")"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alexnet.eval()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"torch.Size([1, 1000])\n"
]
}
],
"source": [
"out = alexnet(batch_t)\n",
"print(out.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 请回答:\n",
"> 1. 请对以下分类功能的代码进行注释,以详细解释输出变量`out`到其类别标签的过程。"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tensor([258])\n"
]
}
],
"source": [
"_, index = torch.max(out, 1)\n",
"print(index)\n",
"percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 读取标签: int => str\n",
"\n",
"查看分类结果到底是什么"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"with open('imagenet1000_clsidx_to_labels.txt', 'r') as fp:\n",
" label = fp.read()\n",
" label = eval(label)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Samoyed, Samoyede\n",
"63.1154670715332\n"
]
}
],
"source": [
"print(label[int(index[0])])\n",
"print(percentage[index[0]].item())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"若是萨摩亚,分类正确"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. 更多示例\n",
"\n",
"使用更多图片进行分类尝试。"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd7d76a6ca0>"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img = Image.open(\"cat.jpg\")\n",
"plt.imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Egyptian cat\n",
"41.64906311035156\n"
]
}
],
"source": [
"img_t = transform(img)\n",
"batch_t = torch.unsqueeze(img_t, 0)\n",
"\n",
"out = alexnet(batch_t)\n",
"\n",
"_, index = torch.max(out, 1)\n",
"percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100\n",
"\n",
"print(label[int(index[0])])\n",
"print(percentage[index[0]].item())"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd7d76e8a60>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"img = Image.open(\"gold_fish.jpg\")\n",
"plt.imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"goldfish, Carassius auratus\n",
"99.99734497070312\n"
]
}
],
"source": [
"img_t = transform(img)\n",
"batch_t = torch.unsqueeze(img_t, 0)\n",
"\n",
"out = alexnet(batch_t)\n",
"\n",
"_, index = torch.max(out, 1)\n",
"percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100\n",
"\n",
"print(label[int(index[0])])\n",
"print(percentage[index[0]].item())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 请实验:\n",
"> 1. 自行收集图片,做分类测试,查看分类是否正确?"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd7d7654820>"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 请在此给出自行收集图片做分类测试的结果,并简要分析。\n",
"img = Image.open(\"bike.jpg\")\n",
"plt.imshow(img)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mountain bike, all-terrain bike, off-roader\n",
"54.07283401489258\n"
]
}
],
"source": [
"img_t = transform(img)\n",
"batch_t = torch.unsqueeze(img_t, 0)\n",
"\n",
"out = alexnet(batch_t)\n",
"\n",
"_, index = torch.max(out, 1)\n",
"percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100\n",
"\n",
"print(label[int(index[0])])\n",
"print(percentage[index[0]].item())"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 分析\n",
"\n",
"分类基本正确,但此车似乎是共享单车,并不是山地车/越野车。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.16"
},
"vscode": {
"interpreter": {
"hash": "0733c54d9044ea299f7b7f48049f3576c8ad4e6ff5a97e2c60d8a9e3bff0bc54"
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}