Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yolov5
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
yolov5
Commits
d631a690
提交
d631a690
authored
8月 06, 2022
作者:
Glenn Jocher
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Created using Colaboratory
上级
20f1b7ea
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
153 行增加
和
153 行删除
+153
-153
tutorial.ipynb
tutorial.ipynb
+153
-153
没有找到文件。
tutorial.ipynb
浏览文件 @
d631a690
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
"accelerator": "GPU",
"accelerator": "GPU",
"widgets": {
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"application/vnd.jupyter.widget-state+json": {
"c
79427d84662495db06b89a791d61f31
": {
"c
31d2039ccf74c22b67841f4877d1186
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -32,14 +32,14 @@
...
@@ -32,14 +32,14 @@
"_view_name": "HBoxView",
"_view_name": "HBoxView",
"box_style": "",
"box_style": "",
"children": [
"children": [
"IPY_MODEL_
469c8e5ae4d64adea773341ec22d5851
",
"IPY_MODEL_
d4bba1727c714d94ad58a72bffa07c4c
",
"IPY_MODEL_
2435573a321341878622d79e1f48f3db
",
"IPY_MODEL_
9aeff9f1780b45f892422fdc96e56913
",
"IPY_MODEL_
a4dcb697b08b4b70ab3ef3ffa54c28e4
"
"IPY_MODEL_
bf55a7c71d074d3fa88b10b997820825
"
],
],
"layout": "IPY_MODEL_
87495c10d22c4b82bd724a4d7c300df3
"
"layout": "IPY_MODEL_
d8b66044e2fb4f5b916696834d880c81
"
}
}
},
},
"
469c8e5ae4d64adea773341ec22d5851
": {
"
d4bba1727c714d94ad58a72bffa07c4c
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -54,13 +54,13 @@
...
@@ -54,13 +54,13 @@
"_view_name": "HTMLView",
"_view_name": "HTMLView",
"description": "",
"description": "",
"description_tooltip": null,
"description_tooltip": null,
"layout": "IPY_MODEL_
098c321358c24cdbb50f6c0e6623bf6c
",
"layout": "IPY_MODEL_
102e1deda239436fa72751c58202fa0f
",
"placeholder": "",
"placeholder": "",
"style": "IPY_MODEL_
20184030ca9d4aef9dac0a149b89e4d3
",
"style": "IPY_MODEL_
4fd4431ced6c42368e18424912b877e4
",
"value": "100%"
"value": "100%"
}
}
},
},
"
2435573a321341878622d79e1f48f3db
": {
"
9aeff9f1780b45f892422fdc96e56913
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -76,15 +76,15 @@
...
@@ -76,15 +76,15 @@
"bar_style": "success",
"bar_style": "success",
"description": "",
"description": "",
"description_tooltip": null,
"description_tooltip": null,
"layout": "IPY_MODEL_
790808c9b4fb448aa136cc1ade0f95b5
",
"layout": "IPY_MODEL_
cdd709c4f40941bea1b2053523c9fac8
",
"max": 818322941,
"max": 818322941,
"min": 0,
"min": 0,
"orientation": "horizontal",
"orientation": "horizontal",
"style": "IPY_MODEL_
99b822fd56b749318b38d8ccbc4ac469
",
"style": "IPY_MODEL_
a1ef2d8de2b741c78ca5d938e2ddbcdf
",
"value": 818322941
"value": 818322941
}
}
},
},
"
a4dcb697b08b4b70ab3ef3ffa54c28e4
": {
"
bf55a7c71d074d3fa88b10b997820825
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -99,13 +99,13 @@
...
@@ -99,13 +99,13 @@
"_view_name": "HTMLView",
"_view_name": "HTMLView",
"description": "",
"description": "",
"description_tooltip": null,
"description_tooltip": null,
"layout": "IPY_MODEL_
d542739146774953954e92db1666b951
",
"layout": "IPY_MODEL_
0dbce99bb6184238842cbec0587d564a
",
"placeholder": "",
"placeholder": "",
"style": "IPY_MODEL_
e11f3a2c51204778832631a5f150b21d
",
"style": "IPY_MODEL_
91ff5f93f2a24c5790ab29e347965946
",
"value": " 780M/780M [0
2:31<00:00, 4.89
MB/s]"
"value": " 780M/780M [0
1:10<00:00, 10.5
MB/s]"
}
}
},
},
"
87495c10d22c4b82bd724a4d7c300df3
": {
"
d8b66044e2fb4f5b916696834d880c81
": {
"model_module": "@jupyter-widgets/base",
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"model_module_version": "1.2.0",
...
@@ -157,7 +157,7 @@
...
@@ -157,7 +157,7 @@
"width": null
"width": null
}
}
},
},
"
098c321358c24cdbb50f6c0e6623bf6c
": {
"
102e1deda239436fa72751c58202fa0f
": {
"model_module": "@jupyter-widgets/base",
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"model_module_version": "1.2.0",
...
@@ -209,7 +209,7 @@
...
@@ -209,7 +209,7 @@
"width": null
"width": null
}
}
},
},
"
20184030ca9d4aef9dac0a149b89e4d3
": {
"
4fd4431ced6c42368e18424912b877e4
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -224,7 +224,7 @@
...
@@ -224,7 +224,7 @@
"description_width": ""
"description_width": ""
}
}
},
},
"
790808c9b4fb448aa136cc1ade0f95b5
": {
"
cdd709c4f40941bea1b2053523c9fac8
": {
"model_module": "@jupyter-widgets/base",
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"model_module_version": "1.2.0",
...
@@ -276,7 +276,7 @@
...
@@ -276,7 +276,7 @@
"width": null
"width": null
}
}
},
},
"
99b822fd56b749318b38d8ccbc4ac469
": {
"
a1ef2d8de2b741c78ca5d938e2ddbcdf
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -292,7 +292,7 @@
...
@@ -292,7 +292,7 @@
"description_width": ""
"description_width": ""
}
}
},
},
"
d542739146774953954e92db1666b951
": {
"
0dbce99bb6184238842cbec0587d564a
": {
"model_module": "@jupyter-widgets/base",
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"model_module_version": "1.2.0",
...
@@ -344,7 +344,7 @@
...
@@ -344,7 +344,7 @@
"width": null
"width": null
}
}
},
},
"
e11f3a2c51204778832631a5f150b21d
": {
"
91ff5f93f2a24c5790ab29e347965946
": {
"model_module": "@jupyter-widgets/controls",
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"model_module_version": "1.5.0",
...
@@ -404,7 +404,7 @@
...
@@ -404,7 +404,7 @@
"colab": {
"colab": {
"base_uri": "https://localhost:8080/"
"base_uri": "https://localhost:8080/"
},
},
"outputId": "
7728cbd8-6240-4814-e8fe-a223b9e57ed9
"
"outputId": "
185d0979-edcd-4860-e6fb-b8a27dbf5096
"
},
},
"source": [
"source": [
"!git clone https://github.com/ultralytics/yolov5 # clone\n",
"!git clone https://github.com/ultralytics/yolov5 # clone\n",
...
@@ -415,20 +415,20 @@
...
@@ -415,20 +415,20 @@
"import utils\n",
"import utils\n",
"display = utils.notebook_init() # checks"
"display = utils.notebook_init() # checks"
],
],
"execution_count":
null
,
"execution_count":
1
,
"outputs": [
"outputs": [
{
{
"output_type": "stream",
"output_type": "stream",
"name": "stderr",
"name": "stderr",
"text": [
"text": [
"YOLOv5 🚀 v6.1-3
43-g685332
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n"
"YOLOv5 🚀 v6.1-3
70-g20f1b7
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n"
]
]
},
},
{
{
"output_type": "stream",
"output_type": "stream",
"name": "stdout",
"name": "stdout",
"text": [
"text": [
"Setup complete ✅ (8 CPUs, 51.0 GB RAM, 3
8.6
/166.8 GB disk)\n"
"Setup complete ✅ (8 CPUs, 51.0 GB RAM, 3
7.4
/166.8 GB disk)\n"
]
]
}
}
]
]
...
@@ -461,29 +461,29 @@
...
@@ -461,29 +461,29 @@
"colab": {
"colab": {
"base_uri": "https://localhost:8080/"
"base_uri": "https://localhost:8080/"
},
},
"outputId": "
2d81665e-a0c4-489a-c92e-fe815223adfb
"
"outputId": "
4b13989f-32a4-4ef0-b403-06ff3aac255c
"
},
},
"source": [
"source": [
"!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images\n",
"!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images\n",
"#display.Image(filename='runs/detect/exp/zidane.jpg', width=600)"
"#display.Image(filename='runs/detect/exp/zidane.jpg', width=600)"
],
],
"execution_count":
null
,
"execution_count":
2
,
"outputs": [
"outputs": [
{
{
"output_type": "stream",
"output_type": "stream",
"name": "stdout",
"name": "stdout",
"text": [
"text": [
"\u001b[34m\u001b[1mdetect: \u001b[0mweights=['yolov5s.pt'], source=data/images, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False\n",
"\u001b[34m\u001b[1mdetect: \u001b[0mweights=['yolov5s.pt'], source=data/images, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False\n",
"YOLOv5 🚀 v6.1-3
43-g685332
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n",
"YOLOv5 🚀 v6.1-3
70-g20f1b7
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n",
"\n",
"\n",
"Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt to yolov5s.pt...\n",
"Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt to yolov5s.pt...\n",
"100% 14.1M/14.1M [00:0
2<00:00, 6.87
MB/s]\n",
"100% 14.1M/14.1M [00:0
0<00:00, 53.9
MB/s]\n",
"\n",
"\n",
"Fusing layers... \n",
"Fusing layers... \n",
"YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n",
"YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n",
"image 1/2 /content/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, Done. (0.01
4
s)\n",
"image 1/2 /content/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, Done. (0.01
6
s)\n",
"image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.0
19
s)\n",
"image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.0
21
s)\n",
"Speed: 0.
5ms pre-process, 16.3ms inference, 22.1
ms NMS per image at shape (1, 3, 640, 640)\n",
"Speed: 0.
6ms pre-process, 18.6ms inference, 25.0
ms NMS per image at shape (1, 3, 640, 640)\n",
"Results saved to \u001b[1mruns/detect/exp\u001b[0m\n"
"Results saved to \u001b[1mruns/detect/exp\u001b[0m\n"
]
]
}
}
...
@@ -527,27 +527,27 @@
...
@@ -527,27 +527,27 @@
"base_uri": "https://localhost:8080/",
"base_uri": "https://localhost:8080/",
"height": 49,
"height": 49,
"referenced_widgets": [
"referenced_widgets": [
"c
79427d84662495db06b89a791d61f31
",
"c
31d2039ccf74c22b67841f4877d1186
",
"
469c8e5ae4d64adea773341ec22d5851
",
"
d4bba1727c714d94ad58a72bffa07c4c
",
"
2435573a321341878622d79e1f48f3db
",
"
9aeff9f1780b45f892422fdc96e56913
",
"
a4dcb697b08b4b70ab3ef3ffa54c28e4
",
"
bf55a7c71d074d3fa88b10b997820825
",
"
87495c10d22c4b82bd724a4d7c300df3
",
"
d8b66044e2fb4f5b916696834d880c81
",
"
098c321358c24cdbb50f6c0e6623bf6c
",
"
102e1deda239436fa72751c58202fa0f
",
"
20184030ca9d4aef9dac0a149b89e4d3
",
"
4fd4431ced6c42368e18424912b877e4
",
"
790808c9b4fb448aa136cc1ade0f95b5
",
"
cdd709c4f40941bea1b2053523c9fac8
",
"
99b822fd56b749318b38d8ccbc4ac469
",
"
a1ef2d8de2b741c78ca5d938e2ddbcdf
",
"
d542739146774953954e92db1666b951
",
"
0dbce99bb6184238842cbec0587d564a
",
"
e11f3a2c51204778832631a5f150b21d
"
"
91ff5f93f2a24c5790ab29e347965946
"
]
]
},
},
"outputId": "
d880071b-84ce-4567-9e42-a3c3a78bff7
3"
"outputId": "
a9004b06-37a6-41ed-a1f2-ac956f3963b
3"
},
},
"source": [
"source": [
"# Download COCO val\n",
"# Download COCO val\n",
"torch.hub.download_url_to_file('https://ultralytics.com/assets/coco2017val.zip', 'tmp.zip')\n",
"torch.hub.download_url_to_file('https://ultralytics.com/assets/coco2017val.zip', 'tmp.zip')\n",
"!unzip -q tmp.zip -d ../datasets && rm tmp.zip"
"!unzip -q tmp.zip -d ../datasets && rm tmp.zip"
],
],
"execution_count":
null
,
"execution_count":
3
,
"outputs": [
"outputs": [
{
{
"output_type": "display_data",
"output_type": "display_data",
...
@@ -558,7 +558,7 @@
...
@@ -558,7 +558,7 @@
"application/vnd.jupyter.widget-view+json": {
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_major": 2,
"version_minor": 0,
"version_minor": 0,
"model_id": "c
79427d84662495db06b89a791d61f31
"
"model_id": "c
31d2039ccf74c22b67841f4877d1186
"
}
}
},
},
"metadata": {}
"metadata": {}
...
@@ -572,48 +572,48 @@
...
@@ -572,48 +572,48 @@
"colab": {
"colab": {
"base_uri": "https://localhost:8080/"
"base_uri": "https://localhost:8080/"
},
},
"outputId": "
da9456fa-6663-44a8-975b-c99e89d0eb06
"
"outputId": "
c0f29758-4ec8-4def-893d-0efd6ed5b7f4
"
},
},
"source": [
"source": [
"# Run YOLOv5x on COCO val\n",
"# Run YOLOv5x on COCO val\n",
"!python val.py --weights yolov5x.pt --data coco.yaml --img 640 --iou 0.65 --half"
"!python val.py --weights yolov5x.pt --data coco.yaml --img 640 --iou 0.65 --half"
],
],
"execution_count":
null
,
"execution_count":
4
,
"outputs": [
"outputs": [
{
{
"output_type": "stream",
"output_type": "stream",
"name": "stdout",
"name": "stdout",
"text": [
"text": [
"\u001b[34m\u001b[1mval: \u001b[0mdata=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True, dnn=False\n",
"\u001b[34m\u001b[1mval: \u001b[0mdata=/content/yolov5/data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True, dnn=False\n",
"YOLOv5 🚀 v6.1-3
43-g685332
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n",
"YOLOv5 🚀 v6.1-3
70-g20f1b7
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n",
"\n",
"\n",
"Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5x.pt to yolov5x.pt...\n",
"Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5x.pt to yolov5x.pt...\n",
"100% 166M/166M [00:
16<00:00, 10.3
MB/s]\n",
"100% 166M/166M [00:
35<00:00, 4.97
MB/s]\n",
"\n",
"\n",
"Fusing layers... \n",
"Fusing layers... \n",
"YOLOv5x summary: 444 layers, 86705005 parameters, 0 gradients\n",
"YOLOv5x summary: 444 layers, 86705005 parameters, 0 gradients\n",
"Downloading https://ultralytics.com/assets/Arial.ttf to /root/.config/Ultralytics/Arial.ttf...\n",
"Downloading https://ultralytics.com/assets/Arial.ttf to /root/.config/Ultralytics/Arial.ttf...\n",
"100% 755k/755k [00:00<00:00,
14.8
MB/s]\n",
"100% 755k/755k [00:00<00:00,
49.4
MB/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mScanning '/content/datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<00:00, 1
1214.34
it/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mScanning '/content/datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupt: 100% 5000/5000 [00:00<00:00, 1
0716.86
it/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mNew cache created: /content/datasets/coco/val2017.cache\n",
"\u001b[34m\u001b[1mval: \u001b[0mNew cache created: /content/datasets/coco/val2017.cache\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [01:0
5<00:00, 2.39
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [01:0
8<00:00, 2.28
it/s]\n",
" all 5000 36335 0.743 0.625 0.683 0.504\n",
" all 5000 36335 0.743 0.625 0.683 0.504\n",
"Speed: 0.1ms pre-process, 4.
7ms inference, 1.1
ms NMS per image at shape (32, 3, 640, 640)\n",
"Speed: 0.1ms pre-process, 4.
6ms inference, 1.2
ms NMS per image at shape (32, 3, 640, 640)\n",
"\n",
"\n",
"Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...\n",
"Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...\n",
"loading annotations into memory...\n",
"loading annotations into memory...\n",
"Done (t=0.
38
s)\n",
"Done (t=0.
41
s)\n",
"creating index...\n",
"creating index...\n",
"index created!\n",
"index created!\n",
"Loading and preparing results...\n",
"Loading and preparing results...\n",
"DONE (t=5.
39
s)\n",
"DONE (t=5.
64
s)\n",
"creating index...\n",
"creating index...\n",
"index created!\n",
"index created!\n",
"Running per image evaluation...\n",
"Running per image evaluation...\n",
"Evaluate annotation type *bbox*\n",
"Evaluate annotation type *bbox*\n",
"DONE (t=7
1.33
s).\n",
"DONE (t=7
2.86
s).\n",
"Accumulating evaluation results...\n",
"Accumulating evaluation results...\n",
"DONE (t=1
2.45
s).\n",
"DONE (t=1
4.20
s).\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.506\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.506\n",
" Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.688\n",
" Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.688\n",
" Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.549\n",
" Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.549\n",
...
@@ -747,30 +747,31 @@
...
@@ -747,30 +747,31 @@
"colab": {
"colab": {
"base_uri": "https://localhost:8080/"
"base_uri": "https://localhost:8080/"
},
},
"outputId": "
9fe5caba-6b0f-4b6e-93a8-4075dae0ee35
"
"outputId": "
bce1b4bd-1a14-4c07-aebd-6c11e91ad24b
"
},
},
"source": [
"source": [
"# Train YOLOv5s on COCO128 for 3 epochs\n",
"# Train YOLOv5s on COCO128 for 3 epochs\n",
"!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache"
"!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache"
],
],
"execution_count":
null
,
"execution_count":
5
,
"outputs": [
"outputs": [
{
{
"output_type": "stream",
"output_type": "stream",
"name": "stdout",
"name": "stdout",
"text": [
"text": [
"\u001b[34m\u001b[1mtrain: \u001b[0mweights=yolov5s.pt, cfg=, data=coco128.yaml, hyp=data/hyps/hyp.scratch-low.yaml, epochs=3, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket=, cache=ram, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs/train, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mweights=yolov5s.pt, cfg=, data=coco128.yaml, hyp=data/hyps/hyp.scratch-low.yaml, epochs=3, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket=, cache=ram, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs/train, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest\n",
"\u001b[34m\u001b[1mgithub: \u001b[0m
skipping check (Docker image), for updates see https://github.com/ultralytics/yolov5
\n",
"\u001b[34m\u001b[1mgithub: \u001b[0m
up to date with https://github.com/ultralytics/yolov5 ✅
\n",
"YOLOv5 🚀 v6.1-3
43-g685332
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n",
"YOLOv5 🚀 v6.1-3
70-g20f1b7
e Python-3.7.13 torch-1.12.0+cu113 CUDA:0 (Tesla V100-SXM2-16GB, 16160MiB)\n",
"\n",
"\n",
"\u001b[34m\u001b[1mhyperparameters: \u001b[0mlr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0\n",
"\u001b[34m\u001b[1mhyperparameters: \u001b[0mlr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0\n",
"\u001b[34m\u001b[1mWeights & Biases: \u001b[0mrun 'pip install wandb' to automatically track and visualize YOLOv5 🚀 runs (RECOMMENDED)\n",
"\u001b[34m\u001b[1mWeights & Biases: \u001b[0mrun 'pip install wandb' to automatically track and visualize YOLOv5 🚀 runs in Weights & Biases\n",
"\u001b[34m\u001b[1mClearML: \u001b[0mrun 'pip install clearml' to automatically track, visualize and remotely train YOLOv5 🚀 runs in ClearML\n",
"\u001b[34m\u001b[1mTensorBoard: \u001b[0mStart with 'tensorboard --logdir runs/train', view at http://localhost:6006/\n",
"\u001b[34m\u001b[1mTensorBoard: \u001b[0mStart with 'tensorboard --logdir runs/train', view at http://localhost:6006/\n",
"\n",
"\n",
"Dataset not found ⚠️, missing paths ['/content/datasets/coco128/images/train2017']\n",
"Dataset not found ⚠️, missing paths ['/content/datasets/coco128/images/train2017']\n",
"Downloading https://ultralytics.com/assets/coco128.zip to coco128.zip...\n",
"Downloading https://ultralytics.com/assets/coco128.zip to coco128.zip...\n",
"100% 6.66M/6.66M [00:00<00:00,
31.8
MB/s]\n",
"100% 6.66M/6.66M [00:00<00:00,
75.2
MB/s]\n",
"Dataset download success ✅ (
1.5
s), saved to \u001b[1m/content/datasets\u001b[0m\n",
"Dataset download success ✅ (
0.7
s), saved to \u001b[1m/content/datasets\u001b[0m\n",
"\n",
"\n",
" from n params module arguments \n",
" from n params module arguments \n",
" 0 -1 1 3520 models.common.Conv [3, 32, 6, 2, 2] \n",
" 0 -1 1 3520 models.common.Conv [3, 32, 6, 2, 2] \n",
...
@@ -802,14 +803,13 @@
...
@@ -802,14 +803,13 @@
"\n",
"\n",
"Transferred 349/349 items from yolov5s.pt\n",
"Transferred 349/349 items from yolov5s.pt\n",
"\u001b[34m\u001b[1mAMP: \u001b[0mchecks passed ✅\n",
"\u001b[34m\u001b[1mAMP: \u001b[0mchecks passed ✅\n",
"Scaled weight_decay = 0.0005\n",
"\u001b[34m\u001b[1moptimizer:\u001b[0m SGD(lr=0.01) with parameter groups 57 weight(decay=0.0), 60 weight(decay=0.0005), 60 bias\n",
"\u001b[34m\u001b[1moptimizer:\u001b[0m SGD with parameter groups 57 weight (no decay), 60 weight, 60 bias\n",
"\u001b[34m\u001b[1malbumentations: \u001b[0mBlur(always_apply=False, p=0.01, blur_limit=(3, 7)), MedianBlur(always_apply=False, p=0.01, blur_limit=(3, 7)), ToGray(always_apply=False, p=0.01), CLAHE(always_apply=False, p=0.01, clip_limit=(1, 4.0), tile_grid_size=(8, 8))\n",
"\u001b[34m\u001b[1malbumentations: \u001b[0mversion 1.0.3 required by YOLOv5, but version 0.1.12 is currently installed\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mScanning '/content/datasets/coco128/labels/train2017' images and labels...128 found, 0 missing, 2 empty, 0 corrupt: 100% 128/128 [00:00<00:00, 7926.40it/s]\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mScanning '/content/datasets/coco128/labels/train2017' images and labels...128 found, 0 missing, 2 empty, 0 corrupt: 100% 128/128 [00:00<00:00, 13378.96it/s]\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mNew cache created: /content/datasets/coco128/labels/train2017.cache\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mNew cache created: /content/datasets/coco128/labels/train2017.cache\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00,
1053.85
it/s]\n",
"\u001b[34m\u001b[1mtrain: \u001b[0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00,
975.81
it/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mScanning '/content/datasets/coco128/labels/train2017.cache' images and labels... 128 found, 0 missing, 2 empty, 0 corrupt: 100% 128/128 [00:00<?, ?it/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mScanning '/content/datasets/coco128/labels/train2017.cache' images and labels... 128 found, 0 missing, 2 empty, 0 corrupt: 100% 128/128 [00:00<?, ?it/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00, 2
96.75
it/s]\n",
"\u001b[34m\u001b[1mval: \u001b[0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00, 2
58.62
it/s]\n",
"Plotting labels to runs/train/exp/labels.jpg... \n",
"Plotting labels to runs/train/exp/labels.jpg... \n",
"\n",
"\n",
"\u001b[34m\u001b[1mAutoAnchor: \u001b[0m4.27 anchors/target, 0.994 Best Possible Recall (BPR). Current anchors are a good fit to dataset ✅\n",
"\u001b[34m\u001b[1mAutoAnchor: \u001b[0m4.27 anchors/target, 0.994 Best Possible Recall (BPR). Current anchors are a good fit to dataset ✅\n",
...
@@ -819,19 +819,19 @@
...
@@ -819,19 +819,19 @@
"Starting training for 3 epochs...\n",
"Starting training for 3 epochs...\n",
"\n",
"\n",
" Epoch gpu_mem box obj cls labels img_size\n",
" Epoch gpu_mem box obj cls labels img_size\n",
" 0/2 3.76G 0.04
445 0.06016 0.01651 247 640: 100% 8/8 [00:04<00:00, 1.74
it/s]\n",
" 0/2 3.76G 0.04
529 0.06712 0.01835 323 640: 100% 8/8 [00:05<00:00, 1.59
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.
38
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.
05
it/s]\n",
" all 128 929 0.
763 0.611 0.716 0.469
\n",
" all 128 929 0.
806 0.593 0.718 0.472
\n",
"\n",
"\n",
" Epoch gpu_mem box obj cls labels img_size\n",
" Epoch gpu_mem box obj cls labels img_size\n",
" 1/2 4.79G
0.0443 0.06624 0.01655 188 640: 100% 8/8 [00:00<00:00, 8.46
it/s]\n",
" 1/2 4.79G
0.04244 0.06423 0.01611 236 640: 100% 8/8 [00:00<00:00, 8.11
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.
44
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.
20
it/s]\n",
" all 128 929 0.
787 0.631 0.734 0.488
\n",
" all 128 929 0.
811 0.615 0.74 0.493
\n",
"\n",
"\n",
" Epoch gpu_mem box obj cls labels img_size\n",
" Epoch gpu_mem box obj cls labels img_size\n",
" 2/2 4.79G 0.04
283 0.0579 0.01571 217 640: 100% 8/8 [00:00<00:00, 9.69
it/s]\n",
" 2/2 4.79G 0.04
695 0.06875 0.0173 189 640: 100% 8/8 [00:00<00:00, 9.12
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.
70
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:00<00:00, 4.
24
it/s]\n",
" all 128 929 0.
807 0.632 0.741 0.491
\n",
" all 128 929 0.
784 0.634 0.747 0.502
\n",
"\n",
"\n",
"3 epochs completed in 0.003 hours.\n",
"3 epochs completed in 0.003 hours.\n",
"Optimizer stripped from runs/train/exp/weights/last.pt, 14.9MB\n",
"Optimizer stripped from runs/train/exp/weights/last.pt, 14.9MB\n",
...
@@ -840,79 +840,79 @@
...
@@ -840,79 +840,79 @@
"Validating runs/train/exp/weights/best.pt...\n",
"Validating runs/train/exp/weights/best.pt...\n",
"Fusing layers... \n",
"Fusing layers... \n",
"Model summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs\n",
"Model summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:0
2<00:00, 1.36
it/s]\n",
" Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 4/4 [00:0
3<00:00, 1.20
it/s]\n",
" all 128 929 0.
808 0.631 0.741 0.491
\n",
" all 128 929 0.
781 0.637 0.747 0.502
\n",
" person 128 254 0.8
86 0.689 0.812 0.53
\n",
" person 128 254 0.8
72 0.693 0.81 0.534
\n",
" bicycle 128 6 1 0.4
76 0.837 0.458
\n",
" bicycle 128 6 1 0.4
07 0.68 0.425
\n",
" car 128 46 0.7
58 0.413 0.575 0.259
\n",
" car 128 46 0.7
43 0.413 0.581 0.247
\n",
" motorcycle 128 5 1
0.93 0.995 0.70
2\n",
" motorcycle 128 5 1
0.988 0.995 0.69
2\n",
" airplane 128 6 0.9
55 1 0.995 0.745
\n",
" airplane 128 6 0.9
65 1 0.995 0.717
\n",
" bus 128 7 0.7
55 0.714 0.832 0.691
\n",
" bus 128 7 0.7
06 0.714 0.814 0.697
\n",
" train 128 3 1 0.5
53 0.789 0.493
\n",
" train 128 3 1 0.5
82 0.806 0.477
\n",
" truck 128 12 0.6
29 0.417 0.491 0.269
\n",
" truck 128 12 0.6
02 0.417 0.495 0.271
\n",
" boat 128 6
1 0.332 0.507 0.201
\n",
" boat 128 6
0.961 0.333 0.464 0.224
\n",
" traffic light 128 14 0.
859 0.214 0.385 0.228
\n",
" traffic light 128 14 0.
517 0.155 0.364 0.216
\n",
" stop sign 128 2 0.
809 1 0.995 0.796
\n",
" stop sign 128 2 0.
782 1 0.995 0.821
\n",
" bench 128 9 0.8
18 0.504 0.64 0.259
\n",
" bench 128 9 0.8
29 0.539 0.701 0.288
\n",
" bird 128 16 0.92
1 1 0.995 0.64
\n",
" bird 128 16 0.92
4 1 0.995 0.655
\n",
" cat 128 4 0.
915 1 0.995 0.822
\n",
" cat 128 4 0.
891 1 0.995 0.809
\n",
" dog 128 9
0.869 0.556 0.902 0.6
\n",
" dog 128 9
1 0.659 0.883 0.604
\n",
" horse 128 2 0.8
16
1 0.995 0.672\n",
" horse 128 2 0.8
08
1 0.995 0.672\n",
" elephant 128 17 0.973 0.882 0.93
4 0.731
\n",
" elephant 128 17 0.973 0.882 0.93
6 0.733
\n",
" bear 128 1 0.69
9 1 0.995 0.8
95\n",
" bear 128 1 0.69
2 1 0.995 0.9
95\n",
" zebra 128 4 0.87
7 1 0.995 0.947
\n",
" zebra 128 4 0.87
2 1 0.995 0.922
\n",
" giraffe 128 9 0.86
8 0.889 0.975 0.742
\n",
" giraffe 128 9 0.86
5 0.889 0.975 0.736
\n",
" backpack 128 6 1 0.54
3 0.76 0.346
\n",
" backpack 128 6 1 0.54
7 0.787 0.372
\n",
" umbrella 128 18 0.8
64 0.611 0.898 0.522
\n",
" umbrella 128 18 0.8
23 0.667 0.889 0.504
\n",
" handbag 128 19 0.
701 0.127 0.335 0.174
\n",
" handbag 128 19 0.
516 0.105 0.304 0.153
\n",
" tie 128 7 0.
929 0.714 0.739 0.47
\n",
" tie 128 7 0.
696 0.714 0.741 0.482
\n",
" suitcase 128 4 0.
658 0.75 0.795 0.536
\n",
" suitcase 128 4 0.
716 1 0.995 0.553
\n",
" frisbee 128 5 0.7
22 0.8 0.8 0.69
\n",
" frisbee 128 5 0.7
15 0.8 0.8 0.71
\n",
" skis 128 1 0.
776 1 0.995 0.3
\n",
" skis 128 1 0.
694 1 0.995 0.398
\n",
" snowboard 128 7
1 0.707 0.848 0.554
\n",
" snowboard 128 7
0.893 0.714 0.855 0.569
\n",
" sports ball 128 6 0.6
62 0.667 0.602 0.316
\n",
" sports ball 128 6 0.6
59 0.667 0.602 0.307
\n",
" kite 128 10 0.
727 0.536 0.647 0.249
\n",
" kite 128 10 0.
683 0.434 0.611 0.242
\n",
" baseball bat 128 4 0.
985 0.5 0.559 0.181
\n",
" baseball bat 128 4 0.
838 0.5 0.55 0.146
\n",
" baseball glove 128 7 0.5
81 0.429 0.459 0.282
\n",
" baseball glove 128 7 0.5
72 0.429 0.463 0.294
\n",
" skateboard 128 5 0.
739 0.6 0.705 0.501
\n",
" skateboard 128 5 0.
697 0.6 0.702 0.476
\n",
" tennis racket 128 7
0.759 0.429 0.566 0.31
\n",
" tennis racket 128 7
0.62 0.429 0.544 0.29
\n",
" bottle 128 18 0.59
3 0.405 0.574 0.294
\n",
" bottle 128 18 0.59
1 0.402 0.572 0.295
\n",
" wine glass 128 16 0.74
2 0.875 0.91 0.497
\n",
" wine glass 128 16 0.74
7 0.921 0.913 0.529
\n",
" cup 128 36 0.8
33 0.694 0.817 0.514
\n",
" cup 128 36 0.8
24 0.639 0.826 0.535
\n",
" fork 128 6 1
0.32 0.463 0.31
\n",
" fork 128 6 1
0.319 0.518 0.353
\n",
" knife 128 16 0.7
57 0.585 0.73 0.385
\n",
" knife 128 16 0.7
68 0.62 0.654 0.374
\n",
" spoon 128 22 0.8
12 0.393 0.632 0.374
\n",
" spoon 128 22 0.8
24 0.427 0.65 0.382
\n",
" bowl 128 28
0.869 0.571 0.718 0.496
\n",
" bowl 128 28
0.8 0.643 0.726 0.525
\n",
" banana 128 1 0.8
94 1 0.995 0.205
\n",
" banana 128 1 0.8
78 1 0.995 0.208
\n",
" sandwich 128 2 1 0
0.308 0.263
\n",
" sandwich 128 2 1 0
0.62 0.546
\n",
" orange 128 4
0.876 1 0.995 0.703
\n",
" orange 128 4
1 0.896 0.995 0.691
\n",
" broccoli 128 11 0.
821 0.364 0.442 0.323
\n",
" broccoli 128 11 0.
586 0.364 0.481 0.349
\n",
" carrot 128 24 0.70
9 0.625 0.72 0.464
\n",
" carrot 128 24 0.70
2 0.589 0.722 0.475
\n",
" hot dog 128 2 0.5
46 1 0.828 0.74
5\n",
" hot dog 128 2 0.5
24 1 0.828 0.79
5\n",
" pizza 128 5 0.81
2 0.871 0.962 0.699
\n",
" pizza 128 5 0.81
1 0.865 0.962 0.695
\n",
" donut 128 14 0.6
86 1 0.96 0.825
\n",
" donut 128 14 0.6
53 1 0.964 0.853
\n",
" cake 128 4 0.85
6
1 0.995 0.822\n",
" cake 128 4 0.85
2
1 0.995 0.822\n",
" chair 128 35 0.5
91 0.577 0.616 0.31
1\n",
" chair 128 35 0.5
36 0.571 0.593 0.3
1\n",
" couch 128 6
0.973 0.667 0.857 0.532
\n",
" couch 128 6
1 0.63 0.75 0.518
\n",
" potted plant 128 14 0.
839 0.786 0.827 0.45
\n",
" potted plant 128 14 0.
775 0.738 0.839 0.478
\n",
" bed 128 3 1 0
0.641 0.40
3\n",
" bed 128 3 1 0
0.72 0.42
3\n",
" dining table 128 13 0.
631 0.266 0.462 0.375
\n",
" dining table 128 13 0.
817 0.348 0.592 0.381
\n",
" toilet 128 2 0.
878 1 0.995 0.846
\n",
" toilet 128 2 0.
782 1 0.995 0.895
\n",
" tv 128 2 0.7
07
1 0.995 0.821\n",
" tv 128 2 0.7
11
1 0.995 0.821\n",
" laptop 128 3 1 0 0.
863 0.498
\n",
" laptop 128 3 1 0 0.
789 0.42
\n",
" mouse 128 2 1 0 0.0
907 0.0544
\n",
" mouse 128 2 1 0 0.0
798 0.0399
\n",
" remote 128 8 1 0.
598 0.63 0.537
\n",
" remote 128 8 1 0.
611 0.63 0.549
\n",
" cell phone 128 8 0.6
61 0.5 0.465 0.249
\n",
" cell phone 128 8 0.6
85 0.375 0.428 0.245
\n",
" microwave 128 3 0.8
2
3 1 0.995 0.767\n",
" microwave 128 3 0.8
0
3 1 0.995 0.767\n",
" oven 128 5
0.428 0.4 0.432 0.285
\n",
" oven 128 5
0.42 0.4 0.444 0.306
\n",
" sink 128 6 0.
354 0.167 0.268 0.178
\n",
" sink 128 6 0.
288 0.167 0.34 0.247
\n",
" refrigerator 128 5 0.6
49 0.8 0.806 0.551
\n",
" refrigerator 128 5 0.6
32 0.8 0.805 0.572
\n",
" book 128 29 0.
618 0.207 0.333
0.161\n",
" book 128 29 0.
494 0.207 0.332
0.161\n",
" clock 128 9 0.79
2 0.889 0.943 0.73
5\n",
" clock 128 9 0.79
1 0.889 0.93 0.7
5\n",
" vase 128 2 0.
502
1 0.995 0.895\n",
" vase 128 2 0.
355
1 0.995 0.895\n",
" scissors 128 1 1 0 0.332 0.0663\n",
" scissors 128 1 1 0 0.332 0.0663\n",
" teddy bear 128 21
0.84 0.619 0.769 0.521
\n",
" teddy bear 128 21
0.839 0.571 0.767 0.487
\n",
" toothbrush 128 5 0.
763 0.654 0.898 0.603
\n",
" toothbrush 128 5 0.
829 0.974 0.962 0.644
\n",
"Results saved to \u001b[1mruns/train/exp\u001b[0m\n"
"Results saved to \u001b[1mruns/train/exp\u001b[0m\n"
]
]
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论