From 5453d18d93d71e52c28ffcb96a2da93da6ce60c9 Mon Sep 17 00:00:00 2001
From: Tommy in Tongji <36354458+TommyZihao@users.noreply.github.com>
Date: Wed, 7 Jun 2023 12:23:01 +0800
Subject: [PATCH] Add files via upload
---
...347\273\203\346\227\245\345\277\227.ipynb" | 1109 +++++++++++++++++
1 file changed, 1109 insertions(+)
create mode 100644 "2023/0524/\343\200\220D3\343\200\221\344\270\211\350\247\222\346\235\277\347\233\256\346\240\207\346\243\200\346\265\213-\345\217\257\350\247\206\345\214\226\350\256\255\347\273\203\346\227\245\345\277\227.ipynb"
diff --git "a/2023/0524/\343\200\220D3\343\200\221\344\270\211\350\247\222\346\235\277\347\233\256\346\240\207\346\243\200\346\265\213-\345\217\257\350\247\206\345\214\226\350\256\255\347\273\203\346\227\245\345\277\227.ipynb" "b/2023/0524/\343\200\220D3\343\200\221\344\270\211\350\247\222\346\235\277\347\233\256\346\240\207\346\243\200\346\265\213-\345\217\257\350\247\206\345\214\226\350\256\255\347\273\203\346\227\245\345\277\227.ipynb"
new file mode 100644
index 0000000..ec2b46f
--- /dev/null
+++ "b/2023/0524/\343\200\220D3\343\200\221\344\270\211\350\247\222\346\235\277\347\233\256\346\240\207\346\243\200\346\265\213-\345\217\257\350\247\206\345\214\226\350\256\255\347\273\203\346\227\245\345\277\227.ipynb"
@@ -0,0 +1,1109 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "0c136516-29cd-4fe7-bff2-0d43ed8f4937",
+ "metadata": {},
+ "source": [
+ "# 三角板目标检测-可视化训练日志\n",
+ "\n",
+ "训练模型时在`work_dirs`目录生成记录训练日志,解析其中损失函数、评估指标等信息,并可视化。\n",
+ "\n",
+ "同济子豪兄:https://space.bilibili.com/1900783\n",
+ "\n",
+ "20230607"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "095a94a6-89fb-4e7b-85b0-32244b3862c8",
+ "metadata": {},
+ "source": [
+ "## 进入mmdetection主目录"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "7f50ec01-d4f2-4009-88d9-a8fb96d605b8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "os.chdir('mmdetection')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3ed5b805-2e18-45b5-a062-8b7338eb7b89",
+ "metadata": {},
+ "source": [
+ "## 导入工具包"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "5245a2db-e693-4c0f-be85-33a93122bebd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "from tqdm import tqdm\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "398a5e05-9fca-445a-9c0d-3a1cad47187d",
+ "metadata": {},
+ "source": [
+ "## 载入训练日志"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "ebe51f25-dd78-4931-8708-e5a0c7898ae9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# 日志文件路径\n",
+ "log_path = 'work_dirs/faster_r_cnn_triangle/20230511_234855/vis_data/scalars.json'\n",
+ "\n",
+ "# log_path = 'work_dirs/rtmdet_tiny_triangle/20230511_234855/vis_data/scalars.json'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "639c2f24-7fb7-438e-851a-6b2d43ef6d9e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "with open(log_path, \"r\") as f:\n",
+ " json_list = f.readlines()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "465cd7c3-8a34-4e63-87db-d5d595cb379c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4310"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(json_list)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "204cd3ff-c1c8-4ef9-9797-5d6f63bd2b4f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'lr': 0.00018016032064128258,\n",
+ " 'data_time': 0.10732541084289551,\n",
+ " 'loss': 1.554654097557068,\n",
+ " 'loss_rpn_cls': 0.7000267386436463,\n",
+ " 'loss_rpn_bbox': 0.01174525087699294,\n",
+ " 'loss_cls': 0.8412070512771607,\n",
+ " 'acc': 91.30859375,\n",
+ " 'loss_bbox': 0.0016750632668845356,\n",
+ " 'time': 0.3841512203216553,\n",
+ " 'epoch': 1,\n",
+ " 'memory': 3177,\n",
+ " 'step': 5}"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "eval(json_list[4])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "10703123-7456-44a5-b41b-ad3256f9fdd1",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "100%|██████████| 4310/4310 [00:04<00:00, 985.66it/s] \n"
+ ]
+ }
+ ],
+ "source": [
+ "df_train = pd.DataFrame()\n",
+ "df_test = pd.DataFrame()\n",
+ "for each in tqdm(json_list):\n",
+ " if 'coco/bbox_mAP' in each:\n",
+ " df_test = df_test.append(eval(each), ignore_index=True)\n",
+ " else:\n",
+ " df_train = df_train.append(eval(each), ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "9ef57471-a041-4f74-8b2e-9cb6d112aeac",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " lr | \n",
+ " data_time | \n",
+ " loss | \n",
+ " loss_rpn_cls | \n",
+ " loss_rpn_bbox | \n",
+ " loss_cls | \n",
+ " acc | \n",
+ " loss_bbox | \n",
+ " time | \n",
+ " epoch | \n",
+ " memory | \n",
+ " step | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 0.00002 | \n",
+ " 0.496813 | \n",
+ " 1.745113 | \n",
+ " 0.697028 | \n",
+ " 0.010730 | \n",
+ " 1.036911 | \n",
+ " 4.296875 | \n",
+ " 0.000443 | \n",
+ " 0.868021 | \n",
+ " 1.0 | \n",
+ " 3018.0 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 0.00006 | \n",
+ " 0.255589 | \n",
+ " 1.723127 | \n",
+ " 0.701383 | \n",
+ " 0.013017 | \n",
+ " 1.008303 | \n",
+ " 4.296875 | \n",
+ " 0.000424 | \n",
+ " 0.570157 | \n",
+ " 1.0 | \n",
+ " 3283.0 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 0.00010 | \n",
+ " 0.173261 | \n",
+ " 1.672904 | \n",
+ " 0.699922 | \n",
+ " 0.012187 | \n",
+ " 0.960405 | \n",
+ " 5.957031 | \n",
+ " 0.000391 | \n",
+ " 0.470132 | \n",
+ " 1.0 | \n",
+ " 3283.0 | \n",
+ " 3.0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 0.00014 | \n",
+ " 0.132102 | \n",
+ " 1.623487 | \n",
+ " 0.700816 | \n",
+ " 0.013017 | \n",
+ " 0.909276 | \n",
+ " 33.398438 | \n",
+ " 0.000379 | \n",
+ " 0.419139 | \n",
+ " 1.0 | \n",
+ " 3283.0 | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 0.00018 | \n",
+ " 0.107325 | \n",
+ " 1.554654 | \n",
+ " 0.700027 | \n",
+ " 0.011745 | \n",
+ " 0.841207 | \n",
+ " 91.308594 | \n",
+ " 0.001675 | \n",
+ " 0.384151 | \n",
+ " 1.0 | \n",
+ " 3177.0 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 4295 | \n",
+ " 0.00020 | \n",
+ " 0.006442 | \n",
+ " 0.066295 | \n",
+ " 0.003812 | \n",
+ " 0.006429 | \n",
+ " 0.021561 | \n",
+ " 99.023438 | \n",
+ " 0.034493 | \n",
+ " 0.277901 | \n",
+ " 50.0 | \n",
+ " 3177.0 | \n",
+ " 4296.0 | \n",
+ "
\n",
+ " \n",
+ " 4296 | \n",
+ " 0.00020 | \n",
+ " 0.006451 | \n",
+ " 0.067425 | \n",
+ " 0.003638 | \n",
+ " 0.006775 | \n",
+ " 0.022045 | \n",
+ " 98.730469 | \n",
+ " 0.034965 | \n",
+ " 0.278211 | \n",
+ " 50.0 | \n",
+ " 3283.0 | \n",
+ " 4297.0 | \n",
+ "
\n",
+ " \n",
+ " 4297 | \n",
+ " 0.00020 | \n",
+ " 0.006454 | \n",
+ " 0.066920 | \n",
+ " 0.003666 | \n",
+ " 0.006712 | \n",
+ " 0.021902 | \n",
+ " 99.316406 | \n",
+ " 0.034640 | \n",
+ " 0.277896 | \n",
+ " 50.0 | \n",
+ " 3177.0 | \n",
+ " 4298.0 | \n",
+ "
\n",
+ " \n",
+ " 4298 | \n",
+ " 0.00020 | \n",
+ " 0.006462 | \n",
+ " 0.067548 | \n",
+ " 0.003785 | \n",
+ " 0.006692 | \n",
+ " 0.022116 | \n",
+ " 98.535156 | \n",
+ " 0.034956 | \n",
+ " 0.278304 | \n",
+ " 50.0 | \n",
+ " 3283.0 | \n",
+ " 4299.0 | \n",
+ "
\n",
+ " \n",
+ " 4299 | \n",
+ " 0.00020 | \n",
+ " 0.006466 | \n",
+ " 0.067208 | \n",
+ " 0.003769 | \n",
+ " 0.006664 | \n",
+ " 0.022056 | \n",
+ " 98.828125 | \n",
+ " 0.034719 | \n",
+ " 0.278978 | \n",
+ " 50.0 | \n",
+ " 4573.0 | \n",
+ " 4300.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4300 rows × 12 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " lr data_time loss loss_rpn_cls loss_rpn_bbox loss_cls \\\n",
+ "0 0.00002 0.496813 1.745113 0.697028 0.010730 1.036911 \n",
+ "1 0.00006 0.255589 1.723127 0.701383 0.013017 1.008303 \n",
+ "2 0.00010 0.173261 1.672904 0.699922 0.012187 0.960405 \n",
+ "3 0.00014 0.132102 1.623487 0.700816 0.013017 0.909276 \n",
+ "4 0.00018 0.107325 1.554654 0.700027 0.011745 0.841207 \n",
+ "... ... ... ... ... ... ... \n",
+ "4295 0.00020 0.006442 0.066295 0.003812 0.006429 0.021561 \n",
+ "4296 0.00020 0.006451 0.067425 0.003638 0.006775 0.022045 \n",
+ "4297 0.00020 0.006454 0.066920 0.003666 0.006712 0.021902 \n",
+ "4298 0.00020 0.006462 0.067548 0.003785 0.006692 0.022116 \n",
+ "4299 0.00020 0.006466 0.067208 0.003769 0.006664 0.022056 \n",
+ "\n",
+ " acc loss_bbox time epoch memory step \n",
+ "0 4.296875 0.000443 0.868021 1.0 3018.0 1.0 \n",
+ "1 4.296875 0.000424 0.570157 1.0 3283.0 2.0 \n",
+ "2 5.957031 0.000391 0.470132 1.0 3283.0 3.0 \n",
+ "3 33.398438 0.000379 0.419139 1.0 3283.0 4.0 \n",
+ "4 91.308594 0.001675 0.384151 1.0 3177.0 5.0 \n",
+ "... ... ... ... ... ... ... \n",
+ "4295 99.023438 0.034493 0.277901 50.0 3177.0 4296.0 \n",
+ "4296 98.730469 0.034965 0.278211 50.0 3283.0 4297.0 \n",
+ "4297 99.316406 0.034640 0.277896 50.0 3177.0 4298.0 \n",
+ "4298 98.535156 0.034956 0.278304 50.0 3283.0 4299.0 \n",
+ "4299 98.828125 0.034719 0.278978 50.0 4573.0 4300.0 \n",
+ "\n",
+ "[4300 rows x 12 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "2faf2b47-4a9d-4e89-9e32-eae88c423a1a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " coco/bbox_mAP | \n",
+ " coco/bbox_mAP_50 | \n",
+ " coco/bbox_mAP_75 | \n",
+ " coco/bbox_mAP_s | \n",
+ " coco/bbox_mAP_m | \n",
+ " coco/bbox_mAP_l | \n",
+ " pascal_voc/mAP | \n",
+ " pascal_voc/AP50 | \n",
+ " data_time | \n",
+ " time | \n",
+ " step | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 0.411 | \n",
+ " 0.948 | \n",
+ " 0.217 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.411 | \n",
+ " 0.948099 | \n",
+ " 0.948 | \n",
+ " 0.074389 | \n",
+ " 0.178963 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 0.818 | \n",
+ " 0.977 | \n",
+ " 0.957 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.818 | \n",
+ " 0.991736 | \n",
+ " 0.992 | \n",
+ " 0.058926 | \n",
+ " 0.160506 | \n",
+ " 10.0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 0.839 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.839 | \n",
+ " 0.995671 | \n",
+ " 0.996 | \n",
+ " 0.066158 | \n",
+ " 0.166594 | \n",
+ " 15.0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 0.842 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.842 | \n",
+ " 0.995671 | \n",
+ " 0.996 | \n",
+ " 0.065453 | \n",
+ " 0.166578 | \n",
+ " 20.0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 0.841 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.841 | \n",
+ " 0.995671 | \n",
+ " 0.996 | \n",
+ " 0.060269 | \n",
+ " 0.165117 | \n",
+ " 25.0 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 0.847 | \n",
+ " 0.978 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.847 | \n",
+ " 0.995671 | \n",
+ " 0.996 | \n",
+ " 0.073501 | \n",
+ " 0.173967 | \n",
+ " 30.0 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 0.848 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.848 | \n",
+ " 0.995671 | \n",
+ " 0.996 | \n",
+ " 0.067540 | \n",
+ " 0.170206 | \n",
+ " 35.0 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 0.846 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.846 | \n",
+ " 0.995671 | \n",
+ " 0.996 | \n",
+ " 0.057506 | \n",
+ " 0.158793 | \n",
+ " 40.0 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 0.852 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.852 | \n",
+ " 0.997783 | \n",
+ " 0.998 | \n",
+ " 0.069616 | \n",
+ " 0.170459 | \n",
+ " 45.0 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 0.848 | \n",
+ " 0.979 | \n",
+ " 0.960 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.848 | \n",
+ " 0.998878 | \n",
+ " 0.999 | \n",
+ " 0.063433 | \n",
+ " 0.165182 | \n",
+ " 50.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " coco/bbox_mAP coco/bbox_mAP_50 coco/bbox_mAP_75 coco/bbox_mAP_s \\\n",
+ "0 0.411 0.948 0.217 -1.0 \n",
+ "1 0.818 0.977 0.957 -1.0 \n",
+ "2 0.839 0.979 0.960 -1.0 \n",
+ "3 0.842 0.979 0.960 -1.0 \n",
+ "4 0.841 0.979 0.960 -1.0 \n",
+ "5 0.847 0.978 0.960 -1.0 \n",
+ "6 0.848 0.979 0.960 -1.0 \n",
+ "7 0.846 0.979 0.960 -1.0 \n",
+ "8 0.852 0.979 0.960 -1.0 \n",
+ "9 0.848 0.979 0.960 -1.0 \n",
+ "\n",
+ " coco/bbox_mAP_m coco/bbox_mAP_l pascal_voc/mAP pascal_voc/AP50 \\\n",
+ "0 -1.0 0.411 0.948099 0.948 \n",
+ "1 -1.0 0.818 0.991736 0.992 \n",
+ "2 -1.0 0.839 0.995671 0.996 \n",
+ "3 -1.0 0.842 0.995671 0.996 \n",
+ "4 -1.0 0.841 0.995671 0.996 \n",
+ "5 -1.0 0.847 0.995671 0.996 \n",
+ "6 -1.0 0.848 0.995671 0.996 \n",
+ "7 -1.0 0.846 0.995671 0.996 \n",
+ "8 -1.0 0.852 0.997783 0.998 \n",
+ "9 -1.0 0.848 0.998878 0.999 \n",
+ "\n",
+ " data_time time step \n",
+ "0 0.074389 0.178963 5.0 \n",
+ "1 0.058926 0.160506 10.0 \n",
+ "2 0.066158 0.166594 15.0 \n",
+ "3 0.065453 0.166578 20.0 \n",
+ "4 0.060269 0.165117 25.0 \n",
+ "5 0.073501 0.173967 30.0 \n",
+ "6 0.067540 0.170206 35.0 \n",
+ "7 0.057506 0.158793 40.0 \n",
+ "8 0.069616 0.170459 45.0 \n",
+ "9 0.063433 0.165182 50.0 "
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_test"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e7d3adaf-5349-4f63-ba43-c934d9e26fd4",
+ "metadata": {},
+ "source": [
+ "## 导出训练日志表格"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "41f7af2f-5787-4604-9813-db2f333ea083",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_train.to_csv('训练日志-训练集.csv', index=False)\n",
+ "df_test.to_csv('训练日志-测试集.csv', index=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d621e61-ada4-459f-93a7-47e11534c7f9",
+ "metadata": {},
+ "source": [
+ "## 设置Matplotlib中文字体"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "70c523df-edd2-4625-aee7-5788d6d3745b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# # windows操作系统\n",
+ "# plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签 \n",
+ "# plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "aa2a07f6-e57d-4cf5-8fbc-a78063c4ace9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Mac操作系统,参考 https://www.ngui.cc/51cto/show-727683.html\n",
+ "# 下载 simhei.ttf 字体文件\n",
+ "# !wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "a2d91da7-7c70-464c-bad2-597810e02b48",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--2023-05-12 08:45:29-- https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf\n",
+ "正在连接 172.16.0.13:5848... 已连接。\n",
+ "已发出 Proxy 请求,正在等待回应... 200 OK\n",
+ "长度: 10050868 (9.6M) [application/x-font-ttf]\n",
+ "正在保存至: “/environment/miniconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf”\n",
+ "\n",
+ "/environment/minico 100%[===================>] 9.58M 22.5MB/s 用时 0.4s \n",
+ "\n",
+ "2023-05-12 08:45:30 (22.5 MB/s) - 已保存 “/environment/miniconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf” [10050868/10050868])\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Linux操作系统,例如 云GPU平台:https://featurize.cn/?s=d7ce99f842414bfcaea5662a97581bd1\n",
+ "# 如果遇到 SSL 相关报错,重新运行本代码块即可\n",
+ "!wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf -O /environment/miniconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf\n",
+ "!rm -rf /home/featurize/.cache/matplotlib\n",
+ "\n",
+ "import matplotlib \n",
+ "import matplotlib.pyplot as plt\n",
+ "matplotlib.rc(\"font\",family='SimHei') # 中文字体\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "da0ce49d-5ff5-471d-b19e-4037a2e1dd20",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "