Spaces:
Runtime error
Runtime error
Upload 390 files
#1
by YONG627 - opened
This view is limited to 50 files because it contains too many changes. See the raw diff here.
- .gitattributes +1 -0
- yolov5-code-main/.idea/workspace.xml +155 -0
- yolov5-code-main/CITATION.cff +14 -0
- yolov5-code-main/LICENSE +674 -0
- yolov5-code-main/README.md +58 -0
- yolov5-code-main/YOLOv5.png +0 -0
- yolov5-code-main/__pycache__/export.cpython-38.pyc +0 -0
- yolov5-code-main/__pycache__/hubconf.cpython-38.pyc +0 -0
- yolov5-code-main/__pycache__/ui_main_window.cpython-38.pyc +0 -0
- yolov5-code-main/__pycache__/val.cpython-38.pyc +0 -0
- yolov5-code-main/base_ui.py +72 -0
- yolov5-code-main/benchmarks.py +169 -0
- yolov5-code-main/classify/predict.py +226 -0
- yolov5-code-main/classify/train.py +333 -0
- yolov5-code-main/classify/tutorial.ipynb +0 -0
- yolov5-code-main/classify/val.py +170 -0
- yolov5-code-main/data/Argoverse.yaml +74 -0
- yolov5-code-main/data/GlobalWheat2020.yaml +54 -0
- yolov5-code-main/data/ImageNet.yaml +1022 -0
- yolov5-code-main/data/Objects365.yaml +438 -0
- yolov5-code-main/data/SKU-110K.yaml +53 -0
- yolov5-code-main/data/VOC.yaml +100 -0
- yolov5-code-main/data/VisDrone.yaml +70 -0
- yolov5-code-main/data/bvn.yaml +19 -0
- yolov5-code-main/data/coco.yaml +116 -0
- yolov5-code-main/data/coco128-seg.yaml +98 -0
- yolov5-code-main/data/coco128.yaml +101 -0
- yolov5-code-main/data/hyps/hyp.Objects365.yaml +34 -0
- yolov5-code-main/data/hyps/hyp.VOC.yaml +40 -0
- yolov5-code-main/data/hyps/hyp.no-augmentation.yaml +35 -0
- yolov5-code-main/data/hyps/hyp.scratch-high.yaml +34 -0
- yolov5-code-main/data/hyps/hyp.scratch-low.yaml +34 -0
- yolov5-code-main/data/hyps/hyp.scratch-med.yaml +34 -0
- yolov5-code-main/data/images/bus.jpg +0 -0
- yolov5-code-main/data/images/zidane.jpg +0 -0
- yolov5-code-main/data/images/zidane.json +0 -0
- yolov5-code-main/data/scripts/download_weights.sh +22 -0
- yolov5-code-main/data/scripts/get_coco.sh +56 -0
- yolov5-code-main/data/scripts/get_coco128.sh +17 -0
- yolov5-code-main/data/scripts/get_imagenet.sh +51 -0
- yolov5-code-main/data/xView.yaml +153 -0
- yolov5-code-main/datasets/BVN.mp4 +3 -0
- yolov5-code-main/datasets/classes.txt +2 -0
- yolov5-code-main/datasets/coco128-seg/LICENSE +674 -0
- yolov5-code-main/datasets/coco128-seg/README.txt +22 -0
- yolov5-code-main/datasets/coco128-seg/images/train2017/000000000009.jpg +0 -0
- yolov5-code-main/datasets/coco128-seg/images/train2017/000000000025.jpg +0 -0
- yolov5-code-main/datasets/coco128-seg/images/train2017/000000000030.jpg +0 -0
- yolov5-code-main/datasets/coco128-seg/images/train2017/000000000034.jpg +0 -0
- yolov5-code-main/datasets/coco128-seg/images/train2017/000000000036.jpg +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
yolov5-code-main/datasets/BVN.mp4 filter=lfs diff=lfs merge=lfs -text
|
yolov5-code-main/.idea/workspace.xml
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<project version="4">
|
| 3 |
+
<component name="AutoImportSettings">
|
| 4 |
+
<option name="autoReloadType" value="SELECTIVE" />
|
| 5 |
+
</component>
|
| 6 |
+
<component name="ChangeListManager">
|
| 7 |
+
<list default="true" id="1919daee-983c-4353-bb5a-adfb027e522b" name="更改" comment="" />
|
| 8 |
+
<option name="SHOW_DIALOG" value="false" />
|
| 9 |
+
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
| 10 |
+
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
| 11 |
+
<option name="LAST_RESOLUTION" value="IGNORE" />
|
| 12 |
+
</component>
|
| 13 |
+
<component name="MarkdownSettingsMigration">
|
| 14 |
+
<option name="stateVersion" value="1" />
|
| 15 |
+
</component>
|
| 16 |
+
<component name="ProjectId" id="2PdXlUMoTvRHx6ZeIE016Tr6fbO" />
|
| 17 |
+
<component name="ProjectViewState">
|
| 18 |
+
<option name="hideEmptyMiddlePackages" value="true" />
|
| 19 |
+
<option name="showLibraryContents" value="true" />
|
| 20 |
+
</component>
|
| 21 |
+
<component name="PropertiesComponent">{
|
| 22 |
+
"keyToString": {
|
| 23 |
+
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
| 24 |
+
"RunOnceActivity.ShowReadmeOnStart": "true",
|
| 25 |
+
"settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable"
|
| 26 |
+
}
|
| 27 |
+
}</component>
|
| 28 |
+
<component name="RunManager" selected="Python.gradio_demo">
|
| 29 |
+
<configuration name="检测平台" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
| 30 |
+
<module name="yolov5-code-main" />
|
| 31 |
+
<option name="INTERPRETER_OPTIONS" value="" />
|
| 32 |
+
<option name="PARENT_ENVS" value="true" />
|
| 33 |
+
<envs>
|
| 34 |
+
<env name="PYTHONUNBUFFERED" value="1" />
|
| 35 |
+
</envs>
|
| 36 |
+
<option name="SDK_HOME" value="" />
|
| 37 |
+
<option name="WORKING_DIRECTORY" value="E:/BBX/Document/pytorch/息肉病变检测" />
|
| 38 |
+
<option name="IS_MODULE_SDK" value="false" />
|
| 39 |
+
<option name="ADD_CONTENT_ROOTS" value="true" />
|
| 40 |
+
<option name="ADD_SOURCE_ROOTS" value="true" />
|
| 41 |
+
<option name="SCRIPT_NAME" value="E:/BBX/Document/pytorch/息肉病变检测/检测平台.py" />
|
| 42 |
+
<option name="PARAMETERS" value="" />
|
| 43 |
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
| 44 |
+
<option name="EMULATE_TERMINAL" value="false" />
|
| 45 |
+
<option name="MODULE_MODE" value="false" />
|
| 46 |
+
<option name="REDIRECT_INPUT" value="false" />
|
| 47 |
+
<option name="INPUT_FILE" value="" />
|
| 48 |
+
<method v="2" />
|
| 49 |
+
</configuration>
|
| 50 |
+
<configuration name="export" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
| 51 |
+
<module name="yolov5-code-main" />
|
| 52 |
+
<option name="INTERPRETER_OPTIONS" value="" />
|
| 53 |
+
<option name="PARENT_ENVS" value="true" />
|
| 54 |
+
<envs>
|
| 55 |
+
<env name="PYTHONUNBUFFERED" value="1" />
|
| 56 |
+
</envs>
|
| 57 |
+
<option name="SDK_HOME" value="" />
|
| 58 |
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../yolov5-master" />
|
| 59 |
+
<option name="IS_MODULE_SDK" value="false" />
|
| 60 |
+
<option name="ADD_CONTENT_ROOTS" value="true" />
|
| 61 |
+
<option name="ADD_SOURCE_ROOTS" value="true" />
|
| 62 |
+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/../yolov5-master/export.py" />
|
| 63 |
+
<option name="PARAMETERS" value="" />
|
| 64 |
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
| 65 |
+
<option name="EMULATE_TERMINAL" value="false" />
|
| 66 |
+
<option name="MODULE_MODE" value="false" />
|
| 67 |
+
<option name="REDIRECT_INPUT" value="false" />
|
| 68 |
+
<option name="INPUT_FILE" value="" />
|
| 69 |
+
<method v="2" />
|
| 70 |
+
</configuration>
|
| 71 |
+
<configuration name="gradio_demo" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
| 72 |
+
<module name="yolov5-code-main" />
|
| 73 |
+
<option name="INTERPRETER_OPTIONS" value="" />
|
| 74 |
+
<option name="PARENT_ENVS" value="true" />
|
| 75 |
+
<envs>
|
| 76 |
+
<env name="PYTHONUNBUFFERED" value="1" />
|
| 77 |
+
</envs>
|
| 78 |
+
<option name="SDK_HOME" value="" />
|
| 79 |
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
| 80 |
+
<option name="IS_MODULE_SDK" value="true" />
|
| 81 |
+
<option name="ADD_CONTENT_ROOTS" value="true" />
|
| 82 |
+
<option name="ADD_SOURCE_ROOTS" value="true" />
|
| 83 |
+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/gradio_demo.py" />
|
| 84 |
+
<option name="PARAMETERS" value="" />
|
| 85 |
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
| 86 |
+
<option name="EMULATE_TERMINAL" value="false" />
|
| 87 |
+
<option name="MODULE_MODE" value="false" />
|
| 88 |
+
<option name="REDIRECT_INPUT" value="false" />
|
| 89 |
+
<option name="INPUT_FILE" value="" />
|
| 90 |
+
<method v="2" />
|
| 91 |
+
</configuration>
|
| 92 |
+
<configuration name="train (1)" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
| 93 |
+
<module name="yolov5-code-main" />
|
| 94 |
+
<option name="INTERPRETER_OPTIONS" value="" />
|
| 95 |
+
<option name="PARENT_ENVS" value="true" />
|
| 96 |
+
<envs>
|
| 97 |
+
<env name="PYTHONUNBUFFERED" value="1" />
|
| 98 |
+
</envs>
|
| 99 |
+
<option name="SDK_HOME" value="" />
|
| 100 |
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
| 101 |
+
<option name="IS_MODULE_SDK" value="true" />
|
| 102 |
+
<option name="ADD_CONTENT_ROOTS" value="true" />
|
| 103 |
+
<option name="ADD_SOURCE_ROOTS" value="true" />
|
| 104 |
+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/train.py" />
|
| 105 |
+
<option name="PARAMETERS" value="" />
|
| 106 |
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
| 107 |
+
<option name="EMULATE_TERMINAL" value="false" />
|
| 108 |
+
<option name="MODULE_MODE" value="false" />
|
| 109 |
+
<option name="REDIRECT_INPUT" value="false" />
|
| 110 |
+
<option name="INPUT_FILE" value="" />
|
| 111 |
+
<method v="2" />
|
| 112 |
+
</configuration>
|
| 113 |
+
<configuration name="train" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
| 114 |
+
<module name="yolov5-code-main" />
|
| 115 |
+
<option name="INTERPRETER_OPTIONS" value="" />
|
| 116 |
+
<option name="PARENT_ENVS" value="true" />
|
| 117 |
+
<envs>
|
| 118 |
+
<env name="PYTHONUNBUFFERED" value="1" />
|
| 119 |
+
</envs>
|
| 120 |
+
<option name="SDK_HOME" value="" />
|
| 121 |
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/segment" />
|
| 122 |
+
<option name="IS_MODULE_SDK" value="true" />
|
| 123 |
+
<option name="ADD_CONTENT_ROOTS" value="true" />
|
| 124 |
+
<option name="ADD_SOURCE_ROOTS" value="true" />
|
| 125 |
+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/segment/train.py" />
|
| 126 |
+
<option name="PARAMETERS" value="" />
|
| 127 |
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
| 128 |
+
<option name="EMULATE_TERMINAL" value="false" />
|
| 129 |
+
<option name="MODULE_MODE" value="false" />
|
| 130 |
+
<option name="REDIRECT_INPUT" value="false" />
|
| 131 |
+
<option name="INPUT_FILE" value="" />
|
| 132 |
+
<method v="2" />
|
| 133 |
+
</configuration>
|
| 134 |
+
<recent_temporary>
|
| 135 |
+
<list>
|
| 136 |
+
<item itemvalue="Python.gradio_demo" />
|
| 137 |
+
<item itemvalue="Python.检测平台" />
|
| 138 |
+
<item itemvalue="Python.train (1)" />
|
| 139 |
+
<item itemvalue="Python.export" />
|
| 140 |
+
<item itemvalue="Python.train" />
|
| 141 |
+
</list>
|
| 142 |
+
</recent_temporary>
|
| 143 |
+
</component>
|
| 144 |
+
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
|
| 145 |
+
<component name="TaskManager">
|
| 146 |
+
<task active="true" id="Default" summary="默认任务">
|
| 147 |
+
<changelist id="1919daee-983c-4353-bb5a-adfb027e522b" name="更改" comment="" />
|
| 148 |
+
<created>1683788084133</created>
|
| 149 |
+
<option name="number" value="Default" />
|
| 150 |
+
<option name="presentableId" value="Default" />
|
| 151 |
+
<updated>1683788084133</updated>
|
| 152 |
+
</task>
|
| 153 |
+
<servers />
|
| 154 |
+
</component>
|
| 155 |
+
</project>
|
yolov5-code-main/CITATION.cff
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cff-version: 1.2.0
|
| 2 |
+
preferred-citation:
|
| 3 |
+
type: software
|
| 4 |
+
message: If you use YOLOv5, please cite it as below.
|
| 5 |
+
authors:
|
| 6 |
+
- family-names: Jocher
|
| 7 |
+
given-names: Glenn
|
| 8 |
+
orcid: "https://orcid.org/0000-0001-5950-6979"
|
| 9 |
+
title: "YOLOv5 by Ultralytics"
|
| 10 |
+
version: 7.0
|
| 11 |
+
doi: 10.5281/zenodo.3908559
|
| 12 |
+
date-released: 2020-5-29
|
| 13 |
+
license: GPL-3.0
|
| 14 |
+
url: "https://github.com/ultralytics/yolov5"
|
yolov5-code-main/LICENSE
ADDED
|
@@ -0,0 +1,674 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
GNU GENERAL PUBLIC LICENSE
|
| 2 |
+
Version 3, 29 June 2007
|
| 3 |
+
|
| 4 |
+
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
| 5 |
+
Everyone is permitted to copy and distribute verbatim copies
|
| 6 |
+
of this license document, but changing it is not allowed.
|
| 7 |
+
|
| 8 |
+
Preamble
|
| 9 |
+
|
| 10 |
+
The GNU General Public License is a free, copyleft license for
|
| 11 |
+
software and other kinds of works.
|
| 12 |
+
|
| 13 |
+
The licenses for most software and other practical works are designed
|
| 14 |
+
to take away your freedom to share and change the works. By contrast,
|
| 15 |
+
the GNU General Public License is intended to guarantee your freedom to
|
| 16 |
+
share and change all versions of a program--to make sure it remains free
|
| 17 |
+
software for all its users. We, the Free Software Foundation, use the
|
| 18 |
+
GNU General Public License for most of our software; it applies also to
|
| 19 |
+
any other work released this way by its authors. You can apply it to
|
| 20 |
+
your programs, too.
|
| 21 |
+
|
| 22 |
+
When we speak of free software, we are referring to freedom, not
|
| 23 |
+
price. Our General Public Licenses are designed to make sure that you
|
| 24 |
+
have the freedom to distribute copies of free software (and charge for
|
| 25 |
+
them if you wish), that you receive source code or can get it if you
|
| 26 |
+
want it, that you can change the software or use pieces of it in new
|
| 27 |
+
free programs, and that you know you can do these things.
|
| 28 |
+
|
| 29 |
+
To protect your rights, we need to prevent others from denying you
|
| 30 |
+
these rights or asking you to surrender the rights. Therefore, you have
|
| 31 |
+
certain responsibilities if you distribute copies of the software, or if
|
| 32 |
+
you modify it: responsibilities to respect the freedom of others.
|
| 33 |
+
|
| 34 |
+
For example, if you distribute copies of such a program, whether
|
| 35 |
+
gratis or for a fee, you must pass on to the recipients the same
|
| 36 |
+
freedoms that you received. You must make sure that they, too, receive
|
| 37 |
+
or can get the source code. And you must show them these terms so they
|
| 38 |
+
know their rights.
|
| 39 |
+
|
| 40 |
+
Developers that use the GNU GPL protect your rights with two steps:
|
| 41 |
+
(1) assert copyright on the software, and (2) offer you this License
|
| 42 |
+
giving you legal permission to copy, distribute and/or modify it.
|
| 43 |
+
|
| 44 |
+
For the developers' and authors' protection, the GPL clearly explains
|
| 45 |
+
that there is no warranty for this free software. For both users' and
|
| 46 |
+
authors' sake, the GPL requires that modified versions be marked as
|
| 47 |
+
changed, so that their problems will not be attributed erroneously to
|
| 48 |
+
authors of previous versions.
|
| 49 |
+
|
| 50 |
+
Some devices are designed to deny users access to install or run
|
| 51 |
+
modified versions of the software inside them, although the manufacturer
|
| 52 |
+
can do so. This is fundamentally incompatible with the aim of
|
| 53 |
+
protecting users' freedom to change the software. The systematic
|
| 54 |
+
pattern of such abuse occurs in the area of products for individuals to
|
| 55 |
+
use, which is precisely where it is most unacceptable. Therefore, we
|
| 56 |
+
have designed this version of the GPL to prohibit the practice for those
|
| 57 |
+
products. If such problems arise substantially in other domains, we
|
| 58 |
+
stand ready to extend this provision to those domains in future versions
|
| 59 |
+
of the GPL, as needed to protect the freedom of users.
|
| 60 |
+
|
| 61 |
+
Finally, every program is threatened constantly by software patents.
|
| 62 |
+
States should not allow patents to restrict development and use of
|
| 63 |
+
software on general-purpose computers, but in those that do, we wish to
|
| 64 |
+
avoid the special danger that patents applied to a free program could
|
| 65 |
+
make it effectively proprietary. To prevent this, the GPL assures that
|
| 66 |
+
patents cannot be used to render the program non-free.
|
| 67 |
+
|
| 68 |
+
The precise terms and conditions for copying, distribution and
|
| 69 |
+
modification follow.
|
| 70 |
+
|
| 71 |
+
TERMS AND CONDITIONS
|
| 72 |
+
|
| 73 |
+
0. Definitions.
|
| 74 |
+
|
| 75 |
+
"This License" refers to version 3 of the GNU General Public License.
|
| 76 |
+
|
| 77 |
+
"Copyright" also means copyright-like laws that apply to other kinds of
|
| 78 |
+
works, such as semiconductor masks.
|
| 79 |
+
|
| 80 |
+
"The Program" refers to any copyrightable work licensed under this
|
| 81 |
+
License. Each licensee is addressed as "you". "Licensees" and
|
| 82 |
+
"recipients" may be individuals or organizations.
|
| 83 |
+
|
| 84 |
+
To "modify" a work means to copy from or adapt all or part of the work
|
| 85 |
+
in a fashion requiring copyright permission, other than the making of an
|
| 86 |
+
exact copy. The resulting work is called a "modified version" of the
|
| 87 |
+
earlier work or a work "based on" the earlier work.
|
| 88 |
+
|
| 89 |
+
A "covered work" means either the unmodified Program or a work based
|
| 90 |
+
on the Program.
|
| 91 |
+
|
| 92 |
+
To "propagate" a work means to do anything with it that, without
|
| 93 |
+
permission, would make you directly or secondarily liable for
|
| 94 |
+
infringement under applicable copyright law, except executing it on a
|
| 95 |
+
computer or modifying a private copy. Propagation includes copying,
|
| 96 |
+
distribution (with or without modification), making available to the
|
| 97 |
+
public, and in some countries other activities as well.
|
| 98 |
+
|
| 99 |
+
To "convey" a work means any kind of propagation that enables other
|
| 100 |
+
parties to make or receive copies. Mere interaction with a user through
|
| 101 |
+
a computer network, with no transfer of a copy, is not conveying.
|
| 102 |
+
|
| 103 |
+
An interactive user interface displays "Appropriate Legal Notices"
|
| 104 |
+
to the extent that it includes a convenient and prominently visible
|
| 105 |
+
feature that (1) displays an appropriate copyright notice, and (2)
|
| 106 |
+
tells the user that there is no warranty for the work (except to the
|
| 107 |
+
extent that warranties are provided), that licensees may convey the
|
| 108 |
+
work under this License, and how to view a copy of this License. If
|
| 109 |
+
the interface presents a list of user commands or options, such as a
|
| 110 |
+
menu, a prominent item in the list meets this criterion.
|
| 111 |
+
|
| 112 |
+
1. Source Code.
|
| 113 |
+
|
| 114 |
+
The "source code" for a work means the preferred form of the work
|
| 115 |
+
for making modifications to it. "Object code" means any non-source
|
| 116 |
+
form of a work.
|
| 117 |
+
|
| 118 |
+
A "Standard Interface" means an interface that either is an official
|
| 119 |
+
standard defined by a recognized standards body, or, in the case of
|
| 120 |
+
interfaces specified for a particular programming language, one that
|
| 121 |
+
is widely used among developers working in that language.
|
| 122 |
+
|
| 123 |
+
The "System Libraries" of an executable work include anything, other
|
| 124 |
+
than the work as a whole, that (a) is included in the normal form of
|
| 125 |
+
packaging a Major Component, but which is not part of that Major
|
| 126 |
+
Component, and (b) serves only to enable use of the work with that
|
| 127 |
+
Major Component, or to implement a Standard Interface for which an
|
| 128 |
+
implementation is available to the public in source code form. A
|
| 129 |
+
"Major Component", in this context, means a major essential component
|
| 130 |
+
(kernel, window system, and so on) of the specific operating system
|
| 131 |
+
(if any) on which the executable work runs, or a compiler used to
|
| 132 |
+
produce the work, or an object code interpreter used to run it.
|
| 133 |
+
|
| 134 |
+
The "Corresponding Source" for a work in object code form means all
|
| 135 |
+
the source code needed to generate, install, and (for an executable
|
| 136 |
+
work) run the object code and to modify the work, including scripts to
|
| 137 |
+
control those activities. However, it does not include the work's
|
| 138 |
+
System Libraries, or general-purpose tools or generally available free
|
| 139 |
+
programs which are used unmodified in performing those activities but
|
| 140 |
+
which are not part of the work. For example, Corresponding Source
|
| 141 |
+
includes interface definition files associated with source files for
|
| 142 |
+
the work, and the source code for shared libraries and dynamically
|
| 143 |
+
linked subprograms that the work is specifically designed to require,
|
| 144 |
+
such as by intimate data communication or control flow between those
|
| 145 |
+
subprograms and other parts of the work.
|
| 146 |
+
|
| 147 |
+
The Corresponding Source need not include anything that users
|
| 148 |
+
can regenerate automatically from other parts of the Corresponding
|
| 149 |
+
Source.
|
| 150 |
+
|
| 151 |
+
The Corresponding Source for a work in source code form is that
|
| 152 |
+
same work.
|
| 153 |
+
|
| 154 |
+
2. Basic Permissions.
|
| 155 |
+
|
| 156 |
+
All rights granted under this License are granted for the term of
|
| 157 |
+
copyright on the Program, and are irrevocable provided the stated
|
| 158 |
+
conditions are met. This License explicitly affirms your unlimited
|
| 159 |
+
permission to run the unmodified Program. The output from running a
|
| 160 |
+
covered work is covered by this License only if the output, given its
|
| 161 |
+
content, constitutes a covered work. This License acknowledges your
|
| 162 |
+
rights of fair use or other equivalent, as provided by copyright law.
|
| 163 |
+
|
| 164 |
+
You may make, run and propagate covered works that you do not
|
| 165 |
+
convey, without conditions so long as your license otherwise remains
|
| 166 |
+
in force. You may convey covered works to others for the sole purpose
|
| 167 |
+
of having them make modifications exclusively for you, or provide you
|
| 168 |
+
with facilities for running those works, provided that you comply with
|
| 169 |
+
the terms of this License in conveying all material for which you do
|
| 170 |
+
not control copyright. Those thus making or running the covered works
|
| 171 |
+
for you must do so exclusively on your behalf, under your direction
|
| 172 |
+
and control, on terms that prohibit them from making any copies of
|
| 173 |
+
your copyrighted material outside their relationship with you.
|
| 174 |
+
|
| 175 |
+
Conveying under any other circumstances is permitted solely under
|
| 176 |
+
the conditions stated below. Sublicensing is not allowed; section 10
|
| 177 |
+
makes it unnecessary.
|
| 178 |
+
|
| 179 |
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
| 180 |
+
|
| 181 |
+
No covered work shall be deemed part of an effective technological
|
| 182 |
+
measure under any applicable law fulfilling obligations under article
|
| 183 |
+
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
| 184 |
+
similar laws prohibiting or restricting circumvention of such
|
| 185 |
+
measures.
|
| 186 |
+
|
| 187 |
+
When you convey a covered work, you waive any legal power to forbid
|
| 188 |
+
circumvention of technological measures to the extent such circumvention
|
| 189 |
+
is effected by exercising rights under this License with respect to
|
| 190 |
+
the covered work, and you disclaim any intention to limit operation or
|
| 191 |
+
modification of the work as a means of enforcing, against the work's
|
| 192 |
+
users, your or third parties' legal rights to forbid circumvention of
|
| 193 |
+
technological measures.
|
| 194 |
+
|
| 195 |
+
4. Conveying Verbatim Copies.
|
| 196 |
+
|
| 197 |
+
You may convey verbatim copies of the Program's source code as you
|
| 198 |
+
receive it, in any medium, provided that you conspicuously and
|
| 199 |
+
appropriately publish on each copy an appropriate copyright notice;
|
| 200 |
+
keep intact all notices stating that this License and any
|
| 201 |
+
non-permissive terms added in accord with section 7 apply to the code;
|
| 202 |
+
keep intact all notices of the absence of any warranty; and give all
|
| 203 |
+
recipients a copy of this License along with the Program.
|
| 204 |
+
|
| 205 |
+
You may charge any price or no price for each copy that you convey,
|
| 206 |
+
and you may offer support or warranty protection for a fee.
|
| 207 |
+
|
| 208 |
+
5. Conveying Modified Source Versions.
|
| 209 |
+
|
| 210 |
+
You may convey a work based on the Program, or the modifications to
|
| 211 |
+
produce it from the Program, in the form of source code under the
|
| 212 |
+
terms of section 4, provided that you also meet all of these conditions:
|
| 213 |
+
|
| 214 |
+
a) The work must carry prominent notices stating that you modified
|
| 215 |
+
it, and giving a relevant date.
|
| 216 |
+
|
| 217 |
+
b) The work must carry prominent notices stating that it is
|
| 218 |
+
released under this License and any conditions added under section
|
| 219 |
+
7. This requirement modifies the requirement in section 4 to
|
| 220 |
+
"keep intact all notices".
|
| 221 |
+
|
| 222 |
+
c) You must license the entire work, as a whole, under this
|
| 223 |
+
License to anyone who comes into possession of a copy. This
|
| 224 |
+
License will therefore apply, along with any applicable section 7
|
| 225 |
+
additional terms, to the whole of the work, and all its parts,
|
| 226 |
+
regardless of how they are packaged. This License gives no
|
| 227 |
+
permission to license the work in any other way, but it does not
|
| 228 |
+
invalidate such permission if you have separately received it.
|
| 229 |
+
|
| 230 |
+
d) If the work has interactive user interfaces, each must display
|
| 231 |
+
Appropriate Legal Notices; however, if the Program has interactive
|
| 232 |
+
interfaces that do not display Appropriate Legal Notices, your
|
| 233 |
+
work need not make them do so.
|
| 234 |
+
|
| 235 |
+
A compilation of a covered work with other separate and independent
|
| 236 |
+
works, which are not by their nature extensions of the covered work,
|
| 237 |
+
and which are not combined with it such as to form a larger program,
|
| 238 |
+
in or on a volume of a storage or distribution medium, is called an
|
| 239 |
+
"aggregate" if the compilation and its resulting copyright are not
|
| 240 |
+
used to limit the access or legal rights of the compilation's users
|
| 241 |
+
beyond what the individual works permit. Inclusion of a covered work
|
| 242 |
+
in an aggregate does not cause this License to apply to the other
|
| 243 |
+
parts of the aggregate.
|
| 244 |
+
|
| 245 |
+
6. Conveying Non-Source Forms.
|
| 246 |
+
|
| 247 |
+
You may convey a covered work in object code form under the terms
|
| 248 |
+
of sections 4 and 5, provided that you also convey the
|
| 249 |
+
machine-readable Corresponding Source under the terms of this License,
|
| 250 |
+
in one of these ways:
|
| 251 |
+
|
| 252 |
+
a) Convey the object code in, or embodied in, a physical product
|
| 253 |
+
(including a physical distribution medium), accompanied by the
|
| 254 |
+
Corresponding Source fixed on a durable physical medium
|
| 255 |
+
customarily used for software interchange.
|
| 256 |
+
|
| 257 |
+
b) Convey the object code in, or embodied in, a physical product
|
| 258 |
+
(including a physical distribution medium), accompanied by a
|
| 259 |
+
written offer, valid for at least three years and valid for as
|
| 260 |
+
long as you offer spare parts or customer support for that product
|
| 261 |
+
model, to give anyone who possesses the object code either (1) a
|
| 262 |
+
copy of the Corresponding Source for all the software in the
|
| 263 |
+
product that is covered by this License, on a durable physical
|
| 264 |
+
medium customarily used for software interchange, for a price no
|
| 265 |
+
more than your reasonable cost of physically performing this
|
| 266 |
+
conveying of source, or (2) access to copy the
|
| 267 |
+
Corresponding Source from a network server at no charge.
|
| 268 |
+
|
| 269 |
+
c) Convey individual copies of the object code with a copy of the
|
| 270 |
+
written offer to provide the Corresponding Source. This
|
| 271 |
+
alternative is allowed only occasionally and noncommercially, and
|
| 272 |
+
only if you received the object code with such an offer, in accord
|
| 273 |
+
with subsection 6b.
|
| 274 |
+
|
| 275 |
+
d) Convey the object code by offering access from a designated
|
| 276 |
+
place (gratis or for a charge), and offer equivalent access to the
|
| 277 |
+
Corresponding Source in the same way through the same place at no
|
| 278 |
+
further charge. You need not require recipients to copy the
|
| 279 |
+
Corresponding Source along with the object code. If the place to
|
| 280 |
+
copy the object code is a network server, the Corresponding Source
|
| 281 |
+
may be on a different server (operated by you or a third party)
|
| 282 |
+
that supports equivalent copying facilities, provided you maintain
|
| 283 |
+
clear directions next to the object code saying where to find the
|
| 284 |
+
Corresponding Source. Regardless of what server hosts the
|
| 285 |
+
Corresponding Source, you remain obligated to ensure that it is
|
| 286 |
+
available for as long as needed to satisfy these requirements.
|
| 287 |
+
|
| 288 |
+
e) Convey the object code using peer-to-peer transmission, provided
|
| 289 |
+
you inform other peers where the object code and Corresponding
|
| 290 |
+
Source of the work are being offered to the general public at no
|
| 291 |
+
charge under subsection 6d.
|
| 292 |
+
|
| 293 |
+
A separable portion of the object code, whose source code is excluded
|
| 294 |
+
from the Corresponding Source as a System Library, need not be
|
| 295 |
+
included in conveying the object code work.
|
| 296 |
+
|
| 297 |
+
A "User Product" is either (1) a "consumer product", which means any
|
| 298 |
+
tangible personal property which is normally used for personal, family,
|
| 299 |
+
or household purposes, or (2) anything designed or sold for incorporation
|
| 300 |
+
into a dwelling. In determining whether a product is a consumer product,
|
| 301 |
+
doubtful cases shall be resolved in favor of coverage. For a particular
|
| 302 |
+
product received by a particular user, "normally used" refers to a
|
| 303 |
+
typical or common use of that class of product, regardless of the status
|
| 304 |
+
of the particular user or of the way in which the particular user
|
| 305 |
+
actually uses, or expects or is expected to use, the product. A product
|
| 306 |
+
is a consumer product regardless of whether the product has substantial
|
| 307 |
+
commercial, industrial or non-consumer uses, unless such uses represent
|
| 308 |
+
the only significant mode of use of the product.
|
| 309 |
+
|
| 310 |
+
"Installation Information" for a User Product means any methods,
|
| 311 |
+
procedures, authorization keys, or other information required to install
|
| 312 |
+
and execute modified versions of a covered work in that User Product from
|
| 313 |
+
a modified version of its Corresponding Source. The information must
|
| 314 |
+
suffice to ensure that the continued functioning of the modified object
|
| 315 |
+
code is in no case prevented or interfered with solely because
|
| 316 |
+
modification has been made.
|
| 317 |
+
|
| 318 |
+
If you convey an object code work under this section in, or with, or
|
| 319 |
+
specifically for use in, a User Product, and the conveying occurs as
|
| 320 |
+
part of a transaction in which the right of possession and use of the
|
| 321 |
+
User Product is transferred to the recipient in perpetuity or for a
|
| 322 |
+
fixed term (regardless of how the transaction is characterized), the
|
| 323 |
+
Corresponding Source conveyed under this section must be accompanied
|
| 324 |
+
by the Installation Information. But this requirement does not apply
|
| 325 |
+
if neither you nor any third party retains the ability to install
|
| 326 |
+
modified object code on the User Product (for example, the work has
|
| 327 |
+
been installed in ROM).
|
| 328 |
+
|
| 329 |
+
The requirement to provide Installation Information does not include a
|
| 330 |
+
requirement to continue to provide support service, warranty, or updates
|
| 331 |
+
for a work that has been modified or installed by the recipient, or for
|
| 332 |
+
the User Product in which it has been modified or installed. Access to a
|
| 333 |
+
network may be denied when the modification itself materially and
|
| 334 |
+
adversely affects the operation of the network or violates the rules and
|
| 335 |
+
protocols for communication across the network.
|
| 336 |
+
|
| 337 |
+
Corresponding Source conveyed, and Installation Information provided,
|
| 338 |
+
in accord with this section must be in a format that is publicly
|
| 339 |
+
documented (and with an implementation available to the public in
|
| 340 |
+
source code form), and must require no special password or key for
|
| 341 |
+
unpacking, reading or copying.
|
| 342 |
+
|
| 343 |
+
7. Additional Terms.
|
| 344 |
+
|
| 345 |
+
"Additional permissions" are terms that supplement the terms of this
|
| 346 |
+
License by making exceptions from one or more of its conditions.
|
| 347 |
+
Additional permissions that are applicable to the entire Program shall
|
| 348 |
+
be treated as though they were included in this License, to the extent
|
| 349 |
+
that they are valid under applicable law. If additional permissions
|
| 350 |
+
apply only to part of the Program, that part may be used separately
|
| 351 |
+
under those permissions, but the entire Program remains governed by
|
| 352 |
+
this License without regard to the additional permissions.
|
| 353 |
+
|
| 354 |
+
When you convey a copy of a covered work, you may at your option
|
| 355 |
+
remove any additional permissions from that copy, or from any part of
|
| 356 |
+
it. (Additional permissions may be written to require their own
|
| 357 |
+
removal in certain cases when you modify the work.) You may place
|
| 358 |
+
additional permissions on material, added by you to a covered work,
|
| 359 |
+
for which you have or can give appropriate copyright permission.
|
| 360 |
+
|
| 361 |
+
Notwithstanding any other provision of this License, for material you
|
| 362 |
+
add to a covered work, you may (if authorized by the copyright holders of
|
| 363 |
+
that material) supplement the terms of this License with terms:
|
| 364 |
+
|
| 365 |
+
a) Disclaiming warranty or limiting liability differently from the
|
| 366 |
+
terms of sections 15 and 16 of this License; or
|
| 367 |
+
|
| 368 |
+
b) Requiring preservation of specified reasonable legal notices or
|
| 369 |
+
author attributions in that material or in the Appropriate Legal
|
| 370 |
+
Notices displayed by works containing it; or
|
| 371 |
+
|
| 372 |
+
c) Prohibiting misrepresentation of the origin of that material, or
|
| 373 |
+
requiring that modified versions of such material be marked in
|
| 374 |
+
reasonable ways as different from the original version; or
|
| 375 |
+
|
| 376 |
+
d) Limiting the use for publicity purposes of names of licensors or
|
| 377 |
+
authors of the material; or
|
| 378 |
+
|
| 379 |
+
e) Declining to grant rights under trademark law for use of some
|
| 380 |
+
trade names, trademarks, or service marks; or
|
| 381 |
+
|
| 382 |
+
f) Requiring indemnification of licensors and authors of that
|
| 383 |
+
material by anyone who conveys the material (or modified versions of
|
| 384 |
+
it) with contractual assumptions of liability to the recipient, for
|
| 385 |
+
any liability that these contractual assumptions directly impose on
|
| 386 |
+
those licensors and authors.
|
| 387 |
+
|
| 388 |
+
All other non-permissive additional terms are considered "further
|
| 389 |
+
restrictions" within the meaning of section 10. If the Program as you
|
| 390 |
+
received it, or any part of it, contains a notice stating that it is
|
| 391 |
+
governed by this License along with a term that is a further
|
| 392 |
+
restriction, you may remove that term. If a license document contains
|
| 393 |
+
a further restriction but permits relicensing or conveying under this
|
| 394 |
+
License, you may add to a covered work material governed by the terms
|
| 395 |
+
of that license document, provided that the further restriction does
|
| 396 |
+
not survive such relicensing or conveying.
|
| 397 |
+
|
| 398 |
+
If you add terms to a covered work in accord with this section, you
|
| 399 |
+
must place, in the relevant source files, a statement of the
|
| 400 |
+
additional terms that apply to those files, or a notice indicating
|
| 401 |
+
where to find the applicable terms.
|
| 402 |
+
|
| 403 |
+
Additional terms, permissive or non-permissive, may be stated in the
|
| 404 |
+
form of a separately written license, or stated as exceptions;
|
| 405 |
+
the above requirements apply either way.
|
| 406 |
+
|
| 407 |
+
8. Termination.
|
| 408 |
+
|
| 409 |
+
You may not propagate or modify a covered work except as expressly
|
| 410 |
+
provided under this License. Any attempt otherwise to propagate or
|
| 411 |
+
modify it is void, and will automatically terminate your rights under
|
| 412 |
+
this License (including any patent licenses granted under the third
|
| 413 |
+
paragraph of section 11).
|
| 414 |
+
|
| 415 |
+
However, if you cease all violation of this License, then your
|
| 416 |
+
license from a particular copyright holder is reinstated (a)
|
| 417 |
+
provisionally, unless and until the copyright holder explicitly and
|
| 418 |
+
finally terminates your license, and (b) permanently, if the copyright
|
| 419 |
+
holder fails to notify you of the violation by some reasonable means
|
| 420 |
+
prior to 60 days after the cessation.
|
| 421 |
+
|
| 422 |
+
Moreover, your license from a particular copyright holder is
|
| 423 |
+
reinstated permanently if the copyright holder notifies you of the
|
| 424 |
+
violation by some reasonable means, this is the first time you have
|
| 425 |
+
received notice of violation of this License (for any work) from that
|
| 426 |
+
copyright holder, and you cure the violation prior to 30 days after
|
| 427 |
+
your receipt of the notice.
|
| 428 |
+
|
| 429 |
+
Termination of your rights under this section does not terminate the
|
| 430 |
+
licenses of parties who have received copies or rights from you under
|
| 431 |
+
this License. If your rights have been terminated and not permanently
|
| 432 |
+
reinstated, you do not qualify to receive new licenses for the same
|
| 433 |
+
material under section 10.
|
| 434 |
+
|
| 435 |
+
9. Acceptance Not Required for Having Copies.
|
| 436 |
+
|
| 437 |
+
You are not required to accept this License in order to receive or
|
| 438 |
+
run a copy of the Program. Ancillary propagation of a covered work
|
| 439 |
+
occurring solely as a consequence of using peer-to-peer transmission
|
| 440 |
+
to receive a copy likewise does not require acceptance. However,
|
| 441 |
+
nothing other than this License grants you permission to propagate or
|
| 442 |
+
modify any covered work. These actions infringe copyright if you do
|
| 443 |
+
not accept this License. Therefore, by modifying or propagating a
|
| 444 |
+
covered work, you indicate your acceptance of this License to do so.
|
| 445 |
+
|
| 446 |
+
10. Automatic Licensing of Downstream Recipients.
|
| 447 |
+
|
| 448 |
+
Each time you convey a covered work, the recipient automatically
|
| 449 |
+
receives a license from the original licensors, to run, modify and
|
| 450 |
+
propagate that work, subject to this License. You are not responsible
|
| 451 |
+
for enforcing compliance by third parties with this License.
|
| 452 |
+
|
| 453 |
+
An "entity transaction" is a transaction transferring control of an
|
| 454 |
+
organization, or substantially all assets of one, or subdividing an
|
| 455 |
+
organization, or merging organizations. If propagation of a covered
|
| 456 |
+
work results from an entity transaction, each party to that
|
| 457 |
+
transaction who receives a copy of the work also receives whatever
|
| 458 |
+
licenses to the work the party's predecessor in interest had or could
|
| 459 |
+
give under the previous paragraph, plus a right to possession of the
|
| 460 |
+
Corresponding Source of the work from the predecessor in interest, if
|
| 461 |
+
the predecessor has it or can get it with reasonable efforts.
|
| 462 |
+
|
| 463 |
+
You may not impose any further restrictions on the exercise of the
|
| 464 |
+
rights granted or affirmed under this License. For example, you may
|
| 465 |
+
not impose a license fee, royalty, or other charge for exercise of
|
| 466 |
+
rights granted under this License, and you may not initiate litigation
|
| 467 |
+
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
| 468 |
+
any patent claim is infringed by making, using, selling, offering for
|
| 469 |
+
sale, or importing the Program or any portion of it.
|
| 470 |
+
|
| 471 |
+
11. Patents.
|
| 472 |
+
|
| 473 |
+
A "contributor" is a copyright holder who authorizes use under this
|
| 474 |
+
License of the Program or a work on which the Program is based. The
|
| 475 |
+
work thus licensed is called the contributor's "contributor version".
|
| 476 |
+
|
| 477 |
+
A contributor's "essential patent claims" are all patent claims
|
| 478 |
+
owned or controlled by the contributor, whether already acquired or
|
| 479 |
+
hereafter acquired, that would be infringed by some manner, permitted
|
| 480 |
+
by this License, of making, using, or selling its contributor version,
|
| 481 |
+
but do not include claims that would be infringed only as a
|
| 482 |
+
consequence of further modification of the contributor version. For
|
| 483 |
+
purposes of this definition, "control" includes the right to grant
|
| 484 |
+
patent sublicenses in a manner consistent with the requirements of
|
| 485 |
+
this License.
|
| 486 |
+
|
| 487 |
+
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
| 488 |
+
patent license under the contributor's essential patent claims, to
|
| 489 |
+
make, use, sell, offer for sale, import and otherwise run, modify and
|
| 490 |
+
propagate the contents of its contributor version.
|
| 491 |
+
|
| 492 |
+
In the following three paragraphs, a "patent license" is any express
|
| 493 |
+
agreement or commitment, however denominated, not to enforce a patent
|
| 494 |
+
(such as an express permission to practice a patent or covenant not to
|
| 495 |
+
sue for patent infringement). To "grant" such a patent license to a
|
| 496 |
+
party means to make such an agreement or commitment not to enforce a
|
| 497 |
+
patent against the party.
|
| 498 |
+
|
| 499 |
+
If you convey a covered work, knowingly relying on a patent license,
|
| 500 |
+
and the Corresponding Source of the work is not available for anyone
|
| 501 |
+
to copy, free of charge and under the terms of this License, through a
|
| 502 |
+
publicly available network server or other readily accessible means,
|
| 503 |
+
then you must either (1) cause the Corresponding Source to be so
|
| 504 |
+
available, or (2) arrange to deprive yourself of the benefit of the
|
| 505 |
+
patent license for this particular work, or (3) arrange, in a manner
|
| 506 |
+
consistent with the requirements of this License, to extend the patent
|
| 507 |
+
license to downstream recipients. "Knowingly relying" means you have
|
| 508 |
+
actual knowledge that, but for the patent license, your conveying the
|
| 509 |
+
covered work in a country, or your recipient's use of the covered work
|
| 510 |
+
in a country, would infringe one or more identifiable patents in that
|
| 511 |
+
country that you have reason to believe are valid.
|
| 512 |
+
|
| 513 |
+
If, pursuant to or in connection with a single transaction or
|
| 514 |
+
arrangement, you convey, or propagate by procuring conveyance of, a
|
| 515 |
+
covered work, and grant a patent license to some of the parties
|
| 516 |
+
receiving the covered work authorizing them to use, propagate, modify
|
| 517 |
+
or convey a specific copy of the covered work, then the patent license
|
| 518 |
+
you grant is automatically extended to all recipients of the covered
|
| 519 |
+
work and works based on it.
|
| 520 |
+
|
| 521 |
+
A patent license is "discriminatory" if it does not include within
|
| 522 |
+
the scope of its coverage, prohibits the exercise of, or is
|
| 523 |
+
conditioned on the non-exercise of one or more of the rights that are
|
| 524 |
+
specifically granted under this License. You may not convey a covered
|
| 525 |
+
work if you are a party to an arrangement with a third party that is
|
| 526 |
+
in the business of distributing software, under which you make payment
|
| 527 |
+
to the third party based on the extent of your activity of conveying
|
| 528 |
+
the work, and under which the third party grants, to any of the
|
| 529 |
+
parties who would receive the covered work from you, a discriminatory
|
| 530 |
+
patent license (a) in connection with copies of the covered work
|
| 531 |
+
conveyed by you (or copies made from those copies), or (b) primarily
|
| 532 |
+
for and in connection with specific products or compilations that
|
| 533 |
+
contain the covered work, unless you entered into that arrangement,
|
| 534 |
+
or that patent license was granted, prior to 28 March 2007.
|
| 535 |
+
|
| 536 |
+
Nothing in this License shall be construed as excluding or limiting
|
| 537 |
+
any implied license or other defenses to infringement that may
|
| 538 |
+
otherwise be available to you under applicable patent law.
|
| 539 |
+
|
| 540 |
+
12. No Surrender of Others' Freedom.
|
| 541 |
+
|
| 542 |
+
If conditions are imposed on you (whether by court order, agreement or
|
| 543 |
+
otherwise) that contradict the conditions of this License, they do not
|
| 544 |
+
excuse you from the conditions of this License. If you cannot convey a
|
| 545 |
+
covered work so as to satisfy simultaneously your obligations under this
|
| 546 |
+
License and any other pertinent obligations, then as a consequence you may
|
| 547 |
+
not convey it at all. For example, if you agree to terms that obligate you
|
| 548 |
+
to collect a royalty for further conveying from those to whom you convey
|
| 549 |
+
the Program, the only way you could satisfy both those terms and this
|
| 550 |
+
License would be to refrain entirely from conveying the Program.
|
| 551 |
+
|
| 552 |
+
13. Use with the GNU Affero General Public License.
|
| 553 |
+
|
| 554 |
+
Notwithstanding any other provision of this License, you have
|
| 555 |
+
permission to link or combine any covered work with a work licensed
|
| 556 |
+
under version 3 of the GNU Affero General Public License into a single
|
| 557 |
+
combined work, and to convey the resulting work. The terms of this
|
| 558 |
+
License will continue to apply to the part which is the covered work,
|
| 559 |
+
but the special requirements of the GNU Affero General Public License,
|
| 560 |
+
section 13, concerning interaction through a network will apply to the
|
| 561 |
+
combination as such.
|
| 562 |
+
|
| 563 |
+
14. Revised Versions of this License.
|
| 564 |
+
|
| 565 |
+
The Free Software Foundation may publish revised and/or new versions of
|
| 566 |
+
the GNU General Public License from time to time. Such new versions will
|
| 567 |
+
be similar in spirit to the present version, but may differ in detail to
|
| 568 |
+
address new problems or concerns.
|
| 569 |
+
|
| 570 |
+
Each version is given a distinguishing version number. If the
|
| 571 |
+
Program specifies that a certain numbered version of the GNU General
|
| 572 |
+
Public License "or any later version" applies to it, you have the
|
| 573 |
+
option of following the terms and conditions either of that numbered
|
| 574 |
+
version or of any later version published by the Free Software
|
| 575 |
+
Foundation. If the Program does not specify a version number of the
|
| 576 |
+
GNU General Public License, you may choose any version ever published
|
| 577 |
+
by the Free Software Foundation.
|
| 578 |
+
|
| 579 |
+
If the Program specifies that a proxy can decide which future
|
| 580 |
+
versions of the GNU General Public License can be used, that proxy's
|
| 581 |
+
public statement of acceptance of a version permanently authorizes you
|
| 582 |
+
to choose that version for the Program.
|
| 583 |
+
|
| 584 |
+
Later license versions may give you additional or different
|
| 585 |
+
permissions. However, no additional obligations are imposed on any
|
| 586 |
+
author or copyright holder as a result of your choosing to follow a
|
| 587 |
+
later version.
|
| 588 |
+
|
| 589 |
+
15. Disclaimer of Warranty.
|
| 590 |
+
|
| 591 |
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
| 592 |
+
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
| 593 |
+
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
| 594 |
+
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
| 595 |
+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| 596 |
+
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
| 597 |
+
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
| 598 |
+
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
| 599 |
+
|
| 600 |
+
16. Limitation of Liability.
|
| 601 |
+
|
| 602 |
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
| 603 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
| 604 |
+
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
| 605 |
+
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
| 606 |
+
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
| 607 |
+
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
| 608 |
+
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
| 609 |
+
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
| 610 |
+
SUCH DAMAGES.
|
| 611 |
+
|
| 612 |
+
17. Interpretation of Sections 15 and 16.
|
| 613 |
+
|
| 614 |
+
If the disclaimer of warranty and limitation of liability provided
|
| 615 |
+
above cannot be given local legal effect according to their terms,
|
| 616 |
+
reviewing courts shall apply local law that most closely approximates
|
| 617 |
+
an absolute waiver of all civil liability in connection with the
|
| 618 |
+
Program, unless a warranty or assumption of liability accompanies a
|
| 619 |
+
copy of the Program in return for a fee.
|
| 620 |
+
|
| 621 |
+
END OF TERMS AND CONDITIONS
|
| 622 |
+
|
| 623 |
+
How to Apply These Terms to Your New Programs
|
| 624 |
+
|
| 625 |
+
If you develop a new program, and you want it to be of the greatest
|
| 626 |
+
possible use to the public, the best way to achieve this is to make it
|
| 627 |
+
free software which everyone can redistribute and change under these terms.
|
| 628 |
+
|
| 629 |
+
To do so, attach the following notices to the program. It is safest
|
| 630 |
+
to attach them to the start of each source file to most effectively
|
| 631 |
+
state the exclusion of warranty; and each file should have at least
|
| 632 |
+
the "copyright" line and a pointer to where the full notice is found.
|
| 633 |
+
|
| 634 |
+
<one line to give the program's name and a brief idea of what it does.>
|
| 635 |
+
Copyright (C) <year> <name of author>
|
| 636 |
+
|
| 637 |
+
This program is free software: you can redistribute it and/or modify
|
| 638 |
+
it under the terms of the GNU General Public License as published by
|
| 639 |
+
the Free Software Foundation, either version 3 of the License, or
|
| 640 |
+
(at your option) any later version.
|
| 641 |
+
|
| 642 |
+
This program is distributed in the hope that it will be useful,
|
| 643 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 644 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 645 |
+
GNU General Public License for more details.
|
| 646 |
+
|
| 647 |
+
You should have received a copy of the GNU General Public License
|
| 648 |
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| 649 |
+
|
| 650 |
+
Also add information on how to contact you by electronic and paper mail.
|
| 651 |
+
|
| 652 |
+
If the program does terminal interaction, make it output a short
|
| 653 |
+
notice like this when it starts in an interactive mode:
|
| 654 |
+
|
| 655 |
+
<program> Copyright (C) <year> <name of author>
|
| 656 |
+
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
| 657 |
+
This is free software, and you are welcome to redistribute it
|
| 658 |
+
under certain conditions; type `show c' for details.
|
| 659 |
+
|
| 660 |
+
The hypothetical commands `show w' and `show c' should show the appropriate
|
| 661 |
+
parts of the General Public License. Of course, your program's commands
|
| 662 |
+
might be different; for a GUI interface, you would use an "about box".
|
| 663 |
+
|
| 664 |
+
You should also get your employer (if you work as a programmer) or school,
|
| 665 |
+
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
| 666 |
+
For more information on this, and how to apply and follow the GNU GPL, see
|
| 667 |
+
<http://www.gnu.org/licenses/>.
|
| 668 |
+
|
| 669 |
+
The GNU General Public License does not permit incorporating your program
|
| 670 |
+
into proprietary programs. If your program is a subroutine library, you
|
| 671 |
+
may consider it more useful to permit linking proprietary applications with
|
| 672 |
+
the library. If this is what you want to do, use the GNU Lesser General
|
| 673 |
+
Public License instead of this License. But first, please read
|
| 674 |
+
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
yolov5-code-main/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+

|
| 2 |
+
|
| 3 |
+
# 简介
|
| 4 |
+
|
| 5 |
+
手把手带你实战YOLOv5课程的代码仓库
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
# 课程地址
|
| 9 |
+
|
| 10 |
+
完整课程均发布在B站,包括入门篇、拓展篇、进阶篇、部署篇四个篇章,详细课程信息如下
|
| 11 |
+
|
| 12 |
+
## YOLOv5 入门篇
|
| 13 |
+
|
| 14 |
+
- [YOLOv5 环境安装](https://www.bilibili.com/video/BV1G24y1G7qm)
|
| 15 |
+
|
| 16 |
+
- [YOLOv5 环境安装补充](https://www.bilibili.com/video/BV1z24y1b7Qm)
|
| 17 |
+
|
| 18 |
+
- [YOLOv5 模型推理](https://www.bilibili.com/video/BV1B8411c7ZN)
|
| 19 |
+
|
| 20 |
+
- [YOLOv5 数据集构建](https://www.bilibili.com/video/BV18g4y1t7r2)
|
| 21 |
+
|
| 22 |
+
- [YOLOv5 模型训练](https://www.bilibili.com/video/BV1D24y1g7bg)
|
| 23 |
+
|
| 24 |
+
- [YOLOv5 PySide6可视化界面](https://www.bilibili.com/video/BV1dP411f7kX)
|
| 25 |
+
|
| 26 |
+
- [YOLOv5 Gradio搭建Web GUI](https://www.bilibili.com/video/BV1LP411Z7nk)
|
| 27 |
+
|
| 28 |
+
## YOLOv5 拓展篇
|
| 29 |
+
|
| 30 |
+
- [使用AutoDL服务器进行训练](https://www.bilibili.com/video/BV13s4y1V7b4)
|
| 31 |
+
|
| 32 |
+
- [Pycharm基本使用与AutoDL服务器连接](https://www.bilibili.com/video/BV1Ns4y1p7Ry)
|
| 33 |
+
|
| 34 |
+
- [Vscode基本使用与AutoDL服务器连接](https://www.bilibili.com/video/BV1724y1E7UW)
|
| 35 |
+
|
| 36 |
+
## YOLOv5 进阶篇
|
| 37 |
+
|
| 38 |
+
- [YOLOv5 模型结构与构建原理](https://www.bilibili.com/video/BV1bL411r7bJ)
|
| 39 |
+
|
| 40 |
+
- [YOLOv5 修改网络结构——以C2f为例](https://www.bilibili.com/video/BV1Qb411d7vR)
|
| 41 |
+
|
| 42 |
+
- [YOLOv5 引入注意力机制——以SE为例](https://www.bilibili.com/video/BV1uN411K7x3)
|
| 43 |
+
|
| 44 |
+
- [YOLOv5 替换主干网络——以MobileNet为例](https://www.bilibili.com/video/BV1JX4y1o7hi)
|
| 45 |
+
|
| 46 |
+
## YOLOv5 部署篇
|
| 47 |
+
|
| 48 |
+
- [TensorRT环境安装与配置](https://www.bilibili.com/video/BV1KL411S7hw)
|
| 49 |
+
|
| 50 |
+
- [正确使用TensorRT进行推理加速](https://www.bilibili.com/video/BV1N84y1g7NQ)
|
| 51 |
+
|
| 52 |
+
- [Torchhub模型预测使用进阶](https://www.bilibili.com/video/BV1XM4y1U7KY)
|
| 53 |
+
|
| 54 |
+
- [基于Flask的YOLOv5项目部署](https://www.bilibili.com/video/BV1Mk4y1i7v1)
|
| 55 |
+
|
| 56 |
+
# 请作者喝杯奶茶
|
| 57 |
+
|
| 58 |
+

|
yolov5-code-main/YOLOv5.png
ADDED
|
yolov5-code-main/__pycache__/export.cpython-38.pyc
ADDED
|
Binary file (25.4 kB). View file
|
|
|
yolov5-code-main/__pycache__/hubconf.cpython-38.pyc
ADDED
|
Binary file (5.52 kB). View file
|
|
|
yolov5-code-main/__pycache__/ui_main_window.cpython-38.pyc
ADDED
|
Binary file (2.5 kB). View file
|
|
|
yolov5-code-main/__pycache__/val.cpython-38.pyc
ADDED
|
Binary file (14 kB). View file
|
|
|
yolov5-code-main/base_ui.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import cv2
|
| 2 |
+
import sys
|
| 3 |
+
import torch
|
| 4 |
+
from PySide6.QtWidgets import QMainWindow, QApplication, QFileDialog
|
| 5 |
+
from PySide6.QtGui import QPixmap, QImage
|
| 6 |
+
from PySide6.QtCore import QTimer
|
| 7 |
+
|
| 8 |
+
from ui_main_window import Ui_MainWindow
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def convert2QImage(img):
|
| 12 |
+
height, width, channel = img.shape
|
| 13 |
+
return QImage(img, width, height, width * channel, QImage.Format_RGB888)
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
class MainWindow(QMainWindow, Ui_MainWindow):
|
| 17 |
+
def __init__(self):
|
| 18 |
+
super(MainWindow, self).__init__()
|
| 19 |
+
self.setupUi(self)
|
| 20 |
+
self.model = torch.hub.load("E:/BBX/Document/pytorch/食道胃病变检测/yolov5", "custom", path="E:/BBX/Document/pytorch/食道胃病变检测/YOLO5/yolov5-master/runs/exp45/weights/best.pt", source="local")
|
| 21 |
+
self.timer = QTimer()
|
| 22 |
+
self.timer.setInterval(1)
|
| 23 |
+
self.video = None
|
| 24 |
+
self.bind_slots()
|
| 25 |
+
|
| 26 |
+
def image_pred(self, file_path):
|
| 27 |
+
results = self.model(file_path)
|
| 28 |
+
image = results.render()[0]
|
| 29 |
+
return convert2QImage(image)
|
| 30 |
+
|
| 31 |
+
def open_image(self):
|
| 32 |
+
print("点击了检测图片!")
|
| 33 |
+
self.timer.stop()
|
| 34 |
+
file_path = QFileDialog.getOpenFileName(self, dir="E:/BBX/Document/pytorch/息肉病变检测/Kvasir-SEG/images", filter="*.jpg;*.png;*.jpeg")
|
| 35 |
+
if file_path[0]:
|
| 36 |
+
file_path = file_path[0]
|
| 37 |
+
qimage = self.image_pred(file_path)
|
| 38 |
+
self.input.setPixmap(QPixmap(file_path))
|
| 39 |
+
self.output.setPixmap(QPixmap.fromImage(qimage))
|
| 40 |
+
|
| 41 |
+
def video_pred(self):
|
| 42 |
+
ret, frame = self.video.read()
|
| 43 |
+
if not ret:
|
| 44 |
+
self.timer.stop()
|
| 45 |
+
else:
|
| 46 |
+
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
| 47 |
+
self.input.setPixmap(QPixmap.fromImage(convert2QImage(frame)))
|
| 48 |
+
results = self.model(frame)
|
| 49 |
+
image = results.render()[0]
|
| 50 |
+
self.output.setPixmap(QPixmap.fromImage(convert2QImage(image)))
|
| 51 |
+
|
| 52 |
+
def open_video(self):
|
| 53 |
+
print("点击了检测视频!")
|
| 54 |
+
file_path = QFileDialog.getOpenFileName(self, dir="./datasets", filter="*.mp4")
|
| 55 |
+
if file_path[0]:
|
| 56 |
+
file_path = file_path[0]
|
| 57 |
+
self.video = cv2.VideoCapture(file_path)
|
| 58 |
+
self.timer.start()
|
| 59 |
+
|
| 60 |
+
def bind_slots(self):
|
| 61 |
+
self.det_image.clicked.connect(self.open_image)
|
| 62 |
+
self.det_video.clicked.connect(self.open_video)
|
| 63 |
+
self.timer.timeout.connect(self.video_pred)
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
if __name__ == "__main__":
|
| 67 |
+
app = QApplication(sys.argv)
|
| 68 |
+
|
| 69 |
+
window = MainWindow()
|
| 70 |
+
window.show()
|
| 71 |
+
|
| 72 |
+
app.exec()
|
yolov5-code-main/benchmarks.py
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
"""
|
| 3 |
+
Run YOLOv5 benchmarks on all supported export formats
|
| 4 |
+
|
| 5 |
+
Format | `export.py --include` | Model
|
| 6 |
+
--- | --- | ---
|
| 7 |
+
PyTorch | - | yolov5s.pt
|
| 8 |
+
TorchScript | `torchscript` | yolov5s.torchscript
|
| 9 |
+
ONNX | `onnx` | yolov5s.onnx
|
| 10 |
+
OpenVINO | `openvino` | yolov5s_openvino_model/
|
| 11 |
+
TensorRT | `engine` | yolov5s.engine
|
| 12 |
+
CoreML | `coreml` | yolov5s.mlmodel
|
| 13 |
+
TensorFlow SavedModel | `saved_model` | yolov5s_saved_model/
|
| 14 |
+
TensorFlow GraphDef | `pb` | yolov5s.pb
|
| 15 |
+
TensorFlow Lite | `tflite` | yolov5s.tflite
|
| 16 |
+
TensorFlow Edge TPU | `edgetpu` | yolov5s_edgetpu.tflite
|
| 17 |
+
TensorFlow.js | `tfjs` | yolov5s_web_model/
|
| 18 |
+
|
| 19 |
+
Requirements:
|
| 20 |
+
$ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime openvino-dev tensorflow-cpu # CPU
|
| 21 |
+
$ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime-gpu openvino-dev tensorflow # GPU
|
| 22 |
+
$ pip install -U nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com # TensorRT
|
| 23 |
+
|
| 24 |
+
Usage:
|
| 25 |
+
$ python benchmarks.py --weights yolov5s.pt --img 640
|
| 26 |
+
"""
|
| 27 |
+
|
| 28 |
+
import argparse
|
| 29 |
+
import platform
|
| 30 |
+
import sys
|
| 31 |
+
import time
|
| 32 |
+
from pathlib import Path
|
| 33 |
+
|
| 34 |
+
import pandas as pd
|
| 35 |
+
|
| 36 |
+
FILE = Path(__file__).resolve()
|
| 37 |
+
ROOT = FILE.parents[0] # YOLOv5 root directory
|
| 38 |
+
if str(ROOT) not in sys.path:
|
| 39 |
+
sys.path.append(str(ROOT)) # add ROOT to PATH
|
| 40 |
+
# ROOT = ROOT.relative_to(Path.cwd()) # relative
|
| 41 |
+
|
| 42 |
+
import export
|
| 43 |
+
from models.experimental import attempt_load
|
| 44 |
+
from models.yolo import SegmentationModel
|
| 45 |
+
from segment.val import run as val_seg
|
| 46 |
+
from utils import notebook_init
|
| 47 |
+
from utils.general import LOGGER, check_yaml, file_size, print_args
|
| 48 |
+
from utils.torch_utils import select_device
|
| 49 |
+
from val import run as val_det
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
def run(
|
| 53 |
+
weights=ROOT / 'yolov5s.pt', # weights path
|
| 54 |
+
imgsz=640, # inference size (pixels)
|
| 55 |
+
batch_size=1, # batch size
|
| 56 |
+
data=ROOT / 'data/coco128.yaml', # dataset.yaml path
|
| 57 |
+
device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu
|
| 58 |
+
half=False, # use FP16 half-precision inference
|
| 59 |
+
test=False, # test exports only
|
| 60 |
+
pt_only=False, # test PyTorch only
|
| 61 |
+
hard_fail=False, # throw error on benchmark failure
|
| 62 |
+
):
|
| 63 |
+
y, t = [], time.time()
|
| 64 |
+
device = select_device(device)
|
| 65 |
+
model_type = type(attempt_load(weights, fuse=False)) # DetectionModel, SegmentationModel, etc.
|
| 66 |
+
for i, (name, f, suffix, cpu, gpu) in export.export_formats().iterrows(): # index, (name, file, suffix, CPU, GPU)
|
| 67 |
+
try:
|
| 68 |
+
assert i not in (9, 10), 'inference not supported' # Edge TPU and TF.js are unsupported
|
| 69 |
+
assert i != 5 or platform.system() == 'Darwin', 'inference only supported on macOS>=10.13' # CoreML
|
| 70 |
+
if 'cpu' in device.type:
|
| 71 |
+
assert cpu, 'inference not supported on CPU'
|
| 72 |
+
if 'cuda' in device.type:
|
| 73 |
+
assert gpu, 'inference not supported on GPU'
|
| 74 |
+
|
| 75 |
+
# Export
|
| 76 |
+
if f == '-':
|
| 77 |
+
w = weights # PyTorch format
|
| 78 |
+
else:
|
| 79 |
+
w = export.run(weights=weights, imgsz=[imgsz], include=[f], device=device, half=half)[-1] # all others
|
| 80 |
+
assert suffix in str(w), 'export failed'
|
| 81 |
+
|
| 82 |
+
# Validate
|
| 83 |
+
if model_type == SegmentationModel:
|
| 84 |
+
result = val_seg(data, w, batch_size, imgsz, plots=False, device=device, task='speed', half=half)
|
| 85 |
+
metric = result[0][7] # (box(p, r, map50, map), mask(p, r, map50, map), *loss(box, obj, cls))
|
| 86 |
+
else: # DetectionModel:
|
| 87 |
+
result = val_det(data, w, batch_size, imgsz, plots=False, device=device, task='speed', half=half)
|
| 88 |
+
metric = result[0][3] # (p, r, map50, map, *loss(box, obj, cls))
|
| 89 |
+
speed = result[2][1] # times (preprocess, inference, postprocess)
|
| 90 |
+
y.append([name, round(file_size(w), 1), round(metric, 4), round(speed, 2)]) # MB, mAP, t_inference
|
| 91 |
+
except Exception as e:
|
| 92 |
+
if hard_fail:
|
| 93 |
+
assert type(e) is AssertionError, f'Benchmark --hard-fail for {name}: {e}'
|
| 94 |
+
LOGGER.warning(f'WARNING ⚠️ Benchmark failure for {name}: {e}')
|
| 95 |
+
y.append([name, None, None, None]) # mAP, t_inference
|
| 96 |
+
if pt_only and i == 0:
|
| 97 |
+
break # break after PyTorch
|
| 98 |
+
|
| 99 |
+
# Print results
|
| 100 |
+
LOGGER.info('\n')
|
| 101 |
+
parse_opt()
|
| 102 |
+
notebook_init() # print system info
|
| 103 |
+
c = ['Format', 'Size (MB)', 'mAP50-95', 'Inference time (ms)'] if map else ['Format', 'Export', '', '']
|
| 104 |
+
py = pd.DataFrame(y, columns=c)
|
| 105 |
+
LOGGER.info(f'\nBenchmarks complete ({time.time() - t:.2f}s)')
|
| 106 |
+
LOGGER.info(str(py if map else py.iloc[:, :2]))
|
| 107 |
+
if hard_fail and isinstance(hard_fail, str):
|
| 108 |
+
metrics = py['mAP50-95'].array # values to compare to floor
|
| 109 |
+
floor = eval(hard_fail) # minimum metric floor to pass, i.e. = 0.29 mAP for YOLOv5n
|
| 110 |
+
assert all(x > floor for x in metrics if pd.notna(x)), f'HARD FAIL: mAP50-95 < floor {floor}'
|
| 111 |
+
return py
|
| 112 |
+
|
| 113 |
+
|
| 114 |
+
def test(
|
| 115 |
+
weights=ROOT / 'yolov5s.pt', # weights path
|
| 116 |
+
imgsz=640, # inference size (pixels)
|
| 117 |
+
batch_size=1, # batch size
|
| 118 |
+
data=ROOT / 'data/coco128.yaml', # dataset.yaml path
|
| 119 |
+
device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu
|
| 120 |
+
half=False, # use FP16 half-precision inference
|
| 121 |
+
test=False, # test exports only
|
| 122 |
+
pt_only=False, # test PyTorch only
|
| 123 |
+
hard_fail=False, # throw error on benchmark failure
|
| 124 |
+
):
|
| 125 |
+
y, t = [], time.time()
|
| 126 |
+
device = select_device(device)
|
| 127 |
+
for i, (name, f, suffix, gpu) in export.export_formats().iterrows(): # index, (name, file, suffix, gpu-capable)
|
| 128 |
+
try:
|
| 129 |
+
w = weights if f == '-' else \
|
| 130 |
+
export.run(weights=weights, imgsz=[imgsz], include=[f], device=device, half=half)[-1] # weights
|
| 131 |
+
assert suffix in str(w), 'export failed'
|
| 132 |
+
y.append([name, True])
|
| 133 |
+
except Exception:
|
| 134 |
+
y.append([name, False]) # mAP, t_inference
|
| 135 |
+
|
| 136 |
+
# Print results
|
| 137 |
+
LOGGER.info('\n')
|
| 138 |
+
parse_opt()
|
| 139 |
+
notebook_init() # print system info
|
| 140 |
+
py = pd.DataFrame(y, columns=['Format', 'Export'])
|
| 141 |
+
LOGGER.info(f'\nExports complete ({time.time() - t:.2f}s)')
|
| 142 |
+
LOGGER.info(str(py))
|
| 143 |
+
return py
|
| 144 |
+
|
| 145 |
+
|
| 146 |
+
def parse_opt():
|
| 147 |
+
parser = argparse.ArgumentParser()
|
| 148 |
+
parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='weights path')
|
| 149 |
+
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='inference size (pixels)')
|
| 150 |
+
parser.add_argument('--batch-size', type=int, default=1, help='batch size')
|
| 151 |
+
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
|
| 152 |
+
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
|
| 153 |
+
parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')
|
| 154 |
+
parser.add_argument('--test', action='store_true', help='test exports only')
|
| 155 |
+
parser.add_argument('--pt-only', action='store_true', help='test PyTorch only')
|
| 156 |
+
parser.add_argument('--hard-fail', nargs='?', const=True, default=False, help='Exception on error or < min metric')
|
| 157 |
+
opt = parser.parse_args()
|
| 158 |
+
opt.data = check_yaml(opt.data) # check YAML
|
| 159 |
+
print_args(vars(opt))
|
| 160 |
+
return opt
|
| 161 |
+
|
| 162 |
+
|
| 163 |
+
def main(opt):
|
| 164 |
+
test(**vars(opt)) if opt.test else run(**vars(opt))
|
| 165 |
+
|
| 166 |
+
|
| 167 |
+
if __name__ == '__main__':
|
| 168 |
+
opt = parse_opt()
|
| 169 |
+
main(opt)
|
yolov5-code-main/classify/predict.py
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
"""
|
| 3 |
+
Run YOLOv5 classification inference on images, videos, directories, globs, YouTube, webcam, streams, etc.
|
| 4 |
+
|
| 5 |
+
Usage - sources:
|
| 6 |
+
$ python classify/predict.py --weights yolov5s-cls.pt --source 0 # webcam
|
| 7 |
+
img.jpg # image
|
| 8 |
+
vid.mp4 # video
|
| 9 |
+
screen # screenshot
|
| 10 |
+
path/ # directory
|
| 11 |
+
list.txt # list of images
|
| 12 |
+
list.streams # list of streams
|
| 13 |
+
'path/*.jpg' # glob
|
| 14 |
+
'https://youtu.be/Zgi9g1ksQHc' # YouTube
|
| 15 |
+
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
|
| 16 |
+
|
| 17 |
+
Usage - formats:
|
| 18 |
+
$ python classify/predict.py --weights yolov5s-cls.pt # PyTorch
|
| 19 |
+
yolov5s-cls.torchscript # TorchScript
|
| 20 |
+
yolov5s-cls.onnx # ONNX Runtime or OpenCV DNN with --dnn
|
| 21 |
+
yolov5s-cls_openvino_model # OpenVINO
|
| 22 |
+
yolov5s-cls.engine # TensorRT
|
| 23 |
+
yolov5s-cls.mlmodel # CoreML (macOS-only)
|
| 24 |
+
yolov5s-cls_saved_model # TensorFlow SavedModel
|
| 25 |
+
yolov5s-cls.pb # TensorFlow GraphDef
|
| 26 |
+
yolov5s-cls.tflite # TensorFlow Lite
|
| 27 |
+
yolov5s-cls_edgetpu.tflite # TensorFlow Edge TPU
|
| 28 |
+
yolov5s-cls_paddle_model # PaddlePaddle
|
| 29 |
+
"""
|
| 30 |
+
|
| 31 |
+
import argparse
|
| 32 |
+
import os
|
| 33 |
+
import platform
|
| 34 |
+
import sys
|
| 35 |
+
from pathlib import Path
|
| 36 |
+
|
| 37 |
+
import torch
|
| 38 |
+
import torch.nn.functional as F
|
| 39 |
+
|
| 40 |
+
FILE = Path(__file__).resolve()
|
| 41 |
+
ROOT = FILE.parents[1] # YOLOv5 root directory
|
| 42 |
+
if str(ROOT) not in sys.path:
|
| 43 |
+
sys.path.append(str(ROOT)) # add ROOT to PATH
|
| 44 |
+
ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative
|
| 45 |
+
|
| 46 |
+
from models.common import DetectMultiBackend
|
| 47 |
+
from utils.augmentations import classify_transforms
|
| 48 |
+
from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams
|
| 49 |
+
from utils.general import (LOGGER, Profile, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2,
|
| 50 |
+
increment_path, print_args, strip_optimizer)
|
| 51 |
+
from utils.plots import Annotator
|
| 52 |
+
from utils.torch_utils import select_device, smart_inference_mode
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
@smart_inference_mode()
|
| 56 |
+
def run(
|
| 57 |
+
weights=ROOT / 'yolov5s-cls.pt', # model.pt path(s)
|
| 58 |
+
source=ROOT / 'data/images', # file/dir/URL/glob/screen/0(webcam)
|
| 59 |
+
data=ROOT / 'data/coco128.yaml', # dataset.yaml path
|
| 60 |
+
imgsz=(224, 224), # inference size (height, width)
|
| 61 |
+
device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu
|
| 62 |
+
view_img=False, # show results
|
| 63 |
+
save_txt=False, # save results to *.txt
|
| 64 |
+
nosave=False, # do not save images/videos
|
| 65 |
+
augment=False, # augmented inference
|
| 66 |
+
visualize=False, # visualize features
|
| 67 |
+
update=False, # update all models
|
| 68 |
+
project=ROOT / 'runs/predict-cls', # save results to project/name
|
| 69 |
+
name='exp', # save results to project/name
|
| 70 |
+
exist_ok=False, # existing project/name ok, do not increment
|
| 71 |
+
half=False, # use FP16 half-precision inference
|
| 72 |
+
dnn=False, # use OpenCV DNN for ONNX inference
|
| 73 |
+
vid_stride=1, # video frame-rate stride
|
| 74 |
+
):
|
| 75 |
+
source = str(source)
|
| 76 |
+
save_img = not nosave and not source.endswith('.txt') # save inference images
|
| 77 |
+
is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS)
|
| 78 |
+
is_url = source.lower().startswith(('rtsp://', 'rtmp://', 'http://', 'https://'))
|
| 79 |
+
webcam = source.isnumeric() or source.endswith('.streams') or (is_url and not is_file)
|
| 80 |
+
screenshot = source.lower().startswith('screen')
|
| 81 |
+
if is_url and is_file:
|
| 82 |
+
source = check_file(source) # download
|
| 83 |
+
|
| 84 |
+
# Directories
|
| 85 |
+
save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run
|
| 86 |
+
(save_dir / 'labels' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir
|
| 87 |
+
|
| 88 |
+
# Load model
|
| 89 |
+
device = select_device(device)
|
| 90 |
+
model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)
|
| 91 |
+
stride, names, pt = model.stride, model.names, model.pt
|
| 92 |
+
imgsz = check_img_size(imgsz, s=stride) # check image size
|
| 93 |
+
|
| 94 |
+
# Dataloader
|
| 95 |
+
bs = 1 # batch_size
|
| 96 |
+
if webcam:
|
| 97 |
+
view_img = check_imshow(warn=True)
|
| 98 |
+
dataset = LoadStreams(source, img_size=imgsz, transforms=classify_transforms(imgsz[0]), vid_stride=vid_stride)
|
| 99 |
+
bs = len(dataset)
|
| 100 |
+
elif screenshot:
|
| 101 |
+
dataset = LoadScreenshots(source, img_size=imgsz, stride=stride, auto=pt)
|
| 102 |
+
else:
|
| 103 |
+
dataset = LoadImages(source, img_size=imgsz, transforms=classify_transforms(imgsz[0]), vid_stride=vid_stride)
|
| 104 |
+
vid_path, vid_writer = [None] * bs, [None] * bs
|
| 105 |
+
|
| 106 |
+
# Run inference
|
| 107 |
+
model.warmup(imgsz=(1 if pt else bs, 3, *imgsz)) # warmup
|
| 108 |
+
seen, windows, dt = 0, [], (Profile(), Profile(), Profile())
|
| 109 |
+
for path, im, im0s, vid_cap, s in dataset:
|
| 110 |
+
with dt[0]:
|
| 111 |
+
im = torch.Tensor(im).to(model.device)
|
| 112 |
+
im = im.half() if model.fp16 else im.float() # uint8 to fp16/32
|
| 113 |
+
if len(im.shape) == 3:
|
| 114 |
+
im = im[None] # expand for batch dim
|
| 115 |
+
|
| 116 |
+
# Inference
|
| 117 |
+
with dt[1]:
|
| 118 |
+
results = model(im)
|
| 119 |
+
|
| 120 |
+
# Post-process
|
| 121 |
+
with dt[2]:
|
| 122 |
+
pred = F.softmax(results, dim=1) # probabilities
|
| 123 |
+
|
| 124 |
+
# Process predictions
|
| 125 |
+
for i, prob in enumerate(pred): # per image
|
| 126 |
+
seen += 1
|
| 127 |
+
if webcam: # batch_size >= 1
|
| 128 |
+
p, im0, frame = path[i], im0s[i].copy(), dataset.count
|
| 129 |
+
s += f'{i}: '
|
| 130 |
+
else:
|
| 131 |
+
p, im0, frame = path, im0s.copy(), getattr(dataset, 'frame', 0)
|
| 132 |
+
|
| 133 |
+
p = Path(p) # to Path
|
| 134 |
+
save_path = str(save_dir / p.name) # im.jpg
|
| 135 |
+
txt_path = str(save_dir / 'labels' / p.stem) + ('' if dataset.mode == 'image' else f'_{frame}') # im.txt
|
| 136 |
+
|
| 137 |
+
s += '%gx%g ' % im.shape[2:] # print string
|
| 138 |
+
annotator = Annotator(im0, example=str(names), pil=True)
|
| 139 |
+
|
| 140 |
+
# Print results
|
| 141 |
+
top5i = prob.argsort(0, descending=True)[:5].tolist() # top 5 indices
|
| 142 |
+
s += f"{', '.join(f'{names[j]} {prob[j]:.2f}' for j in top5i)}, "
|
| 143 |
+
|
| 144 |
+
# Write results
|
| 145 |
+
text = '\n'.join(f'{prob[j]:.2f} {names[j]}' for j in top5i)
|
| 146 |
+
if save_img or view_img: # Add bbox to image
|
| 147 |
+
annotator.text((32, 32), text, txt_color=(255, 255, 255))
|
| 148 |
+
if save_txt: # Write to file
|
| 149 |
+
with open(f'{txt_path}.txt', 'a') as f:
|
| 150 |
+
f.write(text + '\n')
|
| 151 |
+
|
| 152 |
+
# Stream results
|
| 153 |
+
im0 = annotator.result()
|
| 154 |
+
if view_img:
|
| 155 |
+
if platform.system() == 'Linux' and p not in windows:
|
| 156 |
+
windows.append(p)
|
| 157 |
+
cv2.namedWindow(str(p), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux)
|
| 158 |
+
cv2.resizeWindow(str(p), im0.shape[1], im0.shape[0])
|
| 159 |
+
cv2.imshow(str(p), im0)
|
| 160 |
+
cv2.waitKey(1) # 1 millisecond
|
| 161 |
+
|
| 162 |
+
# Save results (image with detections)
|
| 163 |
+
if save_img:
|
| 164 |
+
if dataset.mode == 'image':
|
| 165 |
+
cv2.imwrite(save_path, im0)
|
| 166 |
+
else: # 'video' or 'stream'
|
| 167 |
+
if vid_path[i] != save_path: # new video
|
| 168 |
+
vid_path[i] = save_path
|
| 169 |
+
if isinstance(vid_writer[i], cv2.VideoWriter):
|
| 170 |
+
vid_writer[i].release() # release previous video writer
|
| 171 |
+
if vid_cap: # video
|
| 172 |
+
fps = vid_cap.get(cv2.CAP_PROP_FPS)
|
| 173 |
+
w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
| 174 |
+
h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
| 175 |
+
else: # stream
|
| 176 |
+
fps, w, h = 30, im0.shape[1], im0.shape[0]
|
| 177 |
+
save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos
|
| 178 |
+
vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
|
| 179 |
+
vid_writer[i].write(im0)
|
| 180 |
+
|
| 181 |
+
# Print time (inference-only)
|
| 182 |
+
LOGGER.info(f'{s}{dt[1].dt * 1E3:.1f}ms')
|
| 183 |
+
|
| 184 |
+
# Print results
|
| 185 |
+
t = tuple(x.t / seen * 1E3 for x in dt) # speeds per image
|
| 186 |
+
LOGGER.info(f'Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {(1, 3, *imgsz)}' % t)
|
| 187 |
+
if save_txt or save_img:
|
| 188 |
+
s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else ''
|
| 189 |
+
LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}")
|
| 190 |
+
if update:
|
| 191 |
+
strip_optimizer(weights[0]) # update model (to fix SourceChangeWarning)
|
| 192 |
+
|
| 193 |
+
|
| 194 |
+
def parse_opt():
|
| 195 |
+
parser = argparse.ArgumentParser()
|
| 196 |
+
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s-cls.pt', help='model path(s)')
|
| 197 |
+
parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob/screen/0(webcam)')
|
| 198 |
+
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='(optional) dataset.yaml path')
|
| 199 |
+
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[224], help='inference size h,w')
|
| 200 |
+
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
|
| 201 |
+
parser.add_argument('--view-img', action='store_true', help='show results')
|
| 202 |
+
parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
|
| 203 |
+
parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
|
| 204 |
+
parser.add_argument('--augment', action='store_true', help='augmented inference')
|
| 205 |
+
parser.add_argument('--visualize', action='store_true', help='visualize features')
|
| 206 |
+
parser.add_argument('--update', action='store_true', help='update all models')
|
| 207 |
+
parser.add_argument('--project', default=ROOT / 'runs/predict-cls', help='save results to project/name')
|
| 208 |
+
parser.add_argument('--name', default='exp', help='save results to project/name')
|
| 209 |
+
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
|
| 210 |
+
parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')
|
| 211 |
+
parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')
|
| 212 |
+
parser.add_argument('--vid-stride', type=int, default=1, help='video frame-rate stride')
|
| 213 |
+
opt = parser.parse_args()
|
| 214 |
+
opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand
|
| 215 |
+
print_args(vars(opt))
|
| 216 |
+
return opt
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
def main(opt):
|
| 220 |
+
check_requirements(exclude=('tensorboard', 'thop'))
|
| 221 |
+
run(**vars(opt))
|
| 222 |
+
|
| 223 |
+
|
| 224 |
+
if __name__ == '__main__':
|
| 225 |
+
opt = parse_opt()
|
| 226 |
+
main(opt)
|
yolov5-code-main/classify/train.py
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
"""
|
| 3 |
+
Train a YOLOv5 classifier model on a classification dataset
|
| 4 |
+
|
| 5 |
+
Usage - Single-GPU training:
|
| 6 |
+
$ python classify/train.py --model yolov5s-cls.pt --data imagenette160 --epochs 5 --img 224
|
| 7 |
+
|
| 8 |
+
Usage - Multi-GPU DDP training:
|
| 9 |
+
$ python -m torch.distributed.run --nproc_per_node 4 --master_port 2022 classify/train.py --model yolov5s-cls.pt --data imagenet --epochs 5 --img 224 --device 0,1,2,3
|
| 10 |
+
|
| 11 |
+
Datasets: --data mnist, fashion-mnist, cifar10, cifar100, imagenette, imagewoof, imagenet, or 'path/to/data'
|
| 12 |
+
YOLOv5-cls models: --model yolov5n-cls.pt, yolov5s-cls.pt, yolov5m-cls.pt, yolov5l-cls.pt, yolov5x-cls.pt
|
| 13 |
+
Torchvision models: --model resnet50, efficientnet_b0, etc. See https://pytorch.org/vision/stable/models.html
|
| 14 |
+
"""
|
| 15 |
+
|
| 16 |
+
import argparse
|
| 17 |
+
import os
|
| 18 |
+
import subprocess
|
| 19 |
+
import sys
|
| 20 |
+
import time
|
| 21 |
+
from copy import deepcopy
|
| 22 |
+
from datetime import datetime
|
| 23 |
+
from pathlib import Path
|
| 24 |
+
|
| 25 |
+
import torch
|
| 26 |
+
import torch.distributed as dist
|
| 27 |
+
import torch.hub as hub
|
| 28 |
+
import torch.optim.lr_scheduler as lr_scheduler
|
| 29 |
+
import torchvision
|
| 30 |
+
from torch.cuda import amp
|
| 31 |
+
from tqdm import tqdm
|
| 32 |
+
|
| 33 |
+
FILE = Path(__file__).resolve()
|
| 34 |
+
ROOT = FILE.parents[1] # YOLOv5 root directory
|
| 35 |
+
if str(ROOT) not in sys.path:
|
| 36 |
+
sys.path.append(str(ROOT)) # add ROOT to PATH
|
| 37 |
+
ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative
|
| 38 |
+
|
| 39 |
+
from classify import val as validate
|
| 40 |
+
from models.experimental import attempt_load
|
| 41 |
+
from models.yolo import ClassificationModel, DetectionModel
|
| 42 |
+
from utils.dataloaders import create_classification_dataloader
|
| 43 |
+
from utils.general import (DATASETS_DIR, LOGGER, TQDM_BAR_FORMAT, WorkingDirectory, check_git_info, check_git_status,
|
| 44 |
+
check_requirements, colorstr, download, increment_path, init_seeds, print_args, yaml_save)
|
| 45 |
+
from utils.loggers import GenericLogger
|
| 46 |
+
from utils.plots import imshow_cls
|
| 47 |
+
from utils.torch_utils import (ModelEMA, de_parallel, model_info, reshape_classifier_output, select_device, smart_DDP,
|
| 48 |
+
smart_optimizer, smartCrossEntropyLoss, torch_distributed_zero_first)
|
| 49 |
+
|
| 50 |
+
LOCAL_RANK = int(os.getenv('LOCAL_RANK', -1)) # https://pytorch.org/docs/stable/elastic/run.html
|
| 51 |
+
RANK = int(os.getenv('RANK', -1))
|
| 52 |
+
WORLD_SIZE = int(os.getenv('WORLD_SIZE', 1))
|
| 53 |
+
GIT_INFO = check_git_info()
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def train(opt, device):
|
| 57 |
+
init_seeds(opt.seed + 1 + RANK, deterministic=True)
|
| 58 |
+
save_dir, data, bs, epochs, nw, imgsz, pretrained = \
|
| 59 |
+
opt.save_dir, Path(opt.data), opt.batch_size, opt.epochs, min(os.cpu_count() - 1, opt.workers), \
|
| 60 |
+
opt.imgsz, str(opt.pretrained).lower() == 'true'
|
| 61 |
+
cuda = device.type != 'cpu'
|
| 62 |
+
|
| 63 |
+
# Directories
|
| 64 |
+
wdir = save_dir / 'weights'
|
| 65 |
+
wdir.mkdir(parents=True, exist_ok=True) # make dir
|
| 66 |
+
last, best = wdir / 'last.pt', wdir / 'best.pt'
|
| 67 |
+
|
| 68 |
+
# Save run settings
|
| 69 |
+
yaml_save(save_dir / 'opt.yaml', vars(opt))
|
| 70 |
+
|
| 71 |
+
# Logger
|
| 72 |
+
logger = GenericLogger(opt=opt, console_logger=LOGGER) if RANK in {-1, 0} else None
|
| 73 |
+
|
| 74 |
+
# Download Dataset
|
| 75 |
+
with torch_distributed_zero_first(LOCAL_RANK), WorkingDirectory(ROOT):
|
| 76 |
+
data_dir = data if data.is_dir() else (DATASETS_DIR / data)
|
| 77 |
+
if not data_dir.is_dir():
|
| 78 |
+
LOGGER.info(f'\nDataset not found ⚠️, missing path {data_dir}, attempting download...')
|
| 79 |
+
t = time.time()
|
| 80 |
+
if str(data) == 'imagenet':
|
| 81 |
+
subprocess.run(['bash', str(ROOT / 'data/scripts/get_imagenet.sh')], shell=True, check=True)
|
| 82 |
+
else:
|
| 83 |
+
url = f'https://github.com/ultralytics/yolov5/releases/download/v1.0/{data}.zip'
|
| 84 |
+
download(url, dir=data_dir.parent)
|
| 85 |
+
s = f"Dataset download success ✅ ({time.time() - t:.1f}s), saved to {colorstr('bold', data_dir)}\n"
|
| 86 |
+
LOGGER.info(s)
|
| 87 |
+
|
| 88 |
+
# Dataloaders
|
| 89 |
+
nc = len([x for x in (data_dir / 'train').glob('*') if x.is_dir()]) # number of classes
|
| 90 |
+
trainloader = create_classification_dataloader(path=data_dir / 'train',
|
| 91 |
+
imgsz=imgsz,
|
| 92 |
+
batch_size=bs // WORLD_SIZE,
|
| 93 |
+
augment=True,
|
| 94 |
+
cache=opt.cache,
|
| 95 |
+
rank=LOCAL_RANK,
|
| 96 |
+
workers=nw)
|
| 97 |
+
|
| 98 |
+
test_dir = data_dir / 'test' if (data_dir / 'test').exists() else data_dir / 'val' # data/test or data/val
|
| 99 |
+
if RANK in {-1, 0}:
|
| 100 |
+
testloader = create_classification_dataloader(path=test_dir,
|
| 101 |
+
imgsz=imgsz,
|
| 102 |
+
batch_size=bs // WORLD_SIZE * 2,
|
| 103 |
+
augment=False,
|
| 104 |
+
cache=opt.cache,
|
| 105 |
+
rank=-1,
|
| 106 |
+
workers=nw)
|
| 107 |
+
|
| 108 |
+
# Model
|
| 109 |
+
with torch_distributed_zero_first(LOCAL_RANK), WorkingDirectory(ROOT):
|
| 110 |
+
if Path(opt.model).is_file() or opt.model.endswith('.pt'):
|
| 111 |
+
model = attempt_load(opt.model, device='cpu', fuse=False)
|
| 112 |
+
elif opt.model in torchvision.models.__dict__: # TorchVision models i.e. resnet50, efficientnet_b0
|
| 113 |
+
model = torchvision.models.__dict__[opt.model](weights='IMAGENET1K_V1' if pretrained else None)
|
| 114 |
+
else:
|
| 115 |
+
m = hub.list('ultralytics/yolov5') # + hub.list('pytorch/vision') # models
|
| 116 |
+
raise ModuleNotFoundError(f'--model {opt.model} not found. Available models are: \n' + '\n'.join(m))
|
| 117 |
+
if isinstance(model, DetectionModel):
|
| 118 |
+
LOGGER.warning("WARNING ⚠️ pass YOLOv5 classifier model with '-cls' suffix, i.e. '--model yolov5s-cls.pt'")
|
| 119 |
+
model = ClassificationModel(model=model, nc=nc, cutoff=opt.cutoff or 10) # convert to classification model
|
| 120 |
+
reshape_classifier_output(model, nc) # update class count
|
| 121 |
+
for m in model.modules():
|
| 122 |
+
if not pretrained and hasattr(m, 'reset_parameters'):
|
| 123 |
+
m.reset_parameters()
|
| 124 |
+
if isinstance(m, torch.nn.Dropout) and opt.dropout is not None:
|
| 125 |
+
m.p = opt.dropout # set dropout
|
| 126 |
+
for p in model.parameters():
|
| 127 |
+
p.requires_grad = True # for training
|
| 128 |
+
model = model.to(device)
|
| 129 |
+
|
| 130 |
+
# Info
|
| 131 |
+
if RANK in {-1, 0}:
|
| 132 |
+
model.names = trainloader.dataset.classes # attach class names
|
| 133 |
+
model.transforms = testloader.dataset.torch_transforms # attach inference transforms
|
| 134 |
+
model_info(model)
|
| 135 |
+
if opt.verbose:
|
| 136 |
+
LOGGER.info(model)
|
| 137 |
+
images, labels = next(iter(trainloader))
|
| 138 |
+
file = imshow_cls(images[:25], labels[:25], names=model.names, f=save_dir / 'train_images.jpg')
|
| 139 |
+
logger.log_images(file, name='Train Examples')
|
| 140 |
+
logger.log_graph(model, imgsz) # log model
|
| 141 |
+
|
| 142 |
+
# Optimizer
|
| 143 |
+
optimizer = smart_optimizer(model, opt.optimizer, opt.lr0, momentum=0.9, decay=opt.decay)
|
| 144 |
+
|
| 145 |
+
# Scheduler
|
| 146 |
+
lrf = 0.01 # final lr (fraction of lr0)
|
| 147 |
+
# lf = lambda x: ((1 + math.cos(x * math.pi / epochs)) / 2) * (1 - lrf) + lrf # cosine
|
| 148 |
+
lf = lambda x: (1 - x / epochs) * (1 - lrf) + lrf # linear
|
| 149 |
+
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)
|
| 150 |
+
# scheduler = lr_scheduler.OneCycleLR(optimizer, max_lr=lr0, total_steps=epochs, pct_start=0.1,
|
| 151 |
+
# final_div_factor=1 / 25 / lrf)
|
| 152 |
+
|
| 153 |
+
# EMA
|
| 154 |
+
ema = ModelEMA(model) if RANK in {-1, 0} else None
|
| 155 |
+
|
| 156 |
+
# DDP mode
|
| 157 |
+
if cuda and RANK != -1:
|
| 158 |
+
model = smart_DDP(model)
|
| 159 |
+
|
| 160 |
+
# Train
|
| 161 |
+
t0 = time.time()
|
| 162 |
+
criterion = smartCrossEntropyLoss(label_smoothing=opt.label_smoothing) # loss function
|
| 163 |
+
best_fitness = 0.0
|
| 164 |
+
scaler = amp.GradScaler(enabled=cuda)
|
| 165 |
+
val = test_dir.stem # 'val' or 'test'
|
| 166 |
+
LOGGER.info(f'Image sizes {imgsz} train, {imgsz} test\n'
|
| 167 |
+
f'Using {nw * WORLD_SIZE} dataloader workers\n'
|
| 168 |
+
f"Logging results to {colorstr('bold', save_dir)}\n"
|
| 169 |
+
f'Starting {opt.model} training on {data} dataset with {nc} classes for {epochs} epochs...\n\n'
|
| 170 |
+
f"{'Epoch':>10}{'GPU_mem':>10}{'train_loss':>12}{f'{val}_loss':>12}{'top1_acc':>12}{'top5_acc':>12}")
|
| 171 |
+
for epoch in range(epochs): # loop over the dataset multiple times
|
| 172 |
+
tloss, vloss, fitness = 0.0, 0.0, 0.0 # train loss, val loss, fitness
|
| 173 |
+
model.train()
|
| 174 |
+
if RANK != -1:
|
| 175 |
+
trainloader.sampler.set_epoch(epoch)
|
| 176 |
+
pbar = enumerate(trainloader)
|
| 177 |
+
if RANK in {-1, 0}:
|
| 178 |
+
pbar = tqdm(enumerate(trainloader), total=len(trainloader), bar_format=TQDM_BAR_FORMAT)
|
| 179 |
+
for i, (images, labels) in pbar: # progress bar
|
| 180 |
+
images, labels = images.to(device, non_blocking=True), labels.to(device)
|
| 181 |
+
|
| 182 |
+
# Forward
|
| 183 |
+
with amp.autocast(enabled=cuda): # stability issues when enabled
|
| 184 |
+
loss = criterion(model(images), labels)
|
| 185 |
+
|
| 186 |
+
# Backward
|
| 187 |
+
scaler.scale(loss).backward()
|
| 188 |
+
|
| 189 |
+
# Optimize
|
| 190 |
+
scaler.unscale_(optimizer) # unscale gradients
|
| 191 |
+
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=10.0) # clip gradients
|
| 192 |
+
scaler.step(optimizer)
|
| 193 |
+
scaler.update()
|
| 194 |
+
optimizer.zero_grad()
|
| 195 |
+
if ema:
|
| 196 |
+
ema.update(model)
|
| 197 |
+
|
| 198 |
+
if RANK in {-1, 0}:
|
| 199 |
+
# Print
|
| 200 |
+
tloss = (tloss * i + loss.item()) / (i + 1) # update mean losses
|
| 201 |
+
mem = '%.3gG' % (torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0) # (GB)
|
| 202 |
+
pbar.desc = f"{f'{epoch + 1}/{epochs}':>10}{mem:>10}{tloss:>12.3g}" + ' ' * 36
|
| 203 |
+
|
| 204 |
+
# Test
|
| 205 |
+
if i == len(pbar) - 1: # last batch
|
| 206 |
+
top1, top5, vloss = validate.run(model=ema.ema,
|
| 207 |
+
dataloader=testloader,
|
| 208 |
+
criterion=criterion,
|
| 209 |
+
pbar=pbar) # test accuracy, loss
|
| 210 |
+
fitness = top1 # define fitness as top1 accuracy
|
| 211 |
+
|
| 212 |
+
# Scheduler
|
| 213 |
+
scheduler.step()
|
| 214 |
+
|
| 215 |
+
# Log metrics
|
| 216 |
+
if RANK in {-1, 0}:
|
| 217 |
+
# Best fitness
|
| 218 |
+
if fitness > best_fitness:
|
| 219 |
+
best_fitness = fitness
|
| 220 |
+
|
| 221 |
+
# Log
|
| 222 |
+
metrics = {
|
| 223 |
+
'train/loss': tloss,
|
| 224 |
+
f'{val}/loss': vloss,
|
| 225 |
+
'metrics/accuracy_top1': top1,
|
| 226 |
+
'metrics/accuracy_top5': top5,
|
| 227 |
+
'lr/0': optimizer.param_groups[0]['lr']} # learning rate
|
| 228 |
+
logger.log_metrics(metrics, epoch)
|
| 229 |
+
|
| 230 |
+
# Save model
|
| 231 |
+
final_epoch = epoch + 1 == epochs
|
| 232 |
+
if (not opt.nosave) or final_epoch:
|
| 233 |
+
ckpt = {
|
| 234 |
+
'epoch': epoch,
|
| 235 |
+
'best_fitness': best_fitness,
|
| 236 |
+
'model': deepcopy(ema.ema).half(), # deepcopy(de_parallel(model)).half(),
|
| 237 |
+
'ema': None, # deepcopy(ema.ema).half(),
|
| 238 |
+
'updates': ema.updates,
|
| 239 |
+
'optimizer': None, # optimizer.state_dict(),
|
| 240 |
+
'opt': vars(opt),
|
| 241 |
+
'git': GIT_INFO, # {remote, branch, commit} if a git repo
|
| 242 |
+
'date': datetime.now().isoformat()}
|
| 243 |
+
|
| 244 |
+
# Save last, best and delete
|
| 245 |
+
torch.save(ckpt, last)
|
| 246 |
+
if best_fitness == fitness:
|
| 247 |
+
torch.save(ckpt, best)
|
| 248 |
+
del ckpt
|
| 249 |
+
|
| 250 |
+
# Train complete
|
| 251 |
+
if RANK in {-1, 0} and final_epoch:
|
| 252 |
+
LOGGER.info(f'\nTraining complete ({(time.time() - t0) / 3600:.3f} hours)'
|
| 253 |
+
f"\nResults saved to {colorstr('bold', save_dir)}"
|
| 254 |
+
f'\nPredict: python classify/predict.py --weights {best} --source im.jpg'
|
| 255 |
+
f'\nValidate: python classify/val.py --weights {best} --data {data_dir}'
|
| 256 |
+
f'\nExport: python export.py --weights {best} --include onnx'
|
| 257 |
+
f"\nPyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', '{best}')"
|
| 258 |
+
f'\nVisualize: https://netron.app\n')
|
| 259 |
+
|
| 260 |
+
# Plot examples
|
| 261 |
+
images, labels = (x[:25] for x in next(iter(testloader))) # first 25 images and labels
|
| 262 |
+
pred = torch.max(ema.ema(images.to(device)), 1)[1]
|
| 263 |
+
file = imshow_cls(images, labels, pred, de_parallel(model).names, verbose=False, f=save_dir / 'test_images.jpg')
|
| 264 |
+
|
| 265 |
+
# Log results
|
| 266 |
+
meta = {'epochs': epochs, 'top1_acc': best_fitness, 'date': datetime.now().isoformat()}
|
| 267 |
+
logger.log_images(file, name='Test Examples (true-predicted)', epoch=epoch)
|
| 268 |
+
logger.log_model(best, epochs, metadata=meta)
|
| 269 |
+
|
| 270 |
+
|
| 271 |
+
def parse_opt(known=False):
|
| 272 |
+
parser = argparse.ArgumentParser()
|
| 273 |
+
parser.add_argument('--model', type=str, default='yolov5s-cls.pt', help='initial weights path')
|
| 274 |
+
parser.add_argument('--data', type=str, default='imagenette160', help='cifar10, cifar100, mnist, imagenet, ...')
|
| 275 |
+
parser.add_argument('--epochs', type=int, default=10, help='total training epochs')
|
| 276 |
+
parser.add_argument('--batch-size', type=int, default=64, help='total batch size for all GPUs')
|
| 277 |
+
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=224, help='train, val image size (pixels)')
|
| 278 |
+
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
|
| 279 |
+
parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')
|
| 280 |
+
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
|
| 281 |
+
parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
|
| 282 |
+
parser.add_argument('--project', default=ROOT / 'runs/train-cls', help='save to project/name')
|
| 283 |
+
parser.add_argument('--name', default='exp', help='save to project/name')
|
| 284 |
+
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
|
| 285 |
+
parser.add_argument('--pretrained', nargs='?', const=True, default=True, help='start from i.e. --pretrained False')
|
| 286 |
+
parser.add_argument('--optimizer', choices=['SGD', 'Adam', 'AdamW', 'RMSProp'], default='Adam', help='optimizer')
|
| 287 |
+
parser.add_argument('--lr0', type=float, default=0.001, help='initial learning rate')
|
| 288 |
+
parser.add_argument('--decay', type=float, default=5e-5, help='weight decay')
|
| 289 |
+
parser.add_argument('--label-smoothing', type=float, default=0.1, help='Label smoothing epsilon')
|
| 290 |
+
parser.add_argument('--cutoff', type=int, default=None, help='Model layer cutoff index for Classify() head')
|
| 291 |
+
parser.add_argument('--dropout', type=float, default=None, help='Dropout (fraction)')
|
| 292 |
+
parser.add_argument('--verbose', action='store_true', help='Verbose mode')
|
| 293 |
+
parser.add_argument('--seed', type=int, default=0, help='Global training seed')
|
| 294 |
+
parser.add_argument('--local_rank', type=int, default=-1, help='Automatic DDP Multi-GPU argument, do not modify')
|
| 295 |
+
return parser.parse_known_args()[0] if known else parser.parse_args()
|
| 296 |
+
|
| 297 |
+
|
| 298 |
+
def main(opt):
|
| 299 |
+
# Checks
|
| 300 |
+
if RANK in {-1, 0}:
|
| 301 |
+
print_args(vars(opt))
|
| 302 |
+
check_git_status()
|
| 303 |
+
check_requirements()
|
| 304 |
+
|
| 305 |
+
# DDP mode
|
| 306 |
+
device = select_device(opt.device, batch_size=opt.batch_size)
|
| 307 |
+
if LOCAL_RANK != -1:
|
| 308 |
+
assert opt.batch_size != -1, 'AutoBatch is coming soon for classification, please pass a valid --batch-size'
|
| 309 |
+
assert opt.batch_size % WORLD_SIZE == 0, f'--batch-size {opt.batch_size} must be multiple of WORLD_SIZE'
|
| 310 |
+
assert torch.cuda.device_count() > LOCAL_RANK, 'insufficient CUDA devices for DDP command'
|
| 311 |
+
torch.cuda.set_device(LOCAL_RANK)
|
| 312 |
+
device = torch.device('cuda', LOCAL_RANK)
|
| 313 |
+
dist.init_process_group(backend='nccl' if dist.is_nccl_available() else 'gloo')
|
| 314 |
+
|
| 315 |
+
# Parameters
|
| 316 |
+
opt.save_dir = increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok) # increment run
|
| 317 |
+
|
| 318 |
+
# Train
|
| 319 |
+
train(opt, device)
|
| 320 |
+
|
| 321 |
+
|
| 322 |
+
def run(**kwargs):
|
| 323 |
+
# Usage: from yolov5 import classify; classify.train.run(data=mnist, imgsz=320, model='yolov5m')
|
| 324 |
+
opt = parse_opt(True)
|
| 325 |
+
for k, v in kwargs.items():
|
| 326 |
+
setattr(opt, k, v)
|
| 327 |
+
main(opt)
|
| 328 |
+
return opt
|
| 329 |
+
|
| 330 |
+
|
| 331 |
+
if __name__ == '__main__':
|
| 332 |
+
opt = parse_opt()
|
| 333 |
+
main(opt)
|
yolov5-code-main/classify/tutorial.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
yolov5-code-main/classify/val.py
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
"""
|
| 3 |
+
Validate a trained YOLOv5 classification model on a classification dataset
|
| 4 |
+
|
| 5 |
+
Usage:
|
| 6 |
+
$ bash data/scripts/get_imagenet.sh --val # download ImageNet val split (6.3G, 50000 images)
|
| 7 |
+
$ python classify/val.py --weights yolov5m-cls.pt --data ../datasets/imagenet --img 224 # validate ImageNet
|
| 8 |
+
|
| 9 |
+
Usage - formats:
|
| 10 |
+
$ python classify/val.py --weights yolov5s-cls.pt # PyTorch
|
| 11 |
+
yolov5s-cls.torchscript # TorchScript
|
| 12 |
+
yolov5s-cls.onnx # ONNX Runtime or OpenCV DNN with --dnn
|
| 13 |
+
yolov5s-cls_openvino_model # OpenVINO
|
| 14 |
+
yolov5s-cls.engine # TensorRT
|
| 15 |
+
yolov5s-cls.mlmodel # CoreML (macOS-only)
|
| 16 |
+
yolov5s-cls_saved_model # TensorFlow SavedModel
|
| 17 |
+
yolov5s-cls.pb # TensorFlow GraphDef
|
| 18 |
+
yolov5s-cls.tflite # TensorFlow Lite
|
| 19 |
+
yolov5s-cls_edgetpu.tflite # TensorFlow Edge TPU
|
| 20 |
+
yolov5s-cls_paddle_model # PaddlePaddle
|
| 21 |
+
"""
|
| 22 |
+
|
| 23 |
+
import argparse
|
| 24 |
+
import os
|
| 25 |
+
import sys
|
| 26 |
+
from pathlib import Path
|
| 27 |
+
|
| 28 |
+
import torch
|
| 29 |
+
from tqdm import tqdm
|
| 30 |
+
|
| 31 |
+
FILE = Path(__file__).resolve()
|
| 32 |
+
ROOT = FILE.parents[1] # YOLOv5 root directory
|
| 33 |
+
if str(ROOT) not in sys.path:
|
| 34 |
+
sys.path.append(str(ROOT)) # add ROOT to PATH
|
| 35 |
+
ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative
|
| 36 |
+
|
| 37 |
+
from models.common import DetectMultiBackend
|
| 38 |
+
from utils.dataloaders import create_classification_dataloader
|
| 39 |
+
from utils.general import (LOGGER, TQDM_BAR_FORMAT, Profile, check_img_size, check_requirements, colorstr,
|
| 40 |
+
increment_path, print_args)
|
| 41 |
+
from utils.torch_utils import select_device, smart_inference_mode
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
@smart_inference_mode()
|
| 45 |
+
def run(
|
| 46 |
+
data=ROOT / '../datasets/mnist', # dataset dir
|
| 47 |
+
weights=ROOT / 'yolov5s-cls.pt', # model.pt path(s)
|
| 48 |
+
batch_size=128, # batch size
|
| 49 |
+
imgsz=224, # inference size (pixels)
|
| 50 |
+
device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu
|
| 51 |
+
workers=8, # max dataloader workers (per RANK in DDP mode)
|
| 52 |
+
verbose=False, # verbose output
|
| 53 |
+
project=ROOT / 'runs/val-cls', # save to project/name
|
| 54 |
+
name='exp', # save to project/name
|
| 55 |
+
exist_ok=False, # existing project/name ok, do not increment
|
| 56 |
+
half=False, # use FP16 half-precision inference
|
| 57 |
+
dnn=False, # use OpenCV DNN for ONNX inference
|
| 58 |
+
model=None,
|
| 59 |
+
dataloader=None,
|
| 60 |
+
criterion=None,
|
| 61 |
+
pbar=None,
|
| 62 |
+
):
|
| 63 |
+
# Initialize/load model and set device
|
| 64 |
+
training = model is not None
|
| 65 |
+
if training: # called by train.py
|
| 66 |
+
device, pt, jit, engine = next(model.parameters()).device, True, False, False # get model device, PyTorch model
|
| 67 |
+
half &= device.type != 'cpu' # half precision only supported on CUDA
|
| 68 |
+
model.half() if half else model.float()
|
| 69 |
+
else: # called directly
|
| 70 |
+
device = select_device(device, batch_size=batch_size)
|
| 71 |
+
|
| 72 |
+
# Directories
|
| 73 |
+
save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run
|
| 74 |
+
save_dir.mkdir(parents=True, exist_ok=True) # make dir
|
| 75 |
+
|
| 76 |
+
# Load model
|
| 77 |
+
model = DetectMultiBackend(weights, device=device, dnn=dnn, fp16=half)
|
| 78 |
+
stride, pt, jit, engine = model.stride, model.pt, model.jit, model.engine
|
| 79 |
+
imgsz = check_img_size(imgsz, s=stride) # check image size
|
| 80 |
+
half = model.fp16 # FP16 supported on limited backends with CUDA
|
| 81 |
+
if engine:
|
| 82 |
+
batch_size = model.batch_size
|
| 83 |
+
else:
|
| 84 |
+
device = model.device
|
| 85 |
+
if not (pt or jit):
|
| 86 |
+
batch_size = 1 # export.py models default to batch-size 1
|
| 87 |
+
LOGGER.info(f'Forcing --batch-size 1 square inference (1,3,{imgsz},{imgsz}) for non-PyTorch models')
|
| 88 |
+
|
| 89 |
+
# Dataloader
|
| 90 |
+
data = Path(data)
|
| 91 |
+
test_dir = data / 'test' if (data / 'test').exists() else data / 'val' # data/test or data/val
|
| 92 |
+
dataloader = create_classification_dataloader(path=test_dir,
|
| 93 |
+
imgsz=imgsz,
|
| 94 |
+
batch_size=batch_size,
|
| 95 |
+
augment=False,
|
| 96 |
+
rank=-1,
|
| 97 |
+
workers=workers)
|
| 98 |
+
|
| 99 |
+
model.eval()
|
| 100 |
+
pred, targets, loss, dt = [], [], 0, (Profile(), Profile(), Profile())
|
| 101 |
+
n = len(dataloader) # number of batches
|
| 102 |
+
action = 'validating' if dataloader.dataset.root.stem == 'val' else 'testing'
|
| 103 |
+
desc = f'{pbar.desc[:-36]}{action:>36}' if pbar else f'{action}'
|
| 104 |
+
bar = tqdm(dataloader, desc, n, not training, bar_format=TQDM_BAR_FORMAT, position=0)
|
| 105 |
+
with torch.cuda.amp.autocast(enabled=device.type != 'cpu'):
|
| 106 |
+
for images, labels in bar:
|
| 107 |
+
with dt[0]:
|
| 108 |
+
images, labels = images.to(device, non_blocking=True), labels.to(device)
|
| 109 |
+
|
| 110 |
+
with dt[1]:
|
| 111 |
+
y = model(images)
|
| 112 |
+
|
| 113 |
+
with dt[2]:
|
| 114 |
+
pred.append(y.argsort(1, descending=True)[:, :5])
|
| 115 |
+
targets.append(labels)
|
| 116 |
+
if criterion:
|
| 117 |
+
loss += criterion(y, labels)
|
| 118 |
+
|
| 119 |
+
loss /= n
|
| 120 |
+
pred, targets = torch.cat(pred), torch.cat(targets)
|
| 121 |
+
correct = (targets[:, None] == pred).float()
|
| 122 |
+
acc = torch.stack((correct[:, 0], correct.max(1).values), dim=1) # (top1, top5) accuracy
|
| 123 |
+
top1, top5 = acc.mean(0).tolist()
|
| 124 |
+
|
| 125 |
+
if pbar:
|
| 126 |
+
pbar.desc = f'{pbar.desc[:-36]}{loss:>12.3g}{top1:>12.3g}{top5:>12.3g}'
|
| 127 |
+
if verbose: # all classes
|
| 128 |
+
LOGGER.info(f"{'Class':>24}{'Images':>12}{'top1_acc':>12}{'top5_acc':>12}")
|
| 129 |
+
LOGGER.info(f"{'all':>24}{targets.shape[0]:>12}{top1:>12.3g}{top5:>12.3g}")
|
| 130 |
+
for i, c in model.names.items():
|
| 131 |
+
acc_i = acc[targets == i]
|
| 132 |
+
top1i, top5i = acc_i.mean(0).tolist()
|
| 133 |
+
LOGGER.info(f'{c:>24}{acc_i.shape[0]:>12}{top1i:>12.3g}{top5i:>12.3g}')
|
| 134 |
+
|
| 135 |
+
# Print results
|
| 136 |
+
t = tuple(x.t / len(dataloader.dataset.samples) * 1E3 for x in dt) # speeds per image
|
| 137 |
+
shape = (1, 3, imgsz, imgsz)
|
| 138 |
+
LOGGER.info(f'Speed: %.1fms pre-process, %.1fms inference, %.1fms post-process per image at shape {shape}' % t)
|
| 139 |
+
LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}")
|
| 140 |
+
|
| 141 |
+
return top1, top5, loss
|
| 142 |
+
|
| 143 |
+
|
| 144 |
+
def parse_opt():
|
| 145 |
+
parser = argparse.ArgumentParser()
|
| 146 |
+
parser.add_argument('--data', type=str, default=ROOT / '../datasets/mnist', help='dataset path')
|
| 147 |
+
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s-cls.pt', help='model.pt path(s)')
|
| 148 |
+
parser.add_argument('--batch-size', type=int, default=128, help='batch size')
|
| 149 |
+
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=224, help='inference size (pixels)')
|
| 150 |
+
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
|
| 151 |
+
parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')
|
| 152 |
+
parser.add_argument('--verbose', nargs='?', const=True, default=True, help='verbose output')
|
| 153 |
+
parser.add_argument('--project', default=ROOT / 'runs/val-cls', help='save to project/name')
|
| 154 |
+
parser.add_argument('--name', default='exp', help='save to project/name')
|
| 155 |
+
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
|
| 156 |
+
parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')
|
| 157 |
+
parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')
|
| 158 |
+
opt = parser.parse_args()
|
| 159 |
+
print_args(vars(opt))
|
| 160 |
+
return opt
|
| 161 |
+
|
| 162 |
+
|
| 163 |
+
def main(opt):
|
| 164 |
+
check_requirements(exclude=('tensorboard', 'thop'))
|
| 165 |
+
run(**vars(opt))
|
| 166 |
+
|
| 167 |
+
|
| 168 |
+
if __name__ == '__main__':
|
| 169 |
+
opt = parse_opt()
|
| 170 |
+
main(opt)
|
yolov5-code-main/data/Argoverse.yaml
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Argoverse-HD dataset (ring-front-center camera) http://www.cs.cmu.edu/~mengtial/proj/streaming/ by Argo AI
|
| 3 |
+
# Example usage: python train.py --data Argoverse.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── Argoverse ← downloads here (31.3 GB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/Argoverse # dataset root dir
|
| 12 |
+
train: Argoverse-1.1/images/train/ # train images (relative to 'path') 39384 images
|
| 13 |
+
val: Argoverse-1.1/images/val/ # val images (relative to 'path') 15062 images
|
| 14 |
+
test: Argoverse-1.1/images/test/ # test images (optional) https://eval.ai/web/challenges/challenge-page/800/overview
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: person
|
| 19 |
+
1: bicycle
|
| 20 |
+
2: car
|
| 21 |
+
3: motorcycle
|
| 22 |
+
4: bus
|
| 23 |
+
5: truck
|
| 24 |
+
6: traffic_light
|
| 25 |
+
7: stop_sign
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 29 |
+
download: |
|
| 30 |
+
import json
|
| 31 |
+
|
| 32 |
+
from tqdm import tqdm
|
| 33 |
+
from utils.general import download, Path
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def argoverse2yolo(set):
|
| 37 |
+
labels = {}
|
| 38 |
+
a = json.load(open(set, "rb"))
|
| 39 |
+
for annot in tqdm(a['annotations'], desc=f"Converting {set} to YOLOv5 format..."):
|
| 40 |
+
img_id = annot['image_id']
|
| 41 |
+
img_name = a['images'][img_id]['name']
|
| 42 |
+
img_label_name = f'{img_name[:-3]}txt'
|
| 43 |
+
|
| 44 |
+
cls = annot['category_id'] # instance class id
|
| 45 |
+
x_center, y_center, width, height = annot['bbox']
|
| 46 |
+
x_center = (x_center + width / 2) / 1920.0 # offset and scale
|
| 47 |
+
y_center = (y_center + height / 2) / 1200.0 # offset and scale
|
| 48 |
+
width /= 1920.0 # scale
|
| 49 |
+
height /= 1200.0 # scale
|
| 50 |
+
|
| 51 |
+
img_dir = set.parents[2] / 'Argoverse-1.1' / 'labels' / a['seq_dirs'][a['images'][annot['image_id']]['sid']]
|
| 52 |
+
if not img_dir.exists():
|
| 53 |
+
img_dir.mkdir(parents=True, exist_ok=True)
|
| 54 |
+
|
| 55 |
+
k = str(img_dir / img_label_name)
|
| 56 |
+
if k not in labels:
|
| 57 |
+
labels[k] = []
|
| 58 |
+
labels[k].append(f"{cls} {x_center} {y_center} {width} {height}\n")
|
| 59 |
+
|
| 60 |
+
for k in labels:
|
| 61 |
+
with open(k, "w") as f:
|
| 62 |
+
f.writelines(labels[k])
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
# Download
|
| 66 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 67 |
+
urls = ['https://argoverse-hd.s3.us-east-2.amazonaws.com/Argoverse-HD-Full.zip']
|
| 68 |
+
download(urls, dir=dir, delete=False)
|
| 69 |
+
|
| 70 |
+
# Convert
|
| 71 |
+
annotations_dir = 'Argoverse-HD/annotations/'
|
| 72 |
+
(dir / 'Argoverse-1.1' / 'tracking').rename(dir / 'Argoverse-1.1' / 'images') # rename 'tracking' to 'images'
|
| 73 |
+
for d in "train.json", "val.json":
|
| 74 |
+
argoverse2yolo(dir / annotations_dir / d) # convert VisDrone annotations to YOLO labels
|
yolov5-code-main/data/GlobalWheat2020.yaml
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Global Wheat 2020 dataset http://www.global-wheat.com/ by University of Saskatchewan
|
| 3 |
+
# Example usage: python train.py --data GlobalWheat2020.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── GlobalWheat2020 ← downloads here (7.0 GB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/GlobalWheat2020 # dataset root dir
|
| 12 |
+
train: # train images (relative to 'path') 3422 images
|
| 13 |
+
- images/arvalis_1
|
| 14 |
+
- images/arvalis_2
|
| 15 |
+
- images/arvalis_3
|
| 16 |
+
- images/ethz_1
|
| 17 |
+
- images/rres_1
|
| 18 |
+
- images/inrae_1
|
| 19 |
+
- images/usask_1
|
| 20 |
+
val: # val images (relative to 'path') 748 images (WARNING: train set contains ethz_1)
|
| 21 |
+
- images/ethz_1
|
| 22 |
+
test: # test images (optional) 1276 images
|
| 23 |
+
- images/utokyo_1
|
| 24 |
+
- images/utokyo_2
|
| 25 |
+
- images/nau_1
|
| 26 |
+
- images/uq_1
|
| 27 |
+
|
| 28 |
+
# Classes
|
| 29 |
+
names:
|
| 30 |
+
0: wheat_head
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 34 |
+
download: |
|
| 35 |
+
from utils.general import download, Path
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
# Download
|
| 39 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 40 |
+
urls = ['https://zenodo.org/record/4298502/files/global-wheat-codalab-official.zip',
|
| 41 |
+
'https://github.com/ultralytics/yolov5/releases/download/v1.0/GlobalWheat2020_labels.zip']
|
| 42 |
+
download(urls, dir=dir)
|
| 43 |
+
|
| 44 |
+
# Make Directories
|
| 45 |
+
for p in 'annotations', 'images', 'labels':
|
| 46 |
+
(dir / p).mkdir(parents=True, exist_ok=True)
|
| 47 |
+
|
| 48 |
+
# Move
|
| 49 |
+
for p in 'arvalis_1', 'arvalis_2', 'arvalis_3', 'ethz_1', 'rres_1', 'inrae_1', 'usask_1', \
|
| 50 |
+
'utokyo_1', 'utokyo_2', 'nau_1', 'uq_1':
|
| 51 |
+
(dir / p).rename(dir / 'images' / p) # move to /images
|
| 52 |
+
f = (dir / p).with_suffix('.json') # json file
|
| 53 |
+
if f.exists():
|
| 54 |
+
f.rename((dir / 'annotations' / p).with_suffix('.json')) # move to /annotations
|
yolov5-code-main/data/ImageNet.yaml
ADDED
|
@@ -0,0 +1,1022 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# ImageNet-1k dataset https://www.image-net.org/index.php by Stanford University
|
| 3 |
+
# Simplified class names from https://github.com/anishathalye/imagenet-simple-labels
|
| 4 |
+
# Example usage: python classify/train.py --data imagenet
|
| 5 |
+
# parent
|
| 6 |
+
# ├── yolov5
|
| 7 |
+
# └── datasets
|
| 8 |
+
# └── imagenet ← downloads here (144 GB)
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 12 |
+
path: ../datasets/imagenet # dataset root dir
|
| 13 |
+
train: train # train images (relative to 'path') 1281167 images
|
| 14 |
+
val: val # val images (relative to 'path') 50000 images
|
| 15 |
+
test: # test images (optional)
|
| 16 |
+
|
| 17 |
+
# Classes
|
| 18 |
+
names:
|
| 19 |
+
0: tench
|
| 20 |
+
1: goldfish
|
| 21 |
+
2: great white shark
|
| 22 |
+
3: tiger shark
|
| 23 |
+
4: hammerhead shark
|
| 24 |
+
5: electric ray
|
| 25 |
+
6: stingray
|
| 26 |
+
7: cock
|
| 27 |
+
8: hen
|
| 28 |
+
9: ostrich
|
| 29 |
+
10: brambling
|
| 30 |
+
11: goldfinch
|
| 31 |
+
12: house finch
|
| 32 |
+
13: junco
|
| 33 |
+
14: indigo bunting
|
| 34 |
+
15: American robin
|
| 35 |
+
16: bulbul
|
| 36 |
+
17: jay
|
| 37 |
+
18: magpie
|
| 38 |
+
19: chickadee
|
| 39 |
+
20: American dipper
|
| 40 |
+
21: kite
|
| 41 |
+
22: bald eagle
|
| 42 |
+
23: vulture
|
| 43 |
+
24: great grey owl
|
| 44 |
+
25: fire salamander
|
| 45 |
+
26: smooth newt
|
| 46 |
+
27: newt
|
| 47 |
+
28: spotted salamander
|
| 48 |
+
29: axolotl
|
| 49 |
+
30: American bullfrog
|
| 50 |
+
31: tree frog
|
| 51 |
+
32: tailed frog
|
| 52 |
+
33: loggerhead sea turtle
|
| 53 |
+
34: leatherback sea turtle
|
| 54 |
+
35: mud turtle
|
| 55 |
+
36: terrapin
|
| 56 |
+
37: box turtle
|
| 57 |
+
38: banded gecko
|
| 58 |
+
39: green iguana
|
| 59 |
+
40: Carolina anole
|
| 60 |
+
41: desert grassland whiptail lizard
|
| 61 |
+
42: agama
|
| 62 |
+
43: frilled-necked lizard
|
| 63 |
+
44: alligator lizard
|
| 64 |
+
45: Gila monster
|
| 65 |
+
46: European green lizard
|
| 66 |
+
47: chameleon
|
| 67 |
+
48: Komodo dragon
|
| 68 |
+
49: Nile crocodile
|
| 69 |
+
50: American alligator
|
| 70 |
+
51: triceratops
|
| 71 |
+
52: worm snake
|
| 72 |
+
53: ring-necked snake
|
| 73 |
+
54: eastern hog-nosed snake
|
| 74 |
+
55: smooth green snake
|
| 75 |
+
56: kingsnake
|
| 76 |
+
57: garter snake
|
| 77 |
+
58: water snake
|
| 78 |
+
59: vine snake
|
| 79 |
+
60: night snake
|
| 80 |
+
61: boa constrictor
|
| 81 |
+
62: African rock python
|
| 82 |
+
63: Indian cobra
|
| 83 |
+
64: green mamba
|
| 84 |
+
65: sea snake
|
| 85 |
+
66: Saharan horned viper
|
| 86 |
+
67: eastern diamondback rattlesnake
|
| 87 |
+
68: sidewinder
|
| 88 |
+
69: trilobite
|
| 89 |
+
70: harvestman
|
| 90 |
+
71: scorpion
|
| 91 |
+
72: yellow garden spider
|
| 92 |
+
73: barn spider
|
| 93 |
+
74: European garden spider
|
| 94 |
+
75: southern black widow
|
| 95 |
+
76: tarantula
|
| 96 |
+
77: wolf spider
|
| 97 |
+
78: tick
|
| 98 |
+
79: centipede
|
| 99 |
+
80: black grouse
|
| 100 |
+
81: ptarmigan
|
| 101 |
+
82: ruffed grouse
|
| 102 |
+
83: prairie grouse
|
| 103 |
+
84: peacock
|
| 104 |
+
85: quail
|
| 105 |
+
86: partridge
|
| 106 |
+
87: grey parrot
|
| 107 |
+
88: macaw
|
| 108 |
+
89: sulphur-crested cockatoo
|
| 109 |
+
90: lorikeet
|
| 110 |
+
91: coucal
|
| 111 |
+
92: bee eater
|
| 112 |
+
93: hornbill
|
| 113 |
+
94: hummingbird
|
| 114 |
+
95: jacamar
|
| 115 |
+
96: toucan
|
| 116 |
+
97: duck
|
| 117 |
+
98: red-breasted merganser
|
| 118 |
+
99: goose
|
| 119 |
+
100: black swan
|
| 120 |
+
101: tusker
|
| 121 |
+
102: echidna
|
| 122 |
+
103: platypus
|
| 123 |
+
104: wallaby
|
| 124 |
+
105: koala
|
| 125 |
+
106: wombat
|
| 126 |
+
107: jellyfish
|
| 127 |
+
108: sea anemone
|
| 128 |
+
109: brain coral
|
| 129 |
+
110: flatworm
|
| 130 |
+
111: nematode
|
| 131 |
+
112: conch
|
| 132 |
+
113: snail
|
| 133 |
+
114: slug
|
| 134 |
+
115: sea slug
|
| 135 |
+
116: chiton
|
| 136 |
+
117: chambered nautilus
|
| 137 |
+
118: Dungeness crab
|
| 138 |
+
119: rock crab
|
| 139 |
+
120: fiddler crab
|
| 140 |
+
121: red king crab
|
| 141 |
+
122: American lobster
|
| 142 |
+
123: spiny lobster
|
| 143 |
+
124: crayfish
|
| 144 |
+
125: hermit crab
|
| 145 |
+
126: isopod
|
| 146 |
+
127: white stork
|
| 147 |
+
128: black stork
|
| 148 |
+
129: spoonbill
|
| 149 |
+
130: flamingo
|
| 150 |
+
131: little blue heron
|
| 151 |
+
132: great egret
|
| 152 |
+
133: bittern
|
| 153 |
+
134: crane (bird)
|
| 154 |
+
135: limpkin
|
| 155 |
+
136: common gallinule
|
| 156 |
+
137: American coot
|
| 157 |
+
138: bustard
|
| 158 |
+
139: ruddy turnstone
|
| 159 |
+
140: dunlin
|
| 160 |
+
141: common redshank
|
| 161 |
+
142: dowitcher
|
| 162 |
+
143: oystercatcher
|
| 163 |
+
144: pelican
|
| 164 |
+
145: king penguin
|
| 165 |
+
146: albatross
|
| 166 |
+
147: grey whale
|
| 167 |
+
148: killer whale
|
| 168 |
+
149: dugong
|
| 169 |
+
150: sea lion
|
| 170 |
+
151: Chihuahua
|
| 171 |
+
152: Japanese Chin
|
| 172 |
+
153: Maltese
|
| 173 |
+
154: Pekingese
|
| 174 |
+
155: Shih Tzu
|
| 175 |
+
156: King Charles Spaniel
|
| 176 |
+
157: Papillon
|
| 177 |
+
158: toy terrier
|
| 178 |
+
159: Rhodesian Ridgeback
|
| 179 |
+
160: Afghan Hound
|
| 180 |
+
161: Basset Hound
|
| 181 |
+
162: Beagle
|
| 182 |
+
163: Bloodhound
|
| 183 |
+
164: Bluetick Coonhound
|
| 184 |
+
165: Black and Tan Coonhound
|
| 185 |
+
166: Treeing Walker Coonhound
|
| 186 |
+
167: English foxhound
|
| 187 |
+
168: Redbone Coonhound
|
| 188 |
+
169: borzoi
|
| 189 |
+
170: Irish Wolfhound
|
| 190 |
+
171: Italian Greyhound
|
| 191 |
+
172: Whippet
|
| 192 |
+
173: Ibizan Hound
|
| 193 |
+
174: Norwegian Elkhound
|
| 194 |
+
175: Otterhound
|
| 195 |
+
176: Saluki
|
| 196 |
+
177: Scottish Deerhound
|
| 197 |
+
178: Weimaraner
|
| 198 |
+
179: Staffordshire Bull Terrier
|
| 199 |
+
180: American Staffordshire Terrier
|
| 200 |
+
181: Bedlington Terrier
|
| 201 |
+
182: Border Terrier
|
| 202 |
+
183: Kerry Blue Terrier
|
| 203 |
+
184: Irish Terrier
|
| 204 |
+
185: Norfolk Terrier
|
| 205 |
+
186: Norwich Terrier
|
| 206 |
+
187: Yorkshire Terrier
|
| 207 |
+
188: Wire Fox Terrier
|
| 208 |
+
189: Lakeland Terrier
|
| 209 |
+
190: Sealyham Terrier
|
| 210 |
+
191: Airedale Terrier
|
| 211 |
+
192: Cairn Terrier
|
| 212 |
+
193: Australian Terrier
|
| 213 |
+
194: Dandie Dinmont Terrier
|
| 214 |
+
195: Boston Terrier
|
| 215 |
+
196: Miniature Schnauzer
|
| 216 |
+
197: Giant Schnauzer
|
| 217 |
+
198: Standard Schnauzer
|
| 218 |
+
199: Scottish Terrier
|
| 219 |
+
200: Tibetan Terrier
|
| 220 |
+
201: Australian Silky Terrier
|
| 221 |
+
202: Soft-coated Wheaten Terrier
|
| 222 |
+
203: West Highland White Terrier
|
| 223 |
+
204: Lhasa Apso
|
| 224 |
+
205: Flat-Coated Retriever
|
| 225 |
+
206: Curly-coated Retriever
|
| 226 |
+
207: Golden Retriever
|
| 227 |
+
208: Labrador Retriever
|
| 228 |
+
209: Chesapeake Bay Retriever
|
| 229 |
+
210: German Shorthaired Pointer
|
| 230 |
+
211: Vizsla
|
| 231 |
+
212: English Setter
|
| 232 |
+
213: Irish Setter
|
| 233 |
+
214: Gordon Setter
|
| 234 |
+
215: Brittany
|
| 235 |
+
216: Clumber Spaniel
|
| 236 |
+
217: English Springer Spaniel
|
| 237 |
+
218: Welsh Springer Spaniel
|
| 238 |
+
219: Cocker Spaniels
|
| 239 |
+
220: Sussex Spaniel
|
| 240 |
+
221: Irish Water Spaniel
|
| 241 |
+
222: Kuvasz
|
| 242 |
+
223: Schipperke
|
| 243 |
+
224: Groenendael
|
| 244 |
+
225: Malinois
|
| 245 |
+
226: Briard
|
| 246 |
+
227: Australian Kelpie
|
| 247 |
+
228: Komondor
|
| 248 |
+
229: Old English Sheepdog
|
| 249 |
+
230: Shetland Sheepdog
|
| 250 |
+
231: collie
|
| 251 |
+
232: Border Collie
|
| 252 |
+
233: Bouvier des Flandres
|
| 253 |
+
234: Rottweiler
|
| 254 |
+
235: German Shepherd Dog
|
| 255 |
+
236: Dobermann
|
| 256 |
+
237: Miniature Pinscher
|
| 257 |
+
238: Greater Swiss Mountain Dog
|
| 258 |
+
239: Bernese Mountain Dog
|
| 259 |
+
240: Appenzeller Sennenhund
|
| 260 |
+
241: Entlebucher Sennenhund
|
| 261 |
+
242: Boxer
|
| 262 |
+
243: Bullmastiff
|
| 263 |
+
244: Tibetan Mastiff
|
| 264 |
+
245: French Bulldog
|
| 265 |
+
246: Great Dane
|
| 266 |
+
247: St. Bernard
|
| 267 |
+
248: husky
|
| 268 |
+
249: Alaskan Malamute
|
| 269 |
+
250: Siberian Husky
|
| 270 |
+
251: Dalmatian
|
| 271 |
+
252: Affenpinscher
|
| 272 |
+
253: Basenji
|
| 273 |
+
254: pug
|
| 274 |
+
255: Leonberger
|
| 275 |
+
256: Newfoundland
|
| 276 |
+
257: Pyrenean Mountain Dog
|
| 277 |
+
258: Samoyed
|
| 278 |
+
259: Pomeranian
|
| 279 |
+
260: Chow Chow
|
| 280 |
+
261: Keeshond
|
| 281 |
+
262: Griffon Bruxellois
|
| 282 |
+
263: Pembroke Welsh Corgi
|
| 283 |
+
264: Cardigan Welsh Corgi
|
| 284 |
+
265: Toy Poodle
|
| 285 |
+
266: Miniature Poodle
|
| 286 |
+
267: Standard Poodle
|
| 287 |
+
268: Mexican hairless dog
|
| 288 |
+
269: grey wolf
|
| 289 |
+
270: Alaskan tundra wolf
|
| 290 |
+
271: red wolf
|
| 291 |
+
272: coyote
|
| 292 |
+
273: dingo
|
| 293 |
+
274: dhole
|
| 294 |
+
275: African wild dog
|
| 295 |
+
276: hyena
|
| 296 |
+
277: red fox
|
| 297 |
+
278: kit fox
|
| 298 |
+
279: Arctic fox
|
| 299 |
+
280: grey fox
|
| 300 |
+
281: tabby cat
|
| 301 |
+
282: tiger cat
|
| 302 |
+
283: Persian cat
|
| 303 |
+
284: Siamese cat
|
| 304 |
+
285: Egyptian Mau
|
| 305 |
+
286: cougar
|
| 306 |
+
287: lynx
|
| 307 |
+
288: leopard
|
| 308 |
+
289: snow leopard
|
| 309 |
+
290: jaguar
|
| 310 |
+
291: lion
|
| 311 |
+
292: tiger
|
| 312 |
+
293: cheetah
|
| 313 |
+
294: brown bear
|
| 314 |
+
295: American black bear
|
| 315 |
+
296: polar bear
|
| 316 |
+
297: sloth bear
|
| 317 |
+
298: mongoose
|
| 318 |
+
299: meerkat
|
| 319 |
+
300: tiger beetle
|
| 320 |
+
301: ladybug
|
| 321 |
+
302: ground beetle
|
| 322 |
+
303: longhorn beetle
|
| 323 |
+
304: leaf beetle
|
| 324 |
+
305: dung beetle
|
| 325 |
+
306: rhinoceros beetle
|
| 326 |
+
307: weevil
|
| 327 |
+
308: fly
|
| 328 |
+
309: bee
|
| 329 |
+
310: ant
|
| 330 |
+
311: grasshopper
|
| 331 |
+
312: cricket
|
| 332 |
+
313: stick insect
|
| 333 |
+
314: cockroach
|
| 334 |
+
315: mantis
|
| 335 |
+
316: cicada
|
| 336 |
+
317: leafhopper
|
| 337 |
+
318: lacewing
|
| 338 |
+
319: dragonfly
|
| 339 |
+
320: damselfly
|
| 340 |
+
321: red admiral
|
| 341 |
+
322: ringlet
|
| 342 |
+
323: monarch butterfly
|
| 343 |
+
324: small white
|
| 344 |
+
325: sulphur butterfly
|
| 345 |
+
326: gossamer-winged butterfly
|
| 346 |
+
327: starfish
|
| 347 |
+
328: sea urchin
|
| 348 |
+
329: sea cucumber
|
| 349 |
+
330: cottontail rabbit
|
| 350 |
+
331: hare
|
| 351 |
+
332: Angora rabbit
|
| 352 |
+
333: hamster
|
| 353 |
+
334: porcupine
|
| 354 |
+
335: fox squirrel
|
| 355 |
+
336: marmot
|
| 356 |
+
337: beaver
|
| 357 |
+
338: guinea pig
|
| 358 |
+
339: common sorrel
|
| 359 |
+
340: zebra
|
| 360 |
+
341: pig
|
| 361 |
+
342: wild boar
|
| 362 |
+
343: warthog
|
| 363 |
+
344: hippopotamus
|
| 364 |
+
345: ox
|
| 365 |
+
346: water buffalo
|
| 366 |
+
347: bison
|
| 367 |
+
348: ram
|
| 368 |
+
349: bighorn sheep
|
| 369 |
+
350: Alpine ibex
|
| 370 |
+
351: hartebeest
|
| 371 |
+
352: impala
|
| 372 |
+
353: gazelle
|
| 373 |
+
354: dromedary
|
| 374 |
+
355: llama
|
| 375 |
+
356: weasel
|
| 376 |
+
357: mink
|
| 377 |
+
358: European polecat
|
| 378 |
+
359: black-footed ferret
|
| 379 |
+
360: otter
|
| 380 |
+
361: skunk
|
| 381 |
+
362: badger
|
| 382 |
+
363: armadillo
|
| 383 |
+
364: three-toed sloth
|
| 384 |
+
365: orangutan
|
| 385 |
+
366: gorilla
|
| 386 |
+
367: chimpanzee
|
| 387 |
+
368: gibbon
|
| 388 |
+
369: siamang
|
| 389 |
+
370: guenon
|
| 390 |
+
371: patas monkey
|
| 391 |
+
372: baboon
|
| 392 |
+
373: macaque
|
| 393 |
+
374: langur
|
| 394 |
+
375: black-and-white colobus
|
| 395 |
+
376: proboscis monkey
|
| 396 |
+
377: marmoset
|
| 397 |
+
378: white-headed capuchin
|
| 398 |
+
379: howler monkey
|
| 399 |
+
380: titi
|
| 400 |
+
381: Geoffroy's spider monkey
|
| 401 |
+
382: common squirrel monkey
|
| 402 |
+
383: ring-tailed lemur
|
| 403 |
+
384: indri
|
| 404 |
+
385: Asian elephant
|
| 405 |
+
386: African bush elephant
|
| 406 |
+
387: red panda
|
| 407 |
+
388: giant panda
|
| 408 |
+
389: snoek
|
| 409 |
+
390: eel
|
| 410 |
+
391: coho salmon
|
| 411 |
+
392: rock beauty
|
| 412 |
+
393: clownfish
|
| 413 |
+
394: sturgeon
|
| 414 |
+
395: garfish
|
| 415 |
+
396: lionfish
|
| 416 |
+
397: pufferfish
|
| 417 |
+
398: abacus
|
| 418 |
+
399: abaya
|
| 419 |
+
400: academic gown
|
| 420 |
+
401: accordion
|
| 421 |
+
402: acoustic guitar
|
| 422 |
+
403: aircraft carrier
|
| 423 |
+
404: airliner
|
| 424 |
+
405: airship
|
| 425 |
+
406: altar
|
| 426 |
+
407: ambulance
|
| 427 |
+
408: amphibious vehicle
|
| 428 |
+
409: analog clock
|
| 429 |
+
410: apiary
|
| 430 |
+
411: apron
|
| 431 |
+
412: waste container
|
| 432 |
+
413: assault rifle
|
| 433 |
+
414: backpack
|
| 434 |
+
415: bakery
|
| 435 |
+
416: balance beam
|
| 436 |
+
417: balloon
|
| 437 |
+
418: ballpoint pen
|
| 438 |
+
419: Band-Aid
|
| 439 |
+
420: banjo
|
| 440 |
+
421: baluster
|
| 441 |
+
422: barbell
|
| 442 |
+
423: barber chair
|
| 443 |
+
424: barbershop
|
| 444 |
+
425: barn
|
| 445 |
+
426: barometer
|
| 446 |
+
427: barrel
|
| 447 |
+
428: wheelbarrow
|
| 448 |
+
429: baseball
|
| 449 |
+
430: basketball
|
| 450 |
+
431: bassinet
|
| 451 |
+
432: bassoon
|
| 452 |
+
433: swimming cap
|
| 453 |
+
434: bath towel
|
| 454 |
+
435: bathtub
|
| 455 |
+
436: station wagon
|
| 456 |
+
437: lighthouse
|
| 457 |
+
438: beaker
|
| 458 |
+
439: military cap
|
| 459 |
+
440: beer bottle
|
| 460 |
+
441: beer glass
|
| 461 |
+
442: bell-cot
|
| 462 |
+
443: bib
|
| 463 |
+
444: tandem bicycle
|
| 464 |
+
445: bikini
|
| 465 |
+
446: ring binder
|
| 466 |
+
447: binoculars
|
| 467 |
+
448: birdhouse
|
| 468 |
+
449: boathouse
|
| 469 |
+
450: bobsleigh
|
| 470 |
+
451: bolo tie
|
| 471 |
+
452: poke bonnet
|
| 472 |
+
453: bookcase
|
| 473 |
+
454: bookstore
|
| 474 |
+
455: bottle cap
|
| 475 |
+
456: bow
|
| 476 |
+
457: bow tie
|
| 477 |
+
458: brass
|
| 478 |
+
459: bra
|
| 479 |
+
460: breakwater
|
| 480 |
+
461: breastplate
|
| 481 |
+
462: broom
|
| 482 |
+
463: bucket
|
| 483 |
+
464: buckle
|
| 484 |
+
465: bulletproof vest
|
| 485 |
+
466: high-speed train
|
| 486 |
+
467: butcher shop
|
| 487 |
+
468: taxicab
|
| 488 |
+
469: cauldron
|
| 489 |
+
470: candle
|
| 490 |
+
471: cannon
|
| 491 |
+
472: canoe
|
| 492 |
+
473: can opener
|
| 493 |
+
474: cardigan
|
| 494 |
+
475: car mirror
|
| 495 |
+
476: carousel
|
| 496 |
+
477: tool kit
|
| 497 |
+
478: carton
|
| 498 |
+
479: car wheel
|
| 499 |
+
480: automated teller machine
|
| 500 |
+
481: cassette
|
| 501 |
+
482: cassette player
|
| 502 |
+
483: castle
|
| 503 |
+
484: catamaran
|
| 504 |
+
485: CD player
|
| 505 |
+
486: cello
|
| 506 |
+
487: mobile phone
|
| 507 |
+
488: chain
|
| 508 |
+
489: chain-link fence
|
| 509 |
+
490: chain mail
|
| 510 |
+
491: chainsaw
|
| 511 |
+
492: chest
|
| 512 |
+
493: chiffonier
|
| 513 |
+
494: chime
|
| 514 |
+
495: china cabinet
|
| 515 |
+
496: Christmas stocking
|
| 516 |
+
497: church
|
| 517 |
+
498: movie theater
|
| 518 |
+
499: cleaver
|
| 519 |
+
500: cliff dwelling
|
| 520 |
+
501: cloak
|
| 521 |
+
502: clogs
|
| 522 |
+
503: cocktail shaker
|
| 523 |
+
504: coffee mug
|
| 524 |
+
505: coffeemaker
|
| 525 |
+
506: coil
|
| 526 |
+
507: combination lock
|
| 527 |
+
508: computer keyboard
|
| 528 |
+
509: confectionery store
|
| 529 |
+
510: container ship
|
| 530 |
+
511: convertible
|
| 531 |
+
512: corkscrew
|
| 532 |
+
513: cornet
|
| 533 |
+
514: cowboy boot
|
| 534 |
+
515: cowboy hat
|
| 535 |
+
516: cradle
|
| 536 |
+
517: crane (machine)
|
| 537 |
+
518: crash helmet
|
| 538 |
+
519: crate
|
| 539 |
+
520: infant bed
|
| 540 |
+
521: Crock Pot
|
| 541 |
+
522: croquet ball
|
| 542 |
+
523: crutch
|
| 543 |
+
524: cuirass
|
| 544 |
+
525: dam
|
| 545 |
+
526: desk
|
| 546 |
+
527: desktop computer
|
| 547 |
+
528: rotary dial telephone
|
| 548 |
+
529: diaper
|
| 549 |
+
530: digital clock
|
| 550 |
+
531: digital watch
|
| 551 |
+
532: dining table
|
| 552 |
+
533: dishcloth
|
| 553 |
+
534: dishwasher
|
| 554 |
+
535: disc brake
|
| 555 |
+
536: dock
|
| 556 |
+
537: dog sled
|
| 557 |
+
538: dome
|
| 558 |
+
539: doormat
|
| 559 |
+
540: drilling rig
|
| 560 |
+
541: drum
|
| 561 |
+
542: drumstick
|
| 562 |
+
543: dumbbell
|
| 563 |
+
544: Dutch oven
|
| 564 |
+
545: electric fan
|
| 565 |
+
546: electric guitar
|
| 566 |
+
547: electric locomotive
|
| 567 |
+
548: entertainment center
|
| 568 |
+
549: envelope
|
| 569 |
+
550: espresso machine
|
| 570 |
+
551: face powder
|
| 571 |
+
552: feather boa
|
| 572 |
+
553: filing cabinet
|
| 573 |
+
554: fireboat
|
| 574 |
+
555: fire engine
|
| 575 |
+
556: fire screen sheet
|
| 576 |
+
557: flagpole
|
| 577 |
+
558: flute
|
| 578 |
+
559: folding chair
|
| 579 |
+
560: football helmet
|
| 580 |
+
561: forklift
|
| 581 |
+
562: fountain
|
| 582 |
+
563: fountain pen
|
| 583 |
+
564: four-poster bed
|
| 584 |
+
565: freight car
|
| 585 |
+
566: French horn
|
| 586 |
+
567: frying pan
|
| 587 |
+
568: fur coat
|
| 588 |
+
569: garbage truck
|
| 589 |
+
570: gas mask
|
| 590 |
+
571: gas pump
|
| 591 |
+
572: goblet
|
| 592 |
+
573: go-kart
|
| 593 |
+
574: golf ball
|
| 594 |
+
575: golf cart
|
| 595 |
+
576: gondola
|
| 596 |
+
577: gong
|
| 597 |
+
578: gown
|
| 598 |
+
579: grand piano
|
| 599 |
+
580: greenhouse
|
| 600 |
+
581: grille
|
| 601 |
+
582: grocery store
|
| 602 |
+
583: guillotine
|
| 603 |
+
584: barrette
|
| 604 |
+
585: hair spray
|
| 605 |
+
586: half-track
|
| 606 |
+
587: hammer
|
| 607 |
+
588: hamper
|
| 608 |
+
589: hair dryer
|
| 609 |
+
590: hand-held computer
|
| 610 |
+
591: handkerchief
|
| 611 |
+
592: hard disk drive
|
| 612 |
+
593: harmonica
|
| 613 |
+
594: harp
|
| 614 |
+
595: harvester
|
| 615 |
+
596: hatchet
|
| 616 |
+
597: holster
|
| 617 |
+
598: home theater
|
| 618 |
+
599: honeycomb
|
| 619 |
+
600: hook
|
| 620 |
+
601: hoop skirt
|
| 621 |
+
602: horizontal bar
|
| 622 |
+
603: horse-drawn vehicle
|
| 623 |
+
604: hourglass
|
| 624 |
+
605: iPod
|
| 625 |
+
606: clothes iron
|
| 626 |
+
607: jack-o'-lantern
|
| 627 |
+
608: jeans
|
| 628 |
+
609: jeep
|
| 629 |
+
610: T-shirt
|
| 630 |
+
611: jigsaw puzzle
|
| 631 |
+
612: pulled rickshaw
|
| 632 |
+
613: joystick
|
| 633 |
+
614: kimono
|
| 634 |
+
615: knee pad
|
| 635 |
+
616: knot
|
| 636 |
+
617: lab coat
|
| 637 |
+
618: ladle
|
| 638 |
+
619: lampshade
|
| 639 |
+
620: laptop computer
|
| 640 |
+
621: lawn mower
|
| 641 |
+
622: lens cap
|
| 642 |
+
623: paper knife
|
| 643 |
+
624: library
|
| 644 |
+
625: lifeboat
|
| 645 |
+
626: lighter
|
| 646 |
+
627: limousine
|
| 647 |
+
628: ocean liner
|
| 648 |
+
629: lipstick
|
| 649 |
+
630: slip-on shoe
|
| 650 |
+
631: lotion
|
| 651 |
+
632: speaker
|
| 652 |
+
633: loupe
|
| 653 |
+
634: sawmill
|
| 654 |
+
635: magnetic compass
|
| 655 |
+
636: mail bag
|
| 656 |
+
637: mailbox
|
| 657 |
+
638: tights
|
| 658 |
+
639: tank suit
|
| 659 |
+
640: manhole cover
|
| 660 |
+
641: maraca
|
| 661 |
+
642: marimba
|
| 662 |
+
643: mask
|
| 663 |
+
644: match
|
| 664 |
+
645: maypole
|
| 665 |
+
646: maze
|
| 666 |
+
647: measuring cup
|
| 667 |
+
648: medicine chest
|
| 668 |
+
649: megalith
|
| 669 |
+
650: microphone
|
| 670 |
+
651: microwave oven
|
| 671 |
+
652: military uniform
|
| 672 |
+
653: milk can
|
| 673 |
+
654: minibus
|
| 674 |
+
655: miniskirt
|
| 675 |
+
656: minivan
|
| 676 |
+
657: missile
|
| 677 |
+
658: mitten
|
| 678 |
+
659: mixing bowl
|
| 679 |
+
660: mobile home
|
| 680 |
+
661: Model T
|
| 681 |
+
662: modem
|
| 682 |
+
663: monastery
|
| 683 |
+
664: monitor
|
| 684 |
+
665: moped
|
| 685 |
+
666: mortar
|
| 686 |
+
667: square academic cap
|
| 687 |
+
668: mosque
|
| 688 |
+
669: mosquito net
|
| 689 |
+
670: scooter
|
| 690 |
+
671: mountain bike
|
| 691 |
+
672: tent
|
| 692 |
+
673: computer mouse
|
| 693 |
+
674: mousetrap
|
| 694 |
+
675: moving van
|
| 695 |
+
676: muzzle
|
| 696 |
+
677: nail
|
| 697 |
+
678: neck brace
|
| 698 |
+
679: necklace
|
| 699 |
+
680: nipple
|
| 700 |
+
681: notebook computer
|
| 701 |
+
682: obelisk
|
| 702 |
+
683: oboe
|
| 703 |
+
684: ocarina
|
| 704 |
+
685: odometer
|
| 705 |
+
686: oil filter
|
| 706 |
+
687: organ
|
| 707 |
+
688: oscilloscope
|
| 708 |
+
689: overskirt
|
| 709 |
+
690: bullock cart
|
| 710 |
+
691: oxygen mask
|
| 711 |
+
692: packet
|
| 712 |
+
693: paddle
|
| 713 |
+
694: paddle wheel
|
| 714 |
+
695: padlock
|
| 715 |
+
696: paintbrush
|
| 716 |
+
697: pajamas
|
| 717 |
+
698: palace
|
| 718 |
+
699: pan flute
|
| 719 |
+
700: paper towel
|
| 720 |
+
701: parachute
|
| 721 |
+
702: parallel bars
|
| 722 |
+
703: park bench
|
| 723 |
+
704: parking meter
|
| 724 |
+
705: passenger car
|
| 725 |
+
706: patio
|
| 726 |
+
707: payphone
|
| 727 |
+
708: pedestal
|
| 728 |
+
709: pencil case
|
| 729 |
+
710: pencil sharpener
|
| 730 |
+
711: perfume
|
| 731 |
+
712: Petri dish
|
| 732 |
+
713: photocopier
|
| 733 |
+
714: plectrum
|
| 734 |
+
715: Pickelhaube
|
| 735 |
+
716: picket fence
|
| 736 |
+
717: pickup truck
|
| 737 |
+
718: pier
|
| 738 |
+
719: piggy bank
|
| 739 |
+
720: pill bottle
|
| 740 |
+
721: pillow
|
| 741 |
+
722: ping-pong ball
|
| 742 |
+
723: pinwheel
|
| 743 |
+
724: pirate ship
|
| 744 |
+
725: pitcher
|
| 745 |
+
726: hand plane
|
| 746 |
+
727: planetarium
|
| 747 |
+
728: plastic bag
|
| 748 |
+
729: plate rack
|
| 749 |
+
730: plow
|
| 750 |
+
731: plunger
|
| 751 |
+
732: Polaroid camera
|
| 752 |
+
733: pole
|
| 753 |
+
734: police van
|
| 754 |
+
735: poncho
|
| 755 |
+
736: billiard table
|
| 756 |
+
737: soda bottle
|
| 757 |
+
738: pot
|
| 758 |
+
739: potter's wheel
|
| 759 |
+
740: power drill
|
| 760 |
+
741: prayer rug
|
| 761 |
+
742: printer
|
| 762 |
+
743: prison
|
| 763 |
+
744: projectile
|
| 764 |
+
745: projector
|
| 765 |
+
746: hockey puck
|
| 766 |
+
747: punching bag
|
| 767 |
+
748: purse
|
| 768 |
+
749: quill
|
| 769 |
+
750: quilt
|
| 770 |
+
751: race car
|
| 771 |
+
752: racket
|
| 772 |
+
753: radiator
|
| 773 |
+
754: radio
|
| 774 |
+
755: radio telescope
|
| 775 |
+
756: rain barrel
|
| 776 |
+
757: recreational vehicle
|
| 777 |
+
758: reel
|
| 778 |
+
759: reflex camera
|
| 779 |
+
760: refrigerator
|
| 780 |
+
761: remote control
|
| 781 |
+
762: restaurant
|
| 782 |
+
763: revolver
|
| 783 |
+
764: rifle
|
| 784 |
+
765: rocking chair
|
| 785 |
+
766: rotisserie
|
| 786 |
+
767: eraser
|
| 787 |
+
768: rugby ball
|
| 788 |
+
769: ruler
|
| 789 |
+
770: running shoe
|
| 790 |
+
771: safe
|
| 791 |
+
772: safety pin
|
| 792 |
+
773: salt shaker
|
| 793 |
+
774: sandal
|
| 794 |
+
775: sarong
|
| 795 |
+
776: saxophone
|
| 796 |
+
777: scabbard
|
| 797 |
+
778: weighing scale
|
| 798 |
+
779: school bus
|
| 799 |
+
780: schooner
|
| 800 |
+
781: scoreboard
|
| 801 |
+
782: CRT screen
|
| 802 |
+
783: screw
|
| 803 |
+
784: screwdriver
|
| 804 |
+
785: seat belt
|
| 805 |
+
786: sewing machine
|
| 806 |
+
787: shield
|
| 807 |
+
788: shoe store
|
| 808 |
+
789: shoji
|
| 809 |
+
790: shopping basket
|
| 810 |
+
791: shopping cart
|
| 811 |
+
792: shovel
|
| 812 |
+
793: shower cap
|
| 813 |
+
794: shower curtain
|
| 814 |
+
795: ski
|
| 815 |
+
796: ski mask
|
| 816 |
+
797: sleeping bag
|
| 817 |
+
798: slide rule
|
| 818 |
+
799: sliding door
|
| 819 |
+
800: slot machine
|
| 820 |
+
801: snorkel
|
| 821 |
+
802: snowmobile
|
| 822 |
+
803: snowplow
|
| 823 |
+
804: soap dispenser
|
| 824 |
+
805: soccer ball
|
| 825 |
+
806: sock
|
| 826 |
+
807: solar thermal collector
|
| 827 |
+
808: sombrero
|
| 828 |
+
809: soup bowl
|
| 829 |
+
810: space bar
|
| 830 |
+
811: space heater
|
| 831 |
+
812: space shuttle
|
| 832 |
+
813: spatula
|
| 833 |
+
814: motorboat
|
| 834 |
+
815: spider web
|
| 835 |
+
816: spindle
|
| 836 |
+
817: sports car
|
| 837 |
+
818: spotlight
|
| 838 |
+
819: stage
|
| 839 |
+
820: steam locomotive
|
| 840 |
+
821: through arch bridge
|
| 841 |
+
822: steel drum
|
| 842 |
+
823: stethoscope
|
| 843 |
+
824: scarf
|
| 844 |
+
825: stone wall
|
| 845 |
+
826: stopwatch
|
| 846 |
+
827: stove
|
| 847 |
+
828: strainer
|
| 848 |
+
829: tram
|
| 849 |
+
830: stretcher
|
| 850 |
+
831: couch
|
| 851 |
+
832: stupa
|
| 852 |
+
833: submarine
|
| 853 |
+
834: suit
|
| 854 |
+
835: sundial
|
| 855 |
+
836: sunglass
|
| 856 |
+
837: sunglasses
|
| 857 |
+
838: sunscreen
|
| 858 |
+
839: suspension bridge
|
| 859 |
+
840: mop
|
| 860 |
+
841: sweatshirt
|
| 861 |
+
842: swimsuit
|
| 862 |
+
843: swing
|
| 863 |
+
844: switch
|
| 864 |
+
845: syringe
|
| 865 |
+
846: table lamp
|
| 866 |
+
847: tank
|
| 867 |
+
848: tape player
|
| 868 |
+
849: teapot
|
| 869 |
+
850: teddy bear
|
| 870 |
+
851: television
|
| 871 |
+
852: tennis ball
|
| 872 |
+
853: thatched roof
|
| 873 |
+
854: front curtain
|
| 874 |
+
855: thimble
|
| 875 |
+
856: threshing machine
|
| 876 |
+
857: throne
|
| 877 |
+
858: tile roof
|
| 878 |
+
859: toaster
|
| 879 |
+
860: tobacco shop
|
| 880 |
+
861: toilet seat
|
| 881 |
+
862: torch
|
| 882 |
+
863: totem pole
|
| 883 |
+
864: tow truck
|
| 884 |
+
865: toy store
|
| 885 |
+
866: tractor
|
| 886 |
+
867: semi-trailer truck
|
| 887 |
+
868: tray
|
| 888 |
+
869: trench coat
|
| 889 |
+
870: tricycle
|
| 890 |
+
871: trimaran
|
| 891 |
+
872: tripod
|
| 892 |
+
873: triumphal arch
|
| 893 |
+
874: trolleybus
|
| 894 |
+
875: trombone
|
| 895 |
+
876: tub
|
| 896 |
+
877: turnstile
|
| 897 |
+
878: typewriter keyboard
|
| 898 |
+
879: umbrella
|
| 899 |
+
880: unicycle
|
| 900 |
+
881: upright piano
|
| 901 |
+
882: vacuum cleaner
|
| 902 |
+
883: vase
|
| 903 |
+
884: vault
|
| 904 |
+
885: velvet
|
| 905 |
+
886: vending machine
|
| 906 |
+
887: vestment
|
| 907 |
+
888: viaduct
|
| 908 |
+
889: violin
|
| 909 |
+
890: volleyball
|
| 910 |
+
891: waffle iron
|
| 911 |
+
892: wall clock
|
| 912 |
+
893: wallet
|
| 913 |
+
894: wardrobe
|
| 914 |
+
895: military aircraft
|
| 915 |
+
896: sink
|
| 916 |
+
897: washing machine
|
| 917 |
+
898: water bottle
|
| 918 |
+
899: water jug
|
| 919 |
+
900: water tower
|
| 920 |
+
901: whiskey jug
|
| 921 |
+
902: whistle
|
| 922 |
+
903: wig
|
| 923 |
+
904: window screen
|
| 924 |
+
905: window shade
|
| 925 |
+
906: Windsor tie
|
| 926 |
+
907: wine bottle
|
| 927 |
+
908: wing
|
| 928 |
+
909: wok
|
| 929 |
+
910: wooden spoon
|
| 930 |
+
911: wool
|
| 931 |
+
912: split-rail fence
|
| 932 |
+
913: shipwreck
|
| 933 |
+
914: yawl
|
| 934 |
+
915: yurt
|
| 935 |
+
916: website
|
| 936 |
+
917: comic book
|
| 937 |
+
918: crossword
|
| 938 |
+
919: traffic sign
|
| 939 |
+
920: traffic light
|
| 940 |
+
921: dust jacket
|
| 941 |
+
922: menu
|
| 942 |
+
923: plate
|
| 943 |
+
924: guacamole
|
| 944 |
+
925: consomme
|
| 945 |
+
926: hot pot
|
| 946 |
+
927: trifle
|
| 947 |
+
928: ice cream
|
| 948 |
+
929: ice pop
|
| 949 |
+
930: baguette
|
| 950 |
+
931: bagel
|
| 951 |
+
932: pretzel
|
| 952 |
+
933: cheeseburger
|
| 953 |
+
934: hot dog
|
| 954 |
+
935: mashed potato
|
| 955 |
+
936: cabbage
|
| 956 |
+
937: broccoli
|
| 957 |
+
938: cauliflower
|
| 958 |
+
939: zucchini
|
| 959 |
+
940: spaghetti squash
|
| 960 |
+
941: acorn squash
|
| 961 |
+
942: butternut squash
|
| 962 |
+
943: cucumber
|
| 963 |
+
944: artichoke
|
| 964 |
+
945: bell pepper
|
| 965 |
+
946: cardoon
|
| 966 |
+
947: mushroom
|
| 967 |
+
948: Granny Smith
|
| 968 |
+
949: strawberry
|
| 969 |
+
950: orange
|
| 970 |
+
951: lemon
|
| 971 |
+
952: fig
|
| 972 |
+
953: pineapple
|
| 973 |
+
954: banana
|
| 974 |
+
955: jackfruit
|
| 975 |
+
956: custard apple
|
| 976 |
+
957: pomegranate
|
| 977 |
+
958: hay
|
| 978 |
+
959: carbonara
|
| 979 |
+
960: chocolate syrup
|
| 980 |
+
961: dough
|
| 981 |
+
962: meatloaf
|
| 982 |
+
963: pizza
|
| 983 |
+
964: pot pie
|
| 984 |
+
965: burrito
|
| 985 |
+
966: red wine
|
| 986 |
+
967: espresso
|
| 987 |
+
968: cup
|
| 988 |
+
969: eggnog
|
| 989 |
+
970: alp
|
| 990 |
+
971: bubble
|
| 991 |
+
972: cliff
|
| 992 |
+
973: coral reef
|
| 993 |
+
974: geyser
|
| 994 |
+
975: lakeshore
|
| 995 |
+
976: promontory
|
| 996 |
+
977: shoal
|
| 997 |
+
978: seashore
|
| 998 |
+
979: valley
|
| 999 |
+
980: volcano
|
| 1000 |
+
981: baseball player
|
| 1001 |
+
982: bridegroom
|
| 1002 |
+
983: scuba diver
|
| 1003 |
+
984: rapeseed
|
| 1004 |
+
985: daisy
|
| 1005 |
+
986: yellow lady's slipper
|
| 1006 |
+
987: corn
|
| 1007 |
+
988: acorn
|
| 1008 |
+
989: rose hip
|
| 1009 |
+
990: horse chestnut seed
|
| 1010 |
+
991: coral fungus
|
| 1011 |
+
992: agaric
|
| 1012 |
+
993: gyromitra
|
| 1013 |
+
994: stinkhorn mushroom
|
| 1014 |
+
995: earth star
|
| 1015 |
+
996: hen-of-the-woods
|
| 1016 |
+
997: bolete
|
| 1017 |
+
998: ear
|
| 1018 |
+
999: toilet paper
|
| 1019 |
+
|
| 1020 |
+
|
| 1021 |
+
# Download script/URL (optional)
|
| 1022 |
+
download: data/scripts/get_imagenet.sh
|
yolov5-code-main/data/Objects365.yaml
ADDED
|
@@ -0,0 +1,438 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Objects365 dataset https://www.objects365.org/ by Megvii
|
| 3 |
+
# Example usage: python train.py --data Objects365.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── Objects365 ← downloads here (712 GB = 367G data + 345G zips)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/Objects365 # dataset root dir
|
| 12 |
+
train: images/train # train images (relative to 'path') 1742289 images
|
| 13 |
+
val: images/val # val images (relative to 'path') 80000 images
|
| 14 |
+
test: # test images (optional)
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: Person
|
| 19 |
+
1: Sneakers
|
| 20 |
+
2: Chair
|
| 21 |
+
3: Other Shoes
|
| 22 |
+
4: Hat
|
| 23 |
+
5: Car
|
| 24 |
+
6: Lamp
|
| 25 |
+
7: Glasses
|
| 26 |
+
8: Bottle
|
| 27 |
+
9: Desk
|
| 28 |
+
10: Cup
|
| 29 |
+
11: Street Lights
|
| 30 |
+
12: Cabinet/shelf
|
| 31 |
+
13: Handbag/Satchel
|
| 32 |
+
14: Bracelet
|
| 33 |
+
15: Plate
|
| 34 |
+
16: Picture/Frame
|
| 35 |
+
17: Helmet
|
| 36 |
+
18: Book
|
| 37 |
+
19: Gloves
|
| 38 |
+
20: Storage box
|
| 39 |
+
21: Boat
|
| 40 |
+
22: Leather Shoes
|
| 41 |
+
23: Flower
|
| 42 |
+
24: Bench
|
| 43 |
+
25: Potted Plant
|
| 44 |
+
26: Bowl/Basin
|
| 45 |
+
27: Flag
|
| 46 |
+
28: Pillow
|
| 47 |
+
29: Boots
|
| 48 |
+
30: Vase
|
| 49 |
+
31: Microphone
|
| 50 |
+
32: Necklace
|
| 51 |
+
33: Ring
|
| 52 |
+
34: SUV
|
| 53 |
+
35: Wine Glass
|
| 54 |
+
36: Belt
|
| 55 |
+
37: Monitor/TV
|
| 56 |
+
38: Backpack
|
| 57 |
+
39: Umbrella
|
| 58 |
+
40: Traffic Light
|
| 59 |
+
41: Speaker
|
| 60 |
+
42: Watch
|
| 61 |
+
43: Tie
|
| 62 |
+
44: Trash bin Can
|
| 63 |
+
45: Slippers
|
| 64 |
+
46: Bicycle
|
| 65 |
+
47: Stool
|
| 66 |
+
48: Barrel/bucket
|
| 67 |
+
49: Van
|
| 68 |
+
50: Couch
|
| 69 |
+
51: Sandals
|
| 70 |
+
52: Basket
|
| 71 |
+
53: Drum
|
| 72 |
+
54: Pen/Pencil
|
| 73 |
+
55: Bus
|
| 74 |
+
56: Wild Bird
|
| 75 |
+
57: High Heels
|
| 76 |
+
58: Motorcycle
|
| 77 |
+
59: Guitar
|
| 78 |
+
60: Carpet
|
| 79 |
+
61: Cell Phone
|
| 80 |
+
62: Bread
|
| 81 |
+
63: Camera
|
| 82 |
+
64: Canned
|
| 83 |
+
65: Truck
|
| 84 |
+
66: Traffic cone
|
| 85 |
+
67: Cymbal
|
| 86 |
+
68: Lifesaver
|
| 87 |
+
69: Towel
|
| 88 |
+
70: Stuffed Toy
|
| 89 |
+
71: Candle
|
| 90 |
+
72: Sailboat
|
| 91 |
+
73: Laptop
|
| 92 |
+
74: Awning
|
| 93 |
+
75: Bed
|
| 94 |
+
76: Faucet
|
| 95 |
+
77: Tent
|
| 96 |
+
78: Horse
|
| 97 |
+
79: Mirror
|
| 98 |
+
80: Power outlet
|
| 99 |
+
81: Sink
|
| 100 |
+
82: Apple
|
| 101 |
+
83: Air Conditioner
|
| 102 |
+
84: Knife
|
| 103 |
+
85: Hockey Stick
|
| 104 |
+
86: Paddle
|
| 105 |
+
87: Pickup Truck
|
| 106 |
+
88: Fork
|
| 107 |
+
89: Traffic Sign
|
| 108 |
+
90: Balloon
|
| 109 |
+
91: Tripod
|
| 110 |
+
92: Dog
|
| 111 |
+
93: Spoon
|
| 112 |
+
94: Clock
|
| 113 |
+
95: Pot
|
| 114 |
+
96: Cow
|
| 115 |
+
97: Cake
|
| 116 |
+
98: Dinning Table
|
| 117 |
+
99: Sheep
|
| 118 |
+
100: Hanger
|
| 119 |
+
101: Blackboard/Whiteboard
|
| 120 |
+
102: Napkin
|
| 121 |
+
103: Other Fish
|
| 122 |
+
104: Orange/Tangerine
|
| 123 |
+
105: Toiletry
|
| 124 |
+
106: Keyboard
|
| 125 |
+
107: Tomato
|
| 126 |
+
108: Lantern
|
| 127 |
+
109: Machinery Vehicle
|
| 128 |
+
110: Fan
|
| 129 |
+
111: Green Vegetables
|
| 130 |
+
112: Banana
|
| 131 |
+
113: Baseball Glove
|
| 132 |
+
114: Airplane
|
| 133 |
+
115: Mouse
|
| 134 |
+
116: Train
|
| 135 |
+
117: Pumpkin
|
| 136 |
+
118: Soccer
|
| 137 |
+
119: Skiboard
|
| 138 |
+
120: Luggage
|
| 139 |
+
121: Nightstand
|
| 140 |
+
122: Tea pot
|
| 141 |
+
123: Telephone
|
| 142 |
+
124: Trolley
|
| 143 |
+
125: Head Phone
|
| 144 |
+
126: Sports Car
|
| 145 |
+
127: Stop Sign
|
| 146 |
+
128: Dessert
|
| 147 |
+
129: Scooter
|
| 148 |
+
130: Stroller
|
| 149 |
+
131: Crane
|
| 150 |
+
132: Remote
|
| 151 |
+
133: Refrigerator
|
| 152 |
+
134: Oven
|
| 153 |
+
135: Lemon
|
| 154 |
+
136: Duck
|
| 155 |
+
137: Baseball Bat
|
| 156 |
+
138: Surveillance Camera
|
| 157 |
+
139: Cat
|
| 158 |
+
140: Jug
|
| 159 |
+
141: Broccoli
|
| 160 |
+
142: Piano
|
| 161 |
+
143: Pizza
|
| 162 |
+
144: Elephant
|
| 163 |
+
145: Skateboard
|
| 164 |
+
146: Surfboard
|
| 165 |
+
147: Gun
|
| 166 |
+
148: Skating and Skiing shoes
|
| 167 |
+
149: Gas stove
|
| 168 |
+
150: Donut
|
| 169 |
+
151: Bow Tie
|
| 170 |
+
152: Carrot
|
| 171 |
+
153: Toilet
|
| 172 |
+
154: Kite
|
| 173 |
+
155: Strawberry
|
| 174 |
+
156: Other Balls
|
| 175 |
+
157: Shovel
|
| 176 |
+
158: Pepper
|
| 177 |
+
159: Computer Box
|
| 178 |
+
160: Toilet Paper
|
| 179 |
+
161: Cleaning Products
|
| 180 |
+
162: Chopsticks
|
| 181 |
+
163: Microwave
|
| 182 |
+
164: Pigeon
|
| 183 |
+
165: Baseball
|
| 184 |
+
166: Cutting/chopping Board
|
| 185 |
+
167: Coffee Table
|
| 186 |
+
168: Side Table
|
| 187 |
+
169: Scissors
|
| 188 |
+
170: Marker
|
| 189 |
+
171: Pie
|
| 190 |
+
172: Ladder
|
| 191 |
+
173: Snowboard
|
| 192 |
+
174: Cookies
|
| 193 |
+
175: Radiator
|
| 194 |
+
176: Fire Hydrant
|
| 195 |
+
177: Basketball
|
| 196 |
+
178: Zebra
|
| 197 |
+
179: Grape
|
| 198 |
+
180: Giraffe
|
| 199 |
+
181: Potato
|
| 200 |
+
182: Sausage
|
| 201 |
+
183: Tricycle
|
| 202 |
+
184: Violin
|
| 203 |
+
185: Egg
|
| 204 |
+
186: Fire Extinguisher
|
| 205 |
+
187: Candy
|
| 206 |
+
188: Fire Truck
|
| 207 |
+
189: Billiards
|
| 208 |
+
190: Converter
|
| 209 |
+
191: Bathtub
|
| 210 |
+
192: Wheelchair
|
| 211 |
+
193: Golf Club
|
| 212 |
+
194: Briefcase
|
| 213 |
+
195: Cucumber
|
| 214 |
+
196: Cigar/Cigarette
|
| 215 |
+
197: Paint Brush
|
| 216 |
+
198: Pear
|
| 217 |
+
199: Heavy Truck
|
| 218 |
+
200: Hamburger
|
| 219 |
+
201: Extractor
|
| 220 |
+
202: Extension Cord
|
| 221 |
+
203: Tong
|
| 222 |
+
204: Tennis Racket
|
| 223 |
+
205: Folder
|
| 224 |
+
206: American Football
|
| 225 |
+
207: earphone
|
| 226 |
+
208: Mask
|
| 227 |
+
209: Kettle
|
| 228 |
+
210: Tennis
|
| 229 |
+
211: Ship
|
| 230 |
+
212: Swing
|
| 231 |
+
213: Coffee Machine
|
| 232 |
+
214: Slide
|
| 233 |
+
215: Carriage
|
| 234 |
+
216: Onion
|
| 235 |
+
217: Green beans
|
| 236 |
+
218: Projector
|
| 237 |
+
219: Frisbee
|
| 238 |
+
220: Washing Machine/Drying Machine
|
| 239 |
+
221: Chicken
|
| 240 |
+
222: Printer
|
| 241 |
+
223: Watermelon
|
| 242 |
+
224: Saxophone
|
| 243 |
+
225: Tissue
|
| 244 |
+
226: Toothbrush
|
| 245 |
+
227: Ice cream
|
| 246 |
+
228: Hot-air balloon
|
| 247 |
+
229: Cello
|
| 248 |
+
230: French Fries
|
| 249 |
+
231: Scale
|
| 250 |
+
232: Trophy
|
| 251 |
+
233: Cabbage
|
| 252 |
+
234: Hot dog
|
| 253 |
+
235: Blender
|
| 254 |
+
236: Peach
|
| 255 |
+
237: Rice
|
| 256 |
+
238: Wallet/Purse
|
| 257 |
+
239: Volleyball
|
| 258 |
+
240: Deer
|
| 259 |
+
241: Goose
|
| 260 |
+
242: Tape
|
| 261 |
+
243: Tablet
|
| 262 |
+
244: Cosmetics
|
| 263 |
+
245: Trumpet
|
| 264 |
+
246: Pineapple
|
| 265 |
+
247: Golf Ball
|
| 266 |
+
248: Ambulance
|
| 267 |
+
249: Parking meter
|
| 268 |
+
250: Mango
|
| 269 |
+
251: Key
|
| 270 |
+
252: Hurdle
|
| 271 |
+
253: Fishing Rod
|
| 272 |
+
254: Medal
|
| 273 |
+
255: Flute
|
| 274 |
+
256: Brush
|
| 275 |
+
257: Penguin
|
| 276 |
+
258: Megaphone
|
| 277 |
+
259: Corn
|
| 278 |
+
260: Lettuce
|
| 279 |
+
261: Garlic
|
| 280 |
+
262: Swan
|
| 281 |
+
263: Helicopter
|
| 282 |
+
264: Green Onion
|
| 283 |
+
265: Sandwich
|
| 284 |
+
266: Nuts
|
| 285 |
+
267: Speed Limit Sign
|
| 286 |
+
268: Induction Cooker
|
| 287 |
+
269: Broom
|
| 288 |
+
270: Trombone
|
| 289 |
+
271: Plum
|
| 290 |
+
272: Rickshaw
|
| 291 |
+
273: Goldfish
|
| 292 |
+
274: Kiwi fruit
|
| 293 |
+
275: Router/modem
|
| 294 |
+
276: Poker Card
|
| 295 |
+
277: Toaster
|
| 296 |
+
278: Shrimp
|
| 297 |
+
279: Sushi
|
| 298 |
+
280: Cheese
|
| 299 |
+
281: Notepaper
|
| 300 |
+
282: Cherry
|
| 301 |
+
283: Pliers
|
| 302 |
+
284: CD
|
| 303 |
+
285: Pasta
|
| 304 |
+
286: Hammer
|
| 305 |
+
287: Cue
|
| 306 |
+
288: Avocado
|
| 307 |
+
289: Hamimelon
|
| 308 |
+
290: Flask
|
| 309 |
+
291: Mushroom
|
| 310 |
+
292: Screwdriver
|
| 311 |
+
293: Soap
|
| 312 |
+
294: Recorder
|
| 313 |
+
295: Bear
|
| 314 |
+
296: Eggplant
|
| 315 |
+
297: Board Eraser
|
| 316 |
+
298: Coconut
|
| 317 |
+
299: Tape Measure/Ruler
|
| 318 |
+
300: Pig
|
| 319 |
+
301: Showerhead
|
| 320 |
+
302: Globe
|
| 321 |
+
303: Chips
|
| 322 |
+
304: Steak
|
| 323 |
+
305: Crosswalk Sign
|
| 324 |
+
306: Stapler
|
| 325 |
+
307: Camel
|
| 326 |
+
308: Formula 1
|
| 327 |
+
309: Pomegranate
|
| 328 |
+
310: Dishwasher
|
| 329 |
+
311: Crab
|
| 330 |
+
312: Hoverboard
|
| 331 |
+
313: Meat ball
|
| 332 |
+
314: Rice Cooker
|
| 333 |
+
315: Tuba
|
| 334 |
+
316: Calculator
|
| 335 |
+
317: Papaya
|
| 336 |
+
318: Antelope
|
| 337 |
+
319: Parrot
|
| 338 |
+
320: Seal
|
| 339 |
+
321: Butterfly
|
| 340 |
+
322: Dumbbell
|
| 341 |
+
323: Donkey
|
| 342 |
+
324: Lion
|
| 343 |
+
325: Urinal
|
| 344 |
+
326: Dolphin
|
| 345 |
+
327: Electric Drill
|
| 346 |
+
328: Hair Dryer
|
| 347 |
+
329: Egg tart
|
| 348 |
+
330: Jellyfish
|
| 349 |
+
331: Treadmill
|
| 350 |
+
332: Lighter
|
| 351 |
+
333: Grapefruit
|
| 352 |
+
334: Game board
|
| 353 |
+
335: Mop
|
| 354 |
+
336: Radish
|
| 355 |
+
337: Baozi
|
| 356 |
+
338: Target
|
| 357 |
+
339: French
|
| 358 |
+
340: Spring Rolls
|
| 359 |
+
341: Monkey
|
| 360 |
+
342: Rabbit
|
| 361 |
+
343: Pencil Case
|
| 362 |
+
344: Yak
|
| 363 |
+
345: Red Cabbage
|
| 364 |
+
346: Binoculars
|
| 365 |
+
347: Asparagus
|
| 366 |
+
348: Barbell
|
| 367 |
+
349: Scallop
|
| 368 |
+
350: Noddles
|
| 369 |
+
351: Comb
|
| 370 |
+
352: Dumpling
|
| 371 |
+
353: Oyster
|
| 372 |
+
354: Table Tennis paddle
|
| 373 |
+
355: Cosmetics Brush/Eyeliner Pencil
|
| 374 |
+
356: Chainsaw
|
| 375 |
+
357: Eraser
|
| 376 |
+
358: Lobster
|
| 377 |
+
359: Durian
|
| 378 |
+
360: Okra
|
| 379 |
+
361: Lipstick
|
| 380 |
+
362: Cosmetics Mirror
|
| 381 |
+
363: Curling
|
| 382 |
+
364: Table Tennis
|
| 383 |
+
|
| 384 |
+
|
| 385 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 386 |
+
download: |
|
| 387 |
+
from tqdm import tqdm
|
| 388 |
+
|
| 389 |
+
from utils.general import Path, check_requirements, download, np, xyxy2xywhn
|
| 390 |
+
|
| 391 |
+
check_requirements(('pycocotools>=2.0',))
|
| 392 |
+
from pycocotools.coco import COCO
|
| 393 |
+
|
| 394 |
+
# Make Directories
|
| 395 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 396 |
+
for p in 'images', 'labels':
|
| 397 |
+
(dir / p).mkdir(parents=True, exist_ok=True)
|
| 398 |
+
for q in 'train', 'val':
|
| 399 |
+
(dir / p / q).mkdir(parents=True, exist_ok=True)
|
| 400 |
+
|
| 401 |
+
# Train, Val Splits
|
| 402 |
+
for split, patches in [('train', 50 + 1), ('val', 43 + 1)]:
|
| 403 |
+
print(f"Processing {split} in {patches} patches ...")
|
| 404 |
+
images, labels = dir / 'images' / split, dir / 'labels' / split
|
| 405 |
+
|
| 406 |
+
# Download
|
| 407 |
+
url = f"https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/{split}/"
|
| 408 |
+
if split == 'train':
|
| 409 |
+
download([f'{url}zhiyuan_objv2_{split}.tar.gz'], dir=dir, delete=False) # annotations json
|
| 410 |
+
download([f'{url}patch{i}.tar.gz' for i in range(patches)], dir=images, curl=True, delete=False, threads=8)
|
| 411 |
+
elif split == 'val':
|
| 412 |
+
download([f'{url}zhiyuan_objv2_{split}.json'], dir=dir, delete=False) # annotations json
|
| 413 |
+
download([f'{url}images/v1/patch{i}.tar.gz' for i in range(15 + 1)], dir=images, curl=True, delete=False, threads=8)
|
| 414 |
+
download([f'{url}images/v2/patch{i}.tar.gz' for i in range(16, patches)], dir=images, curl=True, delete=False, threads=8)
|
| 415 |
+
|
| 416 |
+
# Move
|
| 417 |
+
for f in tqdm(images.rglob('*.jpg'), desc=f'Moving {split} images'):
|
| 418 |
+
f.rename(images / f.name) # move to /images/{split}
|
| 419 |
+
|
| 420 |
+
# Labels
|
| 421 |
+
coco = COCO(dir / f'zhiyuan_objv2_{split}.json')
|
| 422 |
+
names = [x["name"] for x in coco.loadCats(coco.getCatIds())]
|
| 423 |
+
for cid, cat in enumerate(names):
|
| 424 |
+
catIds = coco.getCatIds(catNms=[cat])
|
| 425 |
+
imgIds = coco.getImgIds(catIds=catIds)
|
| 426 |
+
for im in tqdm(coco.loadImgs(imgIds), desc=f'Class {cid + 1}/{len(names)} {cat}'):
|
| 427 |
+
width, height = im["width"], im["height"]
|
| 428 |
+
path = Path(im["file_name"]) # image filename
|
| 429 |
+
try:
|
| 430 |
+
with open(labels / path.with_suffix('.txt').name, 'a') as file:
|
| 431 |
+
annIds = coco.getAnnIds(imgIds=im["id"], catIds=catIds, iscrowd=None)
|
| 432 |
+
for a in coco.loadAnns(annIds):
|
| 433 |
+
x, y, w, h = a['bbox'] # bounding box in xywh (xy top-left corner)
|
| 434 |
+
xyxy = np.array([x, y, x + w, y + h])[None] # pixels(1,4)
|
| 435 |
+
x, y, w, h = xyxy2xywhn(xyxy, w=width, h=height, clip=True)[0] # normalized and clipped
|
| 436 |
+
file.write(f"{cid} {x:.5f} {y:.5f} {w:.5f} {h:.5f}\n")
|
| 437 |
+
except Exception as e:
|
| 438 |
+
print(e)
|
yolov5-code-main/data/SKU-110K.yaml
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# SKU-110K retail items dataset https://github.com/eg4000/SKU110K_CVPR19 by Trax Retail
|
| 3 |
+
# Example usage: python train.py --data SKU-110K.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── SKU-110K ← downloads here (13.6 GB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/SKU-110K # dataset root dir
|
| 12 |
+
train: train.txt # train images (relative to 'path') 8219 images
|
| 13 |
+
val: val.txt # val images (relative to 'path') 588 images
|
| 14 |
+
test: test.txt # test images (optional) 2936 images
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: object
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 22 |
+
download: |
|
| 23 |
+
import shutil
|
| 24 |
+
from tqdm import tqdm
|
| 25 |
+
from utils.general import np, pd, Path, download, xyxy2xywh
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
# Download
|
| 29 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 30 |
+
parent = Path(dir.parent) # download dir
|
| 31 |
+
urls = ['http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz']
|
| 32 |
+
download(urls, dir=parent, delete=False)
|
| 33 |
+
|
| 34 |
+
# Rename directories
|
| 35 |
+
if dir.exists():
|
| 36 |
+
shutil.rmtree(dir)
|
| 37 |
+
(parent / 'SKU110K_fixed').rename(dir) # rename dir
|
| 38 |
+
(dir / 'labels').mkdir(parents=True, exist_ok=True) # create labels dir
|
| 39 |
+
|
| 40 |
+
# Convert labels
|
| 41 |
+
names = 'image', 'x1', 'y1', 'x2', 'y2', 'class', 'image_width', 'image_height' # column names
|
| 42 |
+
for d in 'annotations_train.csv', 'annotations_val.csv', 'annotations_test.csv':
|
| 43 |
+
x = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations
|
| 44 |
+
images, unique_images = x[:, 0], np.unique(x[:, 0])
|
| 45 |
+
with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') as f:
|
| 46 |
+
f.writelines(f'./images/{s}\n' for s in unique_images)
|
| 47 |
+
for im in tqdm(unique_images, desc=f'Converting {dir / d}'):
|
| 48 |
+
cls = 0 # single-class dataset
|
| 49 |
+
with open((dir / 'labels' / im).with_suffix('.txt'), 'a') as f:
|
| 50 |
+
for r in x[images == im]:
|
| 51 |
+
w, h = r[6], r[7] # image width, height
|
| 52 |
+
xywh = xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] # instance
|
| 53 |
+
f.write(f"{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n") # write label
|
yolov5-code-main/data/VOC.yaml
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC by University of Oxford
|
| 3 |
+
# Example usage: python train.py --data VOC.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── VOC ← downloads here (2.8 GB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/VOC
|
| 12 |
+
train: # train images (relative to 'path') 16551 images
|
| 13 |
+
- images/train2012
|
| 14 |
+
- images/train2007
|
| 15 |
+
- images/val2012
|
| 16 |
+
- images/val2007
|
| 17 |
+
val: # val images (relative to 'path') 4952 images
|
| 18 |
+
- images/test2007
|
| 19 |
+
test: # test images (optional)
|
| 20 |
+
- images/test2007
|
| 21 |
+
|
| 22 |
+
# Classes
|
| 23 |
+
names:
|
| 24 |
+
0: aeroplane
|
| 25 |
+
1: bicycle
|
| 26 |
+
2: bird
|
| 27 |
+
3: boat
|
| 28 |
+
4: bottle
|
| 29 |
+
5: bus
|
| 30 |
+
6: car
|
| 31 |
+
7: cat
|
| 32 |
+
8: chair
|
| 33 |
+
9: cow
|
| 34 |
+
10: diningtable
|
| 35 |
+
11: dog
|
| 36 |
+
12: horse
|
| 37 |
+
13: motorbike
|
| 38 |
+
14: person
|
| 39 |
+
15: pottedplant
|
| 40 |
+
16: sheep
|
| 41 |
+
17: sofa
|
| 42 |
+
18: train
|
| 43 |
+
19: tvmonitor
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 47 |
+
download: |
|
| 48 |
+
import xml.etree.ElementTree as ET
|
| 49 |
+
|
| 50 |
+
from tqdm import tqdm
|
| 51 |
+
from utils.general import download, Path
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
def convert_label(path, lb_path, year, image_id):
|
| 55 |
+
def convert_box(size, box):
|
| 56 |
+
dw, dh = 1. / size[0], 1. / size[1]
|
| 57 |
+
x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]
|
| 58 |
+
return x * dw, y * dh, w * dw, h * dh
|
| 59 |
+
|
| 60 |
+
in_file = open(path / f'VOC{year}/Annotations/{image_id}.xml')
|
| 61 |
+
out_file = open(lb_path, 'w')
|
| 62 |
+
tree = ET.parse(in_file)
|
| 63 |
+
root = tree.getroot()
|
| 64 |
+
size = root.find('size')
|
| 65 |
+
w = int(size.find('width').text)
|
| 66 |
+
h = int(size.find('height').text)
|
| 67 |
+
|
| 68 |
+
names = list(yaml['names'].values()) # names list
|
| 69 |
+
for obj in root.iter('object'):
|
| 70 |
+
cls = obj.find('name').text
|
| 71 |
+
if cls in names and int(obj.find('difficult').text) != 1:
|
| 72 |
+
xmlbox = obj.find('bndbox')
|
| 73 |
+
bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')])
|
| 74 |
+
cls_id = names.index(cls) # class id
|
| 75 |
+
out_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n')
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
# Download
|
| 79 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 80 |
+
url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/'
|
| 81 |
+
urls = [f'{url}VOCtrainval_06-Nov-2007.zip', # 446MB, 5012 images
|
| 82 |
+
f'{url}VOCtest_06-Nov-2007.zip', # 438MB, 4953 images
|
| 83 |
+
f'{url}VOCtrainval_11-May-2012.zip'] # 1.95GB, 17126 images
|
| 84 |
+
download(urls, dir=dir / 'images', delete=False, curl=True, threads=3)
|
| 85 |
+
|
| 86 |
+
# Convert
|
| 87 |
+
path = dir / 'images/VOCdevkit'
|
| 88 |
+
for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'):
|
| 89 |
+
imgs_path = dir / 'images' / f'{image_set}{year}'
|
| 90 |
+
lbs_path = dir / 'labels' / f'{image_set}{year}'
|
| 91 |
+
imgs_path.mkdir(exist_ok=True, parents=True)
|
| 92 |
+
lbs_path.mkdir(exist_ok=True, parents=True)
|
| 93 |
+
|
| 94 |
+
with open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt') as f:
|
| 95 |
+
image_ids = f.read().strip().split()
|
| 96 |
+
for id in tqdm(image_ids, desc=f'{image_set}{year}'):
|
| 97 |
+
f = path / f'VOC{year}/JPEGImages/{id}.jpg' # old img path
|
| 98 |
+
lb_path = (lbs_path / f.name).with_suffix('.txt') # new label path
|
| 99 |
+
f.rename(imgs_path / f.name) # move image
|
| 100 |
+
convert_label(path, lb_path, year, id) # convert labels to YOLO format
|
yolov5-code-main/data/VisDrone.yaml
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# VisDrone2019-DET dataset https://github.com/VisDrone/VisDrone-Dataset by Tianjin University
|
| 3 |
+
# Example usage: python train.py --data VisDrone.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── VisDrone ← downloads here (2.3 GB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/VisDrone # dataset root dir
|
| 12 |
+
train: VisDrone2019-DET-train/images # train images (relative to 'path') 6471 images
|
| 13 |
+
val: VisDrone2019-DET-val/images # val images (relative to 'path') 548 images
|
| 14 |
+
test: VisDrone2019-DET-test-dev/images # test images (optional) 1610 images
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: pedestrian
|
| 19 |
+
1: people
|
| 20 |
+
2: bicycle
|
| 21 |
+
3: car
|
| 22 |
+
4: van
|
| 23 |
+
5: truck
|
| 24 |
+
6: tricycle
|
| 25 |
+
7: awning-tricycle
|
| 26 |
+
8: bus
|
| 27 |
+
9: motor
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 31 |
+
download: |
|
| 32 |
+
from utils.general import download, os, Path
|
| 33 |
+
|
| 34 |
+
def visdrone2yolo(dir):
|
| 35 |
+
from PIL import Image
|
| 36 |
+
from tqdm import tqdm
|
| 37 |
+
|
| 38 |
+
def convert_box(size, box):
|
| 39 |
+
# Convert VisDrone box to YOLO xywh box
|
| 40 |
+
dw = 1. / size[0]
|
| 41 |
+
dh = 1. / size[1]
|
| 42 |
+
return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh
|
| 43 |
+
|
| 44 |
+
(dir / 'labels').mkdir(parents=True, exist_ok=True) # make labels directory
|
| 45 |
+
pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
|
| 46 |
+
for f in pbar:
|
| 47 |
+
img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
|
| 48 |
+
lines = []
|
| 49 |
+
with open(f, 'r') as file: # read annotation.txt
|
| 50 |
+
for row in [x.split(',') for x in file.read().strip().splitlines()]:
|
| 51 |
+
if row[4] == '0': # VisDrone 'ignored regions' class 0
|
| 52 |
+
continue
|
| 53 |
+
cls = int(row[5]) - 1
|
| 54 |
+
box = convert_box(img_size, tuple(map(int, row[:4])))
|
| 55 |
+
lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
|
| 56 |
+
with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl:
|
| 57 |
+
fl.writelines(lines) # write label.txt
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
# Download
|
| 61 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 62 |
+
urls = ['https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-train.zip',
|
| 63 |
+
'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-val.zip',
|
| 64 |
+
'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-dev.zip',
|
| 65 |
+
'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-challenge.zip']
|
| 66 |
+
download(urls, dir=dir, curl=True, threads=4)
|
| 67 |
+
|
| 68 |
+
# Convert
|
| 69 |
+
for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
|
| 70 |
+
visdrone2yolo(dir / d) # convert VisDrone annotations to YOLO labels
|
yolov5-code-main/data/bvn.yaml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
|
| 3 |
+
# Example usage: python train.py --data coco128.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── coco128 ← downloads here (7 MB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ./datasets # dataset root dir
|
| 12 |
+
train: images/train # train images (relative to 'path') 128 images
|
| 13 |
+
val: images/val # val images (relative to 'path') 128 images
|
| 14 |
+
test: # test images (optional)
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: daitu
|
| 19 |
+
1: mingren
|
yolov5-code-main/data/coco.yaml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# COCO 2017 dataset http://cocodataset.org by Microsoft
|
| 3 |
+
# Example usage: python train.py --data coco.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── coco ← downloads here (20.1 GB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/coco # dataset root dir
|
| 12 |
+
train: train2017.txt # train images (relative to 'path') 118287 images
|
| 13 |
+
val: val2017.txt # val images (relative to 'path') 5000 images
|
| 14 |
+
test: test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: person
|
| 19 |
+
1: bicycle
|
| 20 |
+
2: car
|
| 21 |
+
3: motorcycle
|
| 22 |
+
4: airplane
|
| 23 |
+
5: bus
|
| 24 |
+
6: train
|
| 25 |
+
7: truck
|
| 26 |
+
8: boat
|
| 27 |
+
9: traffic light
|
| 28 |
+
10: fire hydrant
|
| 29 |
+
11: stop sign
|
| 30 |
+
12: parking meter
|
| 31 |
+
13: bench
|
| 32 |
+
14: bird
|
| 33 |
+
15: cat
|
| 34 |
+
16: dog
|
| 35 |
+
17: horse
|
| 36 |
+
18: sheep
|
| 37 |
+
19: cow
|
| 38 |
+
20: elephant
|
| 39 |
+
21: bear
|
| 40 |
+
22: zebra
|
| 41 |
+
23: giraffe
|
| 42 |
+
24: backpack
|
| 43 |
+
25: umbrella
|
| 44 |
+
26: handbag
|
| 45 |
+
27: tie
|
| 46 |
+
28: suitcase
|
| 47 |
+
29: frisbee
|
| 48 |
+
30: skis
|
| 49 |
+
31: snowboard
|
| 50 |
+
32: sports ball
|
| 51 |
+
33: kite
|
| 52 |
+
34: baseball bat
|
| 53 |
+
35: baseball glove
|
| 54 |
+
36: skateboard
|
| 55 |
+
37: surfboard
|
| 56 |
+
38: tennis racket
|
| 57 |
+
39: bottle
|
| 58 |
+
40: wine glass
|
| 59 |
+
41: cup
|
| 60 |
+
42: fork
|
| 61 |
+
43: knife
|
| 62 |
+
44: spoon
|
| 63 |
+
45: bowl
|
| 64 |
+
46: banana
|
| 65 |
+
47: apple
|
| 66 |
+
48: sandwich
|
| 67 |
+
49: orange
|
| 68 |
+
50: broccoli
|
| 69 |
+
51: carrot
|
| 70 |
+
52: hot dog
|
| 71 |
+
53: pizza
|
| 72 |
+
54: donut
|
| 73 |
+
55: cake
|
| 74 |
+
56: chair
|
| 75 |
+
57: couch
|
| 76 |
+
58: potted plant
|
| 77 |
+
59: bed
|
| 78 |
+
60: dining table
|
| 79 |
+
61: toilet
|
| 80 |
+
62: tv
|
| 81 |
+
63: laptop
|
| 82 |
+
64: mouse
|
| 83 |
+
65: remote
|
| 84 |
+
66: keyboard
|
| 85 |
+
67: cell phone
|
| 86 |
+
68: microwave
|
| 87 |
+
69: oven
|
| 88 |
+
70: toaster
|
| 89 |
+
71: sink
|
| 90 |
+
72: refrigerator
|
| 91 |
+
73: book
|
| 92 |
+
74: clock
|
| 93 |
+
75: vase
|
| 94 |
+
76: scissors
|
| 95 |
+
77: teddy bear
|
| 96 |
+
78: hair drier
|
| 97 |
+
79: toothbrush
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
# Download script/URL (optional)
|
| 101 |
+
download: |
|
| 102 |
+
from utils.general import download, Path
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
# Download labels
|
| 106 |
+
segments = False # segment or box labels
|
| 107 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 108 |
+
url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/'
|
| 109 |
+
urls = [url + ('coco2017labels-segments.zip' if segments else 'coco2017labels.zip')] # labels
|
| 110 |
+
download(urls, dir=dir.parent)
|
| 111 |
+
|
| 112 |
+
# Download data
|
| 113 |
+
urls = ['http://images.cocodataset.org/zips/train2017.zip', # 19G, 118k images
|
| 114 |
+
'http://images.cocodataset.org/zips/val2017.zip', # 1G, 5k images
|
| 115 |
+
'http://images.cocodataset.org/zips/test2017.zip'] # 7G, 41k images (optional)
|
| 116 |
+
download(urls, dir=dir / 'images', threads=3)
|
yolov5-code-main/data/coco128-seg.yaml
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# COCO128-seg dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
|
| 3 |
+
# Example usage: python train.py --data coco128.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── coco128-seg ← downloads here (7 MB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: datasets/coco128-seg # dataset root dir
|
| 12 |
+
train: images/train2017 # train images (relative to 'path') 128 images
|
| 13 |
+
val: images/train2017 # val images (relative to 'path') 128 images
|
| 14 |
+
test: # test images (optional)
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: person
|
| 19 |
+
1: bicycle
|
| 20 |
+
2: car
|
| 21 |
+
3: motorcycle
|
| 22 |
+
4: airplane
|
| 23 |
+
5: bus
|
| 24 |
+
6: train
|
| 25 |
+
7: truck
|
| 26 |
+
8: boat
|
| 27 |
+
9: traffic light
|
| 28 |
+
10: fire hydrant
|
| 29 |
+
11: stop sign
|
| 30 |
+
12: parking meter
|
| 31 |
+
13: bench
|
| 32 |
+
14: bird
|
| 33 |
+
15: cat
|
| 34 |
+
16: dog
|
| 35 |
+
17: horse
|
| 36 |
+
18: sheep
|
| 37 |
+
19: cow
|
| 38 |
+
20: elephant
|
| 39 |
+
21: bear
|
| 40 |
+
22: zebra
|
| 41 |
+
23: giraffe
|
| 42 |
+
24: backpack
|
| 43 |
+
25: umbrella
|
| 44 |
+
26: handbag
|
| 45 |
+
27: tie
|
| 46 |
+
28: suitcase
|
| 47 |
+
29: frisbee
|
| 48 |
+
30: skis
|
| 49 |
+
31: snowboard
|
| 50 |
+
32: sports ball
|
| 51 |
+
33: kite
|
| 52 |
+
34: baseball bat
|
| 53 |
+
35: baseball glove
|
| 54 |
+
36: skateboard
|
| 55 |
+
37: surfboard
|
| 56 |
+
38: tennis racket
|
| 57 |
+
39: bottle
|
| 58 |
+
40: wine glass
|
| 59 |
+
41: cup
|
| 60 |
+
42: fork
|
| 61 |
+
43: knife
|
| 62 |
+
44: spoon
|
| 63 |
+
45: bowl
|
| 64 |
+
46: banana
|
| 65 |
+
47: apple
|
| 66 |
+
48: sandwich
|
| 67 |
+
49: orange
|
| 68 |
+
50: broccoli
|
| 69 |
+
51: carrot
|
| 70 |
+
52: hot dog
|
| 71 |
+
53: pizza
|
| 72 |
+
54: donut
|
| 73 |
+
55: cake
|
| 74 |
+
56: chair
|
| 75 |
+
57: couch
|
| 76 |
+
58: potted plant
|
| 77 |
+
59: bed
|
| 78 |
+
60: dining table
|
| 79 |
+
61: toilet
|
| 80 |
+
62: tv
|
| 81 |
+
63: laptop
|
| 82 |
+
64: mouse
|
| 83 |
+
65: remote
|
| 84 |
+
66: keyboard
|
| 85 |
+
67: cell phone
|
| 86 |
+
68: microwave
|
| 87 |
+
69: oven
|
| 88 |
+
70: toaster
|
| 89 |
+
71: sink
|
| 90 |
+
72: refrigerator
|
| 91 |
+
73: book
|
| 92 |
+
74: clock
|
| 93 |
+
75: vase
|
| 94 |
+
76: scissors
|
| 95 |
+
77: teddy bear
|
| 96 |
+
78: hair drier
|
| 97 |
+
79: toothbrush
|
| 98 |
+
|
yolov5-code-main/data/coco128.yaml
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
|
| 3 |
+
# Example usage: python train.py --data coco128.yaml
|
| 4 |
+
# parent
|
| 5 |
+
# ├── yolov5
|
| 6 |
+
# └── datasets
|
| 7 |
+
# └── coco128 ← downloads here (7 MB)
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 11 |
+
path: ../datasets/coco128 # dataset root dir
|
| 12 |
+
train: images/train2017 # train images (relative to 'path') 128 images
|
| 13 |
+
val: images/train2017 # val images (relative to 'path') 128 images
|
| 14 |
+
test: # test images (optional)
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: person
|
| 19 |
+
1: bicycle
|
| 20 |
+
2: car
|
| 21 |
+
3: motorcycle
|
| 22 |
+
4: airplane
|
| 23 |
+
5: bus
|
| 24 |
+
6: train
|
| 25 |
+
7: truck
|
| 26 |
+
8: boat
|
| 27 |
+
9: traffic light
|
| 28 |
+
10: fire hydrant
|
| 29 |
+
11: stop sign
|
| 30 |
+
12: parking meter
|
| 31 |
+
13: bench
|
| 32 |
+
14: bird
|
| 33 |
+
15: cat
|
| 34 |
+
16: dog
|
| 35 |
+
17: horse
|
| 36 |
+
18: sheep
|
| 37 |
+
19: cow
|
| 38 |
+
20: elephant
|
| 39 |
+
21: bear
|
| 40 |
+
22: zebra
|
| 41 |
+
23: giraffe
|
| 42 |
+
24: backpack
|
| 43 |
+
25: umbrella
|
| 44 |
+
26: handbag
|
| 45 |
+
27: tie
|
| 46 |
+
28: suitcase
|
| 47 |
+
29: frisbee
|
| 48 |
+
30: skis
|
| 49 |
+
31: snowboard
|
| 50 |
+
32: sports ball
|
| 51 |
+
33: kite
|
| 52 |
+
34: baseball bat
|
| 53 |
+
35: baseball glove
|
| 54 |
+
36: skateboard
|
| 55 |
+
37: surfboard
|
| 56 |
+
38: tennis racket
|
| 57 |
+
39: bottle
|
| 58 |
+
40: wine glass
|
| 59 |
+
41: cup
|
| 60 |
+
42: fork
|
| 61 |
+
43: knife
|
| 62 |
+
44: spoon
|
| 63 |
+
45: bowl
|
| 64 |
+
46: banana
|
| 65 |
+
47: apple
|
| 66 |
+
48: sandwich
|
| 67 |
+
49: orange
|
| 68 |
+
50: broccoli
|
| 69 |
+
51: carrot
|
| 70 |
+
52: hot dog
|
| 71 |
+
53: pizza
|
| 72 |
+
54: donut
|
| 73 |
+
55: cake
|
| 74 |
+
56: chair
|
| 75 |
+
57: couch
|
| 76 |
+
58: potted plant
|
| 77 |
+
59: bed
|
| 78 |
+
60: dining table
|
| 79 |
+
61: toilet
|
| 80 |
+
62: tv
|
| 81 |
+
63: laptop
|
| 82 |
+
64: mouse
|
| 83 |
+
65: remote
|
| 84 |
+
66: keyboard
|
| 85 |
+
67: cell phone
|
| 86 |
+
68: microwave
|
| 87 |
+
69: oven
|
| 88 |
+
70: toaster
|
| 89 |
+
71: sink
|
| 90 |
+
72: refrigerator
|
| 91 |
+
73: book
|
| 92 |
+
74: clock
|
| 93 |
+
75: vase
|
| 94 |
+
76: scissors
|
| 95 |
+
77: teddy bear
|
| 96 |
+
78: hair drier
|
| 97 |
+
79: toothbrush
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
# Download script/URL (optional)
|
| 101 |
+
download: https://ultralytics.com/assets/coco128.zip
|
yolov5-code-main/data/hyps/hyp.Objects365.yaml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Hyperparameters for Objects365 training
|
| 3 |
+
# python train.py --weights yolov5m.pt --data Objects365.yaml --evolve
|
| 4 |
+
# See Hyperparameter Evolution tutorial for details https://github.com/ultralytics/yolov5#tutorials
|
| 5 |
+
|
| 6 |
+
lr0: 0.00258
|
| 7 |
+
lrf: 0.17
|
| 8 |
+
momentum: 0.779
|
| 9 |
+
weight_decay: 0.00058
|
| 10 |
+
warmup_epochs: 1.33
|
| 11 |
+
warmup_momentum: 0.86
|
| 12 |
+
warmup_bias_lr: 0.0711
|
| 13 |
+
box: 0.0539
|
| 14 |
+
cls: 0.299
|
| 15 |
+
cls_pw: 0.825
|
| 16 |
+
obj: 0.632
|
| 17 |
+
obj_pw: 1.0
|
| 18 |
+
iou_t: 0.2
|
| 19 |
+
anchor_t: 3.44
|
| 20 |
+
anchors: 3.2
|
| 21 |
+
fl_gamma: 0.0
|
| 22 |
+
hsv_h: 0.0188
|
| 23 |
+
hsv_s: 0.704
|
| 24 |
+
hsv_v: 0.36
|
| 25 |
+
degrees: 0.0
|
| 26 |
+
translate: 0.0902
|
| 27 |
+
scale: 0.491
|
| 28 |
+
shear: 0.0
|
| 29 |
+
perspective: 0.0
|
| 30 |
+
flipud: 0.0
|
| 31 |
+
fliplr: 0.5
|
| 32 |
+
mosaic: 1.0
|
| 33 |
+
mixup: 0.0
|
| 34 |
+
copy_paste: 0.0
|
yolov5-code-main/data/hyps/hyp.VOC.yaml
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Hyperparameters for VOC training
|
| 3 |
+
# python train.py --batch 128 --weights yolov5m6.pt --data VOC.yaml --epochs 50 --img 512 --hyp hyp.scratch-med.yaml --evolve
|
| 4 |
+
# See Hyperparameter Evolution tutorial for details https://github.com/ultralytics/yolov5#tutorials
|
| 5 |
+
|
| 6 |
+
# YOLOv5 Hyperparameter Evolution Results
|
| 7 |
+
# Best generation: 467
|
| 8 |
+
# Last generation: 996
|
| 9 |
+
# metrics/precision, metrics/recall, metrics/mAP_0.5, metrics/mAP_0.5:0.95, val/box_loss, val/obj_loss, val/cls_loss
|
| 10 |
+
# 0.87729, 0.85125, 0.91286, 0.72664, 0.0076739, 0.0042529, 0.0013865
|
| 11 |
+
|
| 12 |
+
lr0: 0.00334
|
| 13 |
+
lrf: 0.15135
|
| 14 |
+
momentum: 0.74832
|
| 15 |
+
weight_decay: 0.00025
|
| 16 |
+
warmup_epochs: 3.3835
|
| 17 |
+
warmup_momentum: 0.59462
|
| 18 |
+
warmup_bias_lr: 0.18657
|
| 19 |
+
box: 0.02
|
| 20 |
+
cls: 0.21638
|
| 21 |
+
cls_pw: 0.5
|
| 22 |
+
obj: 0.51728
|
| 23 |
+
obj_pw: 0.67198
|
| 24 |
+
iou_t: 0.2
|
| 25 |
+
anchor_t: 3.3744
|
| 26 |
+
fl_gamma: 0.0
|
| 27 |
+
hsv_h: 0.01041
|
| 28 |
+
hsv_s: 0.54703
|
| 29 |
+
hsv_v: 0.27739
|
| 30 |
+
degrees: 0.0
|
| 31 |
+
translate: 0.04591
|
| 32 |
+
scale: 0.75544
|
| 33 |
+
shear: 0.0
|
| 34 |
+
perspective: 0.0
|
| 35 |
+
flipud: 0.0
|
| 36 |
+
fliplr: 0.5
|
| 37 |
+
mosaic: 0.85834
|
| 38 |
+
mixup: 0.04266
|
| 39 |
+
copy_paste: 0.0
|
| 40 |
+
anchors: 3.412
|
yolov5-code-main/data/hyps/hyp.no-augmentation.yaml
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Hyperparameters when using Albumentations frameworks
|
| 3 |
+
# python train.py --hyp hyp.no-augmentation.yaml
|
| 4 |
+
# See https://github.com/ultralytics/yolov5/pull/3882 for YOLOv5 + Albumentations Usage examples
|
| 5 |
+
|
| 6 |
+
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
|
| 7 |
+
lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf)
|
| 8 |
+
momentum: 0.937 # SGD momentum/Adam beta1
|
| 9 |
+
weight_decay: 0.0005 # optimizer weight decay 5e-4
|
| 10 |
+
warmup_epochs: 3.0 # warmup epochs (fractions ok)
|
| 11 |
+
warmup_momentum: 0.8 # warmup initial momentum
|
| 12 |
+
warmup_bias_lr: 0.1 # warmup initial bias lr
|
| 13 |
+
box: 0.05 # box loss gain
|
| 14 |
+
cls: 0.3 # cls loss gain
|
| 15 |
+
cls_pw: 1.0 # cls BCELoss positive_weight
|
| 16 |
+
obj: 0.7 # obj loss gain (scale with pixels)
|
| 17 |
+
obj_pw: 1.0 # obj BCELoss positive_weight
|
| 18 |
+
iou_t: 0.20 # IoU training threshold
|
| 19 |
+
anchor_t: 4.0 # anchor-multiple threshold
|
| 20 |
+
# anchors: 3 # anchors per output layer (0 to ignore)
|
| 21 |
+
# this parameters are all zero since we want to use albumentation framework
|
| 22 |
+
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
|
| 23 |
+
hsv_h: 0 # image HSV-Hue augmentation (fraction)
|
| 24 |
+
hsv_s: 00 # image HSV-Saturation augmentation (fraction)
|
| 25 |
+
hsv_v: 0 # image HSV-Value augmentation (fraction)
|
| 26 |
+
degrees: 0.0 # image rotation (+/- deg)
|
| 27 |
+
translate: 0 # image translation (+/- fraction)
|
| 28 |
+
scale: 0 # image scale (+/- gain)
|
| 29 |
+
shear: 0 # image shear (+/- deg)
|
| 30 |
+
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
|
| 31 |
+
flipud: 0.0 # image flip up-down (probability)
|
| 32 |
+
fliplr: 0.0 # image flip left-right (probability)
|
| 33 |
+
mosaic: 0.0 # image mosaic (probability)
|
| 34 |
+
mixup: 0.0 # image mixup (probability)
|
| 35 |
+
copy_paste: 0.0 # segment copy-paste (probability)
|
yolov5-code-main/data/hyps/hyp.scratch-high.yaml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Hyperparameters for high-augmentation COCO training from scratch
|
| 3 |
+
# python train.py --batch 32 --cfg yolov5m6.yaml --weights '' --data coco.yaml --img 1280 --epochs 300
|
| 4 |
+
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials
|
| 5 |
+
|
| 6 |
+
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
|
| 7 |
+
lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf)
|
| 8 |
+
momentum: 0.937 # SGD momentum/Adam beta1
|
| 9 |
+
weight_decay: 0.0005 # optimizer weight decay 5e-4
|
| 10 |
+
warmup_epochs: 3.0 # warmup epochs (fractions ok)
|
| 11 |
+
warmup_momentum: 0.8 # warmup initial momentum
|
| 12 |
+
warmup_bias_lr: 0.1 # warmup initial bias lr
|
| 13 |
+
box: 0.05 # box loss gain
|
| 14 |
+
cls: 0.3 # cls loss gain
|
| 15 |
+
cls_pw: 1.0 # cls BCELoss positive_weight
|
| 16 |
+
obj: 0.7 # obj loss gain (scale with pixels)
|
| 17 |
+
obj_pw: 1.0 # obj BCELoss positive_weight
|
| 18 |
+
iou_t: 0.20 # IoU training threshold
|
| 19 |
+
anchor_t: 4.0 # anchor-multiple threshold
|
| 20 |
+
# anchors: 3 # anchors per output layer (0 to ignore)
|
| 21 |
+
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
|
| 22 |
+
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
|
| 23 |
+
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
|
| 24 |
+
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
|
| 25 |
+
degrees: 0.0 # image rotation (+/- deg)
|
| 26 |
+
translate: 0.1 # image translation (+/- fraction)
|
| 27 |
+
scale: 0.9 # image scale (+/- gain)
|
| 28 |
+
shear: 0.0 # image shear (+/- deg)
|
| 29 |
+
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
|
| 30 |
+
flipud: 0.0 # image flip up-down (probability)
|
| 31 |
+
fliplr: 0.5 # image flip left-right (probability)
|
| 32 |
+
mosaic: 1.0 # image mosaic (probability)
|
| 33 |
+
mixup: 0.1 # image mixup (probability)
|
| 34 |
+
copy_paste: 0.1 # segment copy-paste (probability)
|
yolov5-code-main/data/hyps/hyp.scratch-low.yaml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Hyperparameters for low-augmentation COCO training from scratch
|
| 3 |
+
# python train.py --batch 64 --cfg yolov5n6.yaml --weights '' --data coco.yaml --img 640 --epochs 300 --linear
|
| 4 |
+
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials
|
| 5 |
+
|
| 6 |
+
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
|
| 7 |
+
lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)
|
| 8 |
+
momentum: 0.937 # SGD momentum/Adam beta1
|
| 9 |
+
weight_decay: 0.0005 # optimizer weight decay 5e-4
|
| 10 |
+
warmup_epochs: 3.0 # warmup epochs (fractions ok)
|
| 11 |
+
warmup_momentum: 0.8 # warmup initial momentum
|
| 12 |
+
warmup_bias_lr: 0.1 # warmup initial bias lr
|
| 13 |
+
box: 0.05 # box loss gain
|
| 14 |
+
cls: 0.5 # cls loss gain
|
| 15 |
+
cls_pw: 1.0 # cls BCELoss positive_weight
|
| 16 |
+
obj: 1.0 # obj loss gain (scale with pixels)
|
| 17 |
+
obj_pw: 1.0 # obj BCELoss positive_weight
|
| 18 |
+
iou_t: 0.20 # IoU training threshold
|
| 19 |
+
anchor_t: 4.0 # anchor-multiple threshold
|
| 20 |
+
# anchors: 3 # anchors per output layer (0 to ignore)
|
| 21 |
+
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
|
| 22 |
+
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
|
| 23 |
+
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
|
| 24 |
+
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
|
| 25 |
+
degrees: 0.0 # image rotation (+/- deg)
|
| 26 |
+
translate: 0.1 # image translation (+/- fraction)
|
| 27 |
+
scale: 0.5 # image scale (+/- gain)
|
| 28 |
+
shear: 0.0 # image shear (+/- deg)
|
| 29 |
+
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
|
| 30 |
+
flipud: 0.0 # image flip up-down (probability)
|
| 31 |
+
fliplr: 0.5 # image flip left-right (probability)
|
| 32 |
+
mosaic: 1.0 # image mosaic (probability)
|
| 33 |
+
mixup: 0.0 # image mixup (probability)
|
| 34 |
+
copy_paste: 0.0 # segment copy-paste (probability)
|
yolov5-code-main/data/hyps/hyp.scratch-med.yaml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# Hyperparameters for medium-augmentation COCO training from scratch
|
| 3 |
+
# python train.py --batch 32 --cfg yolov5m6.yaml --weights '' --data coco.yaml --img 1280 --epochs 300
|
| 4 |
+
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials
|
| 5 |
+
|
| 6 |
+
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
|
| 7 |
+
lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf)
|
| 8 |
+
momentum: 0.937 # SGD momentum/Adam beta1
|
| 9 |
+
weight_decay: 0.0005 # optimizer weight decay 5e-4
|
| 10 |
+
warmup_epochs: 3.0 # warmup epochs (fractions ok)
|
| 11 |
+
warmup_momentum: 0.8 # warmup initial momentum
|
| 12 |
+
warmup_bias_lr: 0.1 # warmup initial bias lr
|
| 13 |
+
box: 0.05 # box loss gain
|
| 14 |
+
cls: 0.3 # cls loss gain
|
| 15 |
+
cls_pw: 1.0 # cls BCELoss positive_weight
|
| 16 |
+
obj: 0.7 # obj loss gain (scale with pixels)
|
| 17 |
+
obj_pw: 1.0 # obj BCELoss positive_weight
|
| 18 |
+
iou_t: 0.20 # IoU training threshold
|
| 19 |
+
anchor_t: 4.0 # anchor-multiple threshold
|
| 20 |
+
# anchors: 3 # anchors per output layer (0 to ignore)
|
| 21 |
+
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
|
| 22 |
+
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
|
| 23 |
+
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
|
| 24 |
+
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
|
| 25 |
+
degrees: 0.0 # image rotation (+/- deg)
|
| 26 |
+
translate: 0.1 # image translation (+/- fraction)
|
| 27 |
+
scale: 0.9 # image scale (+/- gain)
|
| 28 |
+
shear: 0.0 # image shear (+/- deg)
|
| 29 |
+
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
|
| 30 |
+
flipud: 0.0 # image flip up-down (probability)
|
| 31 |
+
fliplr: 0.5 # image flip left-right (probability)
|
| 32 |
+
mosaic: 1.0 # image mosaic (probability)
|
| 33 |
+
mixup: 0.1 # image mixup (probability)
|
| 34 |
+
copy_paste: 0.0 # segment copy-paste (probability)
|
yolov5-code-main/data/images/bus.jpg
ADDED
|
yolov5-code-main/data/images/zidane.jpg
ADDED
|
yolov5-code-main/data/images/zidane.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
yolov5-code-main/data/scripts/download_weights.sh
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 3 |
+
# Download latest models from https://github.com/ultralytics/yolov5/releases
|
| 4 |
+
# Example usage: bash data/scripts/download_weights.sh
|
| 5 |
+
# parent
|
| 6 |
+
# └── yolov5
|
| 7 |
+
# ├── yolov5s.pt ← downloads here
|
| 8 |
+
# ├── yolov5m.pt
|
| 9 |
+
# └── ...
|
| 10 |
+
|
| 11 |
+
python - <<EOF
|
| 12 |
+
from utils.downloads import attempt_download
|
| 13 |
+
|
| 14 |
+
p5 = list('nsmlx') # P5 models
|
| 15 |
+
p6 = [f'{x}6' for x in p5] # P6 models
|
| 16 |
+
cls = [f'{x}-cls' for x in p5] # classification models
|
| 17 |
+
seg = [f'{x}-seg' for x in p5] # classification models
|
| 18 |
+
|
| 19 |
+
for x in p5 + p6 + cls + seg:
|
| 20 |
+
attempt_download(f'weights/yolov5{x}.pt')
|
| 21 |
+
|
| 22 |
+
EOF
|
yolov5-code-main/data/scripts/get_coco.sh
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 3 |
+
# Download COCO 2017 dataset http://cocodataset.org
|
| 4 |
+
# Example usage: bash data/scripts/get_coco.sh
|
| 5 |
+
# parent
|
| 6 |
+
# ├── yolov5
|
| 7 |
+
# └── datasets
|
| 8 |
+
# └── coco ← downloads here
|
| 9 |
+
|
| 10 |
+
# Arguments (optional) Usage: bash data/scripts/get_coco.sh --train --val --test --segments
|
| 11 |
+
if [ "$#" -gt 0 ]; then
|
| 12 |
+
for opt in "$@"; do
|
| 13 |
+
case "${opt}" in
|
| 14 |
+
--train) train=true ;;
|
| 15 |
+
--val) val=true ;;
|
| 16 |
+
--test) test=true ;;
|
| 17 |
+
--segments) segments=true ;;
|
| 18 |
+
esac
|
| 19 |
+
done
|
| 20 |
+
else
|
| 21 |
+
train=true
|
| 22 |
+
val=true
|
| 23 |
+
test=false
|
| 24 |
+
segments=false
|
| 25 |
+
fi
|
| 26 |
+
|
| 27 |
+
# Download/unzip labels
|
| 28 |
+
d='../datasets' # unzip directory
|
| 29 |
+
url=https://github.com/ultralytics/yolov5/releases/download/v1.0/
|
| 30 |
+
if [ "$segments" == "true" ]; then
|
| 31 |
+
f='coco2017labels-segments.zip' # 168 MB
|
| 32 |
+
else
|
| 33 |
+
f='coco2017labels.zip' # 46 MB
|
| 34 |
+
fi
|
| 35 |
+
echo 'Downloading' $url$f ' ...'
|
| 36 |
+
curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f &
|
| 37 |
+
|
| 38 |
+
# Download/unzip images
|
| 39 |
+
d='../datasets/coco/images' # unzip directory
|
| 40 |
+
url=http://images.cocodataset.org/zips/
|
| 41 |
+
if [ "$train" == "true" ]; then
|
| 42 |
+
f='train2017.zip' # 19G, 118k images
|
| 43 |
+
echo 'Downloading' $url$f '...'
|
| 44 |
+
curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f &
|
| 45 |
+
fi
|
| 46 |
+
if [ "$val" == "true" ]; then
|
| 47 |
+
f='val2017.zip' # 1G, 5k images
|
| 48 |
+
echo 'Downloading' $url$f '...'
|
| 49 |
+
curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f &
|
| 50 |
+
fi
|
| 51 |
+
if [ "$test" == "true" ]; then
|
| 52 |
+
f='test2017.zip' # 7G, 41k images (optional)
|
| 53 |
+
echo 'Downloading' $url$f '...'
|
| 54 |
+
curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f &
|
| 55 |
+
fi
|
| 56 |
+
wait # finish background tasks
|
yolov5-code-main/data/scripts/get_coco128.sh
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 3 |
+
# Download COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017)
|
| 4 |
+
# Example usage: bash data/scripts/get_coco128.sh
|
| 5 |
+
# parent
|
| 6 |
+
# ├── yolov5
|
| 7 |
+
# └── datasets
|
| 8 |
+
# └── coco128 ← downloads here
|
| 9 |
+
|
| 10 |
+
# Download/unzip images and labels
|
| 11 |
+
d='../datasets' # unzip directory
|
| 12 |
+
url=https://github.com/ultralytics/yolov5/releases/download/v1.0/
|
| 13 |
+
f='coco128.zip' # or 'coco128-segments.zip', 68 MB
|
| 14 |
+
echo 'Downloading' $url$f ' ...'
|
| 15 |
+
curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f &
|
| 16 |
+
|
| 17 |
+
wait # finish background tasks
|
yolov5-code-main/data/scripts/get_imagenet.sh
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 3 |
+
# Download ILSVRC2012 ImageNet dataset https://image-net.org
|
| 4 |
+
# Example usage: bash data/scripts/get_imagenet.sh
|
| 5 |
+
# parent
|
| 6 |
+
# ├── yolov5
|
| 7 |
+
# └── datasets
|
| 8 |
+
# └── imagenet ← downloads here
|
| 9 |
+
|
| 10 |
+
# Arguments (optional) Usage: bash data/scripts/get_imagenet.sh --train --val
|
| 11 |
+
if [ "$#" -gt 0 ]; then
|
| 12 |
+
for opt in "$@"; do
|
| 13 |
+
case "${opt}" in
|
| 14 |
+
--train) train=true ;;
|
| 15 |
+
--val) val=true ;;
|
| 16 |
+
esac
|
| 17 |
+
done
|
| 18 |
+
else
|
| 19 |
+
train=true
|
| 20 |
+
val=true
|
| 21 |
+
fi
|
| 22 |
+
|
| 23 |
+
# Make dir
|
| 24 |
+
d='../datasets/imagenet' # unzip directory
|
| 25 |
+
mkdir -p $d && cd $d
|
| 26 |
+
|
| 27 |
+
# Download/unzip train
|
| 28 |
+
if [ "$train" == "true" ]; then
|
| 29 |
+
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar # download 138G, 1281167 images
|
| 30 |
+
mkdir train && mv ILSVRC2012_img_train.tar train/ && cd train
|
| 31 |
+
tar -xf ILSVRC2012_img_train.tar && rm -f ILSVRC2012_img_train.tar
|
| 32 |
+
find . -name "*.tar" | while read NAME; do
|
| 33 |
+
mkdir -p "${NAME%.tar}"
|
| 34 |
+
tar -xf "${NAME}" -C "${NAME%.tar}"
|
| 35 |
+
rm -f "${NAME}"
|
| 36 |
+
done
|
| 37 |
+
cd ..
|
| 38 |
+
fi
|
| 39 |
+
|
| 40 |
+
# Download/unzip val
|
| 41 |
+
if [ "$val" == "true" ]; then
|
| 42 |
+
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar # download 6.3G, 50000 images
|
| 43 |
+
mkdir val && mv ILSVRC2012_img_val.tar val/ && cd val && tar -xf ILSVRC2012_img_val.tar
|
| 44 |
+
wget -qO- https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh | bash # move into subdirs
|
| 45 |
+
fi
|
| 46 |
+
|
| 47 |
+
# Delete corrupted image (optional: PNG under JPEG name that may cause dataloaders to fail)
|
| 48 |
+
# rm train/n04266014/n04266014_10835.JPEG
|
| 49 |
+
|
| 50 |
+
# TFRecords (optional)
|
| 51 |
+
# wget https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_lsvrc_2015_synsets.txt
|
yolov5-code-main/data/xView.yaml
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
| 2 |
+
# DIUx xView 2018 Challenge https://challenge.xviewdataset.org by U.S. National Geospatial-Intelligence Agency (NGA)
|
| 3 |
+
# -------- DOWNLOAD DATA MANUALLY and jar xf val_images.zip to 'datasets/xView' before running train command! --------
|
| 4 |
+
# Example usage: python train.py --data xView.yaml
|
| 5 |
+
# parent
|
| 6 |
+
# ├── yolov5
|
| 7 |
+
# └── datasets
|
| 8 |
+
# └── xView ← downloads here (20.7 GB)
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
| 12 |
+
path: ../datasets/xView # dataset root dir
|
| 13 |
+
train: images/autosplit_train.txt # train images (relative to 'path') 90% of 847 train images
|
| 14 |
+
val: images/autosplit_val.txt # train images (relative to 'path') 10% of 847 train images
|
| 15 |
+
|
| 16 |
+
# Classes
|
| 17 |
+
names:
|
| 18 |
+
0: Fixed-wing Aircraft
|
| 19 |
+
1: Small Aircraft
|
| 20 |
+
2: Cargo Plane
|
| 21 |
+
3: Helicopter
|
| 22 |
+
4: Passenger Vehicle
|
| 23 |
+
5: Small Car
|
| 24 |
+
6: Bus
|
| 25 |
+
7: Pickup Truck
|
| 26 |
+
8: Utility Truck
|
| 27 |
+
9: Truck
|
| 28 |
+
10: Cargo Truck
|
| 29 |
+
11: Truck w/Box
|
| 30 |
+
12: Truck Tractor
|
| 31 |
+
13: Trailer
|
| 32 |
+
14: Truck w/Flatbed
|
| 33 |
+
15: Truck w/Liquid
|
| 34 |
+
16: Crane Truck
|
| 35 |
+
17: Railway Vehicle
|
| 36 |
+
18: Passenger Car
|
| 37 |
+
19: Cargo Car
|
| 38 |
+
20: Flat Car
|
| 39 |
+
21: Tank car
|
| 40 |
+
22: Locomotive
|
| 41 |
+
23: Maritime Vessel
|
| 42 |
+
24: Motorboat
|
| 43 |
+
25: Sailboat
|
| 44 |
+
26: Tugboat
|
| 45 |
+
27: Barge
|
| 46 |
+
28: Fishing Vessel
|
| 47 |
+
29: Ferry
|
| 48 |
+
30: Yacht
|
| 49 |
+
31: Container Ship
|
| 50 |
+
32: Oil Tanker
|
| 51 |
+
33: Engineering Vehicle
|
| 52 |
+
34: Tower crane
|
| 53 |
+
35: Container Crane
|
| 54 |
+
36: Reach Stacker
|
| 55 |
+
37: Straddle Carrier
|
| 56 |
+
38: Mobile Crane
|
| 57 |
+
39: Dump Truck
|
| 58 |
+
40: Haul Truck
|
| 59 |
+
41: Scraper/Tractor
|
| 60 |
+
42: Front loader/Bulldozer
|
| 61 |
+
43: Excavator
|
| 62 |
+
44: Cement Mixer
|
| 63 |
+
45: Ground Grader
|
| 64 |
+
46: Hut/Tent
|
| 65 |
+
47: Shed
|
| 66 |
+
48: Building
|
| 67 |
+
49: Aircraft Hangar
|
| 68 |
+
50: Damaged Building
|
| 69 |
+
51: Facility
|
| 70 |
+
52: Construction Site
|
| 71 |
+
53: Vehicle Lot
|
| 72 |
+
54: Helipad
|
| 73 |
+
55: Storage Tank
|
| 74 |
+
56: Shipping container lot
|
| 75 |
+
57: Shipping Container
|
| 76 |
+
58: Pylon
|
| 77 |
+
59: Tower
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
# Download script/URL (optional) ---------------------------------------------------------------------------------------
|
| 81 |
+
download: |
|
| 82 |
+
import json
|
| 83 |
+
import os
|
| 84 |
+
from pathlib import Path
|
| 85 |
+
|
| 86 |
+
import numpy as np
|
| 87 |
+
from PIL import Image
|
| 88 |
+
from tqdm import tqdm
|
| 89 |
+
|
| 90 |
+
from utils.dataloaders import autosplit
|
| 91 |
+
from utils.general import download, xyxy2xywhn
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
def convert_labels(fname=Path('xView/xView_train.geojson')):
|
| 95 |
+
# Convert xView geoJSON labels to YOLO format
|
| 96 |
+
path = fname.parent
|
| 97 |
+
with open(fname) as f:
|
| 98 |
+
print(f'Loading {fname}...')
|
| 99 |
+
data = json.load(f)
|
| 100 |
+
|
| 101 |
+
# Make dirs
|
| 102 |
+
labels = Path(path / 'labels' / 'train')
|
| 103 |
+
os.system(f'rm -rf {labels}')
|
| 104 |
+
labels.mkdir(parents=True, exist_ok=True)
|
| 105 |
+
|
| 106 |
+
# xView classes 11-94 to 0-59
|
| 107 |
+
xview_class2index = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, -1, 4, 5, 6, 7, 8, -1, 9, 10, 11,
|
| 108 |
+
12, 13, 14, 15, -1, -1, 16, 17, 18, 19, 20, 21, 22, -1, 23, 24, 25, -1, 26, 27, -1, 28, -1,
|
| 109 |
+
29, 30, 31, 32, 33, 34, 35, 36, 37, -1, 38, 39, 40, 41, 42, 43, 44, 45, -1, -1, -1, -1, 46,
|
| 110 |
+
47, 48, 49, -1, 50, 51, -1, 52, -1, -1, -1, 53, 54, -1, 55, -1, -1, 56, -1, 57, -1, 58, 59]
|
| 111 |
+
|
| 112 |
+
shapes = {}
|
| 113 |
+
for feature in tqdm(data['features'], desc=f'Converting {fname}'):
|
| 114 |
+
p = feature['properties']
|
| 115 |
+
if p['bounds_imcoords']:
|
| 116 |
+
id = p['image_id']
|
| 117 |
+
file = path / 'train_images' / id
|
| 118 |
+
if file.exists(): # 1395.tif missing
|
| 119 |
+
try:
|
| 120 |
+
box = np.array([int(num) for num in p['bounds_imcoords'].split(",")])
|
| 121 |
+
assert box.shape[0] == 4, f'incorrect box shape {box.shape[0]}'
|
| 122 |
+
cls = p['type_id']
|
| 123 |
+
cls = xview_class2index[int(cls)] # xView class to 0-60
|
| 124 |
+
assert 59 >= cls >= 0, f'incorrect class index {cls}'
|
| 125 |
+
|
| 126 |
+
# Write YOLO label
|
| 127 |
+
if id not in shapes:
|
| 128 |
+
shapes[id] = Image.open(file).size
|
| 129 |
+
box = xyxy2xywhn(box[None].astype(np.float), w=shapes[id][0], h=shapes[id][1], clip=True)
|
| 130 |
+
with open((labels / id).with_suffix('.txt'), 'a') as f:
|
| 131 |
+
f.write(f"{cls} {' '.join(f'{x:.6f}' for x in box[0])}\n") # write label.txt
|
| 132 |
+
except Exception as e:
|
| 133 |
+
print(f'WARNING: skipping one label for {file}: {e}')
|
| 134 |
+
|
| 135 |
+
|
| 136 |
+
# Download manually from https://challenge.xviewdataset.org
|
| 137 |
+
dir = Path(yaml['path']) # dataset root dir
|
| 138 |
+
# urls = ['https://d307kc0mrhucc3.cloudfront.net/train_labels.zip', # train labels
|
| 139 |
+
# 'https://d307kc0mrhucc3.cloudfront.net/train_images.zip', # 15G, 847 train images
|
| 140 |
+
# 'https://d307kc0mrhucc3.cloudfront.net/val_images.zip'] # 5G, 282 val images (no labels)
|
| 141 |
+
# download(urls, dir=dir, delete=False)
|
| 142 |
+
|
| 143 |
+
# Convert labels
|
| 144 |
+
convert_labels(dir / 'xView_train.geojson')
|
| 145 |
+
|
| 146 |
+
# Move images
|
| 147 |
+
images = Path(dir / 'images')
|
| 148 |
+
images.mkdir(parents=True, exist_ok=True)
|
| 149 |
+
Path(dir / 'train_images').rename(dir / 'images' / 'train')
|
| 150 |
+
Path(dir / 'val_images').rename(dir / 'images' / 'val')
|
| 151 |
+
|
| 152 |
+
# Split
|
| 153 |
+
autosplit(dir / 'images' / 'train')
|
yolov5-code-main/datasets/BVN.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fefc13a50c366f684aec42b9a47bc53d9e20b1e7a0447accf65c5bacf5ef7ffd
|
| 3 |
+
size 48121124
|
yolov5-code-main/datasets/classes.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
daitu
|
| 2 |
+
mingren
|
yolov5-code-main/datasets/coco128-seg/LICENSE
ADDED
|
@@ -0,0 +1,674 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
GNU GENERAL PUBLIC LICENSE
|
| 2 |
+
Version 3, 29 June 2007
|
| 3 |
+
|
| 4 |
+
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
| 5 |
+
Everyone is permitted to copy and distribute verbatim copies
|
| 6 |
+
of this license document, but changing it is not allowed.
|
| 7 |
+
|
| 8 |
+
Preamble
|
| 9 |
+
|
| 10 |
+
The GNU General Public License is a free, copyleft license for
|
| 11 |
+
software and other kinds of works.
|
| 12 |
+
|
| 13 |
+
The licenses for most software and other practical works are designed
|
| 14 |
+
to take away your freedom to share and change the works. By contrast,
|
| 15 |
+
the GNU General Public License is intended to guarantee your freedom to
|
| 16 |
+
share and change all versions of a program--to make sure it remains free
|
| 17 |
+
software for all its users. We, the Free Software Foundation, use the
|
| 18 |
+
GNU General Public License for most of our software; it applies also to
|
| 19 |
+
any other work released this way by its authors. You can apply it to
|
| 20 |
+
your programs, too.
|
| 21 |
+
|
| 22 |
+
When we speak of free software, we are referring to freedom, not
|
| 23 |
+
price. Our General Public Licenses are designed to make sure that you
|
| 24 |
+
have the freedom to distribute copies of free software (and charge for
|
| 25 |
+
them if you wish), that you receive source code or can get it if you
|
| 26 |
+
want it, that you can change the software or use pieces of it in new
|
| 27 |
+
free programs, and that you know you can do these things.
|
| 28 |
+
|
| 29 |
+
To protect your rights, we need to prevent others from denying you
|
| 30 |
+
these rights or asking you to surrender the rights. Therefore, you have
|
| 31 |
+
certain responsibilities if you distribute copies of the software, or if
|
| 32 |
+
you modify it: responsibilities to respect the freedom of others.
|
| 33 |
+
|
| 34 |
+
For example, if you distribute copies of such a program, whether
|
| 35 |
+
gratis or for a fee, you must pass on to the recipients the same
|
| 36 |
+
freedoms that you received. You must make sure that they, too, receive
|
| 37 |
+
or can get the source code. And you must show them these terms so they
|
| 38 |
+
know their rights.
|
| 39 |
+
|
| 40 |
+
Developers that use the GNU GPL protect your rights with two steps:
|
| 41 |
+
(1) assert copyright on the software, and (2) offer you this License
|
| 42 |
+
giving you legal permission to copy, distribute and/or modify it.
|
| 43 |
+
|
| 44 |
+
For the developers' and authors' protection, the GPL clearly explains
|
| 45 |
+
that there is no warranty for this free software. For both users' and
|
| 46 |
+
authors' sake, the GPL requires that modified versions be marked as
|
| 47 |
+
changed, so that their problems will not be attributed erroneously to
|
| 48 |
+
authors of previous versions.
|
| 49 |
+
|
| 50 |
+
Some devices are designed to deny users access to install or run
|
| 51 |
+
modified versions of the software inside them, although the manufacturer
|
| 52 |
+
can do so. This is fundamentally incompatible with the aim of
|
| 53 |
+
protecting users' freedom to change the software. The systematic
|
| 54 |
+
pattern of such abuse occurs in the area of products for individuals to
|
| 55 |
+
use, which is precisely where it is most unacceptable. Therefore, we
|
| 56 |
+
have designed this version of the GPL to prohibit the practice for those
|
| 57 |
+
products. If such problems arise substantially in other domains, we
|
| 58 |
+
stand ready to extend this provision to those domains in future versions
|
| 59 |
+
of the GPL, as needed to protect the freedom of users.
|
| 60 |
+
|
| 61 |
+
Finally, every program is threatened constantly by software patents.
|
| 62 |
+
States should not allow patents to restrict development and use of
|
| 63 |
+
software on general-purpose computers, but in those that do, we wish to
|
| 64 |
+
avoid the special danger that patents applied to a free program could
|
| 65 |
+
make it effectively proprietary. To prevent this, the GPL assures that
|
| 66 |
+
patents cannot be used to render the program non-free.
|
| 67 |
+
|
| 68 |
+
The precise terms and conditions for copying, distribution and
|
| 69 |
+
modification follow.
|
| 70 |
+
|
| 71 |
+
TERMS AND CONDITIONS
|
| 72 |
+
|
| 73 |
+
0. Definitions.
|
| 74 |
+
|
| 75 |
+
"This License" refers to version 3 of the GNU General Public License.
|
| 76 |
+
|
| 77 |
+
"Copyright" also means copyright-like laws that apply to other kinds of
|
| 78 |
+
works, such as semiconductor masks.
|
| 79 |
+
|
| 80 |
+
"The Program" refers to any copyrightable work licensed under this
|
| 81 |
+
License. Each licensee is addressed as "you". "Licensees" and
|
| 82 |
+
"recipients" may be individuals or organizations.
|
| 83 |
+
|
| 84 |
+
To "modify" a work means to copy from or adapt all or part of the work
|
| 85 |
+
in a fashion requiring copyright permission, other than the making of an
|
| 86 |
+
exact copy. The resulting work is called a "modified version" of the
|
| 87 |
+
earlier work or a work "based on" the earlier work.
|
| 88 |
+
|
| 89 |
+
A "covered work" means either the unmodified Program or a work based
|
| 90 |
+
on the Program.
|
| 91 |
+
|
| 92 |
+
To "propagate" a work means to do anything with it that, without
|
| 93 |
+
permission, would make you directly or secondarily liable for
|
| 94 |
+
infringement under applicable copyright law, except executing it on a
|
| 95 |
+
computer or modifying a private copy. Propagation includes copying,
|
| 96 |
+
distribution (with or without modification), making available to the
|
| 97 |
+
public, and in some countries other activities as well.
|
| 98 |
+
|
| 99 |
+
To "convey" a work means any kind of propagation that enables other
|
| 100 |
+
parties to make or receive copies. Mere interaction with a user through
|
| 101 |
+
a computer network, with no transfer of a copy, is not conveying.
|
| 102 |
+
|
| 103 |
+
An interactive user interface displays "Appropriate Legal Notices"
|
| 104 |
+
to the extent that it includes a convenient and prominently visible
|
| 105 |
+
feature that (1) displays an appropriate copyright notice, and (2)
|
| 106 |
+
tells the user that there is no warranty for the work (except to the
|
| 107 |
+
extent that warranties are provided), that licensees may convey the
|
| 108 |
+
work under this License, and how to view a copy of this License. If
|
| 109 |
+
the interface presents a list of user commands or options, such as a
|
| 110 |
+
menu, a prominent item in the list meets this criterion.
|
| 111 |
+
|
| 112 |
+
1. Source Code.
|
| 113 |
+
|
| 114 |
+
The "source code" for a work means the preferred form of the work
|
| 115 |
+
for making modifications to it. "Object code" means any non-source
|
| 116 |
+
form of a work.
|
| 117 |
+
|
| 118 |
+
A "Standard Interface" means an interface that either is an official
|
| 119 |
+
standard defined by a recognized standards body, or, in the case of
|
| 120 |
+
interfaces specified for a particular programming language, one that
|
| 121 |
+
is widely used among developers working in that language.
|
| 122 |
+
|
| 123 |
+
The "System Libraries" of an executable work include anything, other
|
| 124 |
+
than the work as a whole, that (a) is included in the normal form of
|
| 125 |
+
packaging a Major Component, but which is not part of that Major
|
| 126 |
+
Component, and (b) serves only to enable use of the work with that
|
| 127 |
+
Major Component, or to implement a Standard Interface for which an
|
| 128 |
+
implementation is available to the public in source code form. A
|
| 129 |
+
"Major Component", in this context, means a major essential component
|
| 130 |
+
(kernel, window system, and so on) of the specific operating system
|
| 131 |
+
(if any) on which the executable work runs, or a compiler used to
|
| 132 |
+
produce the work, or an object code interpreter used to run it.
|
| 133 |
+
|
| 134 |
+
The "Corresponding Source" for a work in object code form means all
|
| 135 |
+
the source code needed to generate, install, and (for an executable
|
| 136 |
+
work) run the object code and to modify the work, including scripts to
|
| 137 |
+
control those activities. However, it does not include the work's
|
| 138 |
+
System Libraries, or general-purpose tools or generally available free
|
| 139 |
+
programs which are used unmodified in performing those activities but
|
| 140 |
+
which are not part of the work. For example, Corresponding Source
|
| 141 |
+
includes interface definition files associated with source files for
|
| 142 |
+
the work, and the source code for shared libraries and dynamically
|
| 143 |
+
linked subprograms that the work is specifically designed to require,
|
| 144 |
+
such as by intimate data communication or control flow between those
|
| 145 |
+
subprograms and other parts of the work.
|
| 146 |
+
|
| 147 |
+
The Corresponding Source need not include anything that users
|
| 148 |
+
can regenerate automatically from other parts of the Corresponding
|
| 149 |
+
Source.
|
| 150 |
+
|
| 151 |
+
The Corresponding Source for a work in source code form is that
|
| 152 |
+
same work.
|
| 153 |
+
|
| 154 |
+
2. Basic Permissions.
|
| 155 |
+
|
| 156 |
+
All rights granted under this License are granted for the term of
|
| 157 |
+
copyright on the Program, and are irrevocable provided the stated
|
| 158 |
+
conditions are met. This License explicitly affirms your unlimited
|
| 159 |
+
permission to run the unmodified Program. The output from running a
|
| 160 |
+
covered work is covered by this License only if the output, given its
|
| 161 |
+
content, constitutes a covered work. This License acknowledges your
|
| 162 |
+
rights of fair use or other equivalent, as provided by copyright law.
|
| 163 |
+
|
| 164 |
+
You may make, run and propagate covered works that you do not
|
| 165 |
+
convey, without conditions so long as your license otherwise remains
|
| 166 |
+
in force. You may convey covered works to others for the sole purpose
|
| 167 |
+
of having them make modifications exclusively for you, or provide you
|
| 168 |
+
with facilities for running those works, provided that you comply with
|
| 169 |
+
the terms of this License in conveying all material for which you do
|
| 170 |
+
not control copyright. Those thus making or running the covered works
|
| 171 |
+
for you must do so exclusively on your behalf, under your direction
|
| 172 |
+
and control, on terms that prohibit them from making any copies of
|
| 173 |
+
your copyrighted material outside their relationship with you.
|
| 174 |
+
|
| 175 |
+
Conveying under any other circumstances is permitted solely under
|
| 176 |
+
the conditions stated below. Sublicensing is not allowed; section 10
|
| 177 |
+
makes it unnecessary.
|
| 178 |
+
|
| 179 |
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
| 180 |
+
|
| 181 |
+
No covered work shall be deemed part of an effective technological
|
| 182 |
+
measure under any applicable law fulfilling obligations under article
|
| 183 |
+
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
| 184 |
+
similar laws prohibiting or restricting circumvention of such
|
| 185 |
+
measures.
|
| 186 |
+
|
| 187 |
+
When you convey a covered work, you waive any legal power to forbid
|
| 188 |
+
circumvention of technological measures to the extent such circumvention
|
| 189 |
+
is effected by exercising rights under this License with respect to
|
| 190 |
+
the covered work, and you disclaim any intention to limit operation or
|
| 191 |
+
modification of the work as a means of enforcing, against the work's
|
| 192 |
+
users, your or third parties' legal rights to forbid circumvention of
|
| 193 |
+
technological measures.
|
| 194 |
+
|
| 195 |
+
4. Conveying Verbatim Copies.
|
| 196 |
+
|
| 197 |
+
You may convey verbatim copies of the Program's source code as you
|
| 198 |
+
receive it, in any medium, provided that you conspicuously and
|
| 199 |
+
appropriately publish on each copy an appropriate copyright notice;
|
| 200 |
+
keep intact all notices stating that this License and any
|
| 201 |
+
non-permissive terms added in accord with section 7 apply to the code;
|
| 202 |
+
keep intact all notices of the absence of any warranty; and give all
|
| 203 |
+
recipients a copy of this License along with the Program.
|
| 204 |
+
|
| 205 |
+
You may charge any price or no price for each copy that you convey,
|
| 206 |
+
and you may offer support or warranty protection for a fee.
|
| 207 |
+
|
| 208 |
+
5. Conveying Modified Source Versions.
|
| 209 |
+
|
| 210 |
+
You may convey a work based on the Program, or the modifications to
|
| 211 |
+
produce it from the Program, in the form of source code under the
|
| 212 |
+
terms of section 4, provided that you also meet all of these conditions:
|
| 213 |
+
|
| 214 |
+
a) The work must carry prominent notices stating that you modified
|
| 215 |
+
it, and giving a relevant date.
|
| 216 |
+
|
| 217 |
+
b) The work must carry prominent notices stating that it is
|
| 218 |
+
released under this License and any conditions added under section
|
| 219 |
+
7. This requirement modifies the requirement in section 4 to
|
| 220 |
+
"keep intact all notices".
|
| 221 |
+
|
| 222 |
+
c) You must license the entire work, as a whole, under this
|
| 223 |
+
License to anyone who comes into possession of a copy. This
|
| 224 |
+
License will therefore apply, along with any applicable section 7
|
| 225 |
+
additional terms, to the whole of the work, and all its parts,
|
| 226 |
+
regardless of how they are packaged. This License gives no
|
| 227 |
+
permission to license the work in any other way, but it does not
|
| 228 |
+
invalidate such permission if you have separately received it.
|
| 229 |
+
|
| 230 |
+
d) If the work has interactive user interfaces, each must display
|
| 231 |
+
Appropriate Legal Notices; however, if the Program has interactive
|
| 232 |
+
interfaces that do not display Appropriate Legal Notices, your
|
| 233 |
+
work need not make them do so.
|
| 234 |
+
|
| 235 |
+
A compilation of a covered work with other separate and independent
|
| 236 |
+
works, which are not by their nature extensions of the covered work,
|
| 237 |
+
and which are not combined with it such as to form a larger program,
|
| 238 |
+
in or on a volume of a storage or distribution medium, is called an
|
| 239 |
+
"aggregate" if the compilation and its resulting copyright are not
|
| 240 |
+
used to limit the access or legal rights of the compilation's users
|
| 241 |
+
beyond what the individual works permit. Inclusion of a covered work
|
| 242 |
+
in an aggregate does not cause this License to apply to the other
|
| 243 |
+
parts of the aggregate.
|
| 244 |
+
|
| 245 |
+
6. Conveying Non-Source Forms.
|
| 246 |
+
|
| 247 |
+
You may convey a covered work in object code form under the terms
|
| 248 |
+
of sections 4 and 5, provided that you also convey the
|
| 249 |
+
machine-readable Corresponding Source under the terms of this License,
|
| 250 |
+
in one of these ways:
|
| 251 |
+
|
| 252 |
+
a) Convey the object code in, or embodied in, a physical product
|
| 253 |
+
(including a physical distribution medium), accompanied by the
|
| 254 |
+
Corresponding Source fixed on a durable physical medium
|
| 255 |
+
customarily used for software interchange.
|
| 256 |
+
|
| 257 |
+
b) Convey the object code in, or embodied in, a physical product
|
| 258 |
+
(including a physical distribution medium), accompanied by a
|
| 259 |
+
written offer, valid for at least three years and valid for as
|
| 260 |
+
long as you offer spare parts or customer support for that product
|
| 261 |
+
model, to give anyone who possesses the object code either (1) a
|
| 262 |
+
copy of the Corresponding Source for all the software in the
|
| 263 |
+
product that is covered by this License, on a durable physical
|
| 264 |
+
medium customarily used for software interchange, for a price no
|
| 265 |
+
more than your reasonable cost of physically performing this
|
| 266 |
+
conveying of source, or (2) access to copy the
|
| 267 |
+
Corresponding Source from a network server at no charge.
|
| 268 |
+
|
| 269 |
+
c) Convey individual copies of the object code with a copy of the
|
| 270 |
+
written offer to provide the Corresponding Source. This
|
| 271 |
+
alternative is allowed only occasionally and noncommercially, and
|
| 272 |
+
only if you received the object code with such an offer, in accord
|
| 273 |
+
with subsection 6b.
|
| 274 |
+
|
| 275 |
+
d) Convey the object code by offering access from a designated
|
| 276 |
+
place (gratis or for a charge), and offer equivalent access to the
|
| 277 |
+
Corresponding Source in the same way through the same place at no
|
| 278 |
+
further charge. You need not require recipients to copy the
|
| 279 |
+
Corresponding Source along with the object code. If the place to
|
| 280 |
+
copy the object code is a network server, the Corresponding Source
|
| 281 |
+
may be on a different server (operated by you or a third party)
|
| 282 |
+
that supports equivalent copying facilities, provided you maintain
|
| 283 |
+
clear directions next to the object code saying where to find the
|
| 284 |
+
Corresponding Source. Regardless of what server hosts the
|
| 285 |
+
Corresponding Source, you remain obligated to ensure that it is
|
| 286 |
+
available for as long as needed to satisfy these requirements.
|
| 287 |
+
|
| 288 |
+
e) Convey the object code using peer-to-peer transmission, provided
|
| 289 |
+
you inform other peers where the object code and Corresponding
|
| 290 |
+
Source of the work are being offered to the general public at no
|
| 291 |
+
charge under subsection 6d.
|
| 292 |
+
|
| 293 |
+
A separable portion of the object code, whose source code is excluded
|
| 294 |
+
from the Corresponding Source as a System Library, need not be
|
| 295 |
+
included in conveying the object code work.
|
| 296 |
+
|
| 297 |
+
A "User Product" is either (1) a "consumer product", which means any
|
| 298 |
+
tangible personal property which is normally used for personal, family,
|
| 299 |
+
or household purposes, or (2) anything designed or sold for incorporation
|
| 300 |
+
into a dwelling. In determining whether a product is a consumer product,
|
| 301 |
+
doubtful cases shall be resolved in favor of coverage. For a particular
|
| 302 |
+
product received by a particular user, "normally used" refers to a
|
| 303 |
+
typical or common use of that class of product, regardless of the status
|
| 304 |
+
of the particular user or of the way in which the particular user
|
| 305 |
+
actually uses, or expects or is expected to use, the product. A product
|
| 306 |
+
is a consumer product regardless of whether the product has substantial
|
| 307 |
+
commercial, industrial or non-consumer uses, unless such uses represent
|
| 308 |
+
the only significant mode of use of the product.
|
| 309 |
+
|
| 310 |
+
"Installation Information" for a User Product means any methods,
|
| 311 |
+
procedures, authorization keys, or other information required to install
|
| 312 |
+
and execute modified versions of a covered work in that User Product from
|
| 313 |
+
a modified version of its Corresponding Source. The information must
|
| 314 |
+
suffice to ensure that the continued functioning of the modified object
|
| 315 |
+
code is in no case prevented or interfered with solely because
|
| 316 |
+
modification has been made.
|
| 317 |
+
|
| 318 |
+
If you convey an object code work under this section in, or with, or
|
| 319 |
+
specifically for use in, a User Product, and the conveying occurs as
|
| 320 |
+
part of a transaction in which the right of possession and use of the
|
| 321 |
+
User Product is transferred to the recipient in perpetuity or for a
|
| 322 |
+
fixed term (regardless of how the transaction is characterized), the
|
| 323 |
+
Corresponding Source conveyed under this section must be accompanied
|
| 324 |
+
by the Installation Information. But this requirement does not apply
|
| 325 |
+
if neither you nor any third party retains the ability to install
|
| 326 |
+
modified object code on the User Product (for example, the work has
|
| 327 |
+
been installed in ROM).
|
| 328 |
+
|
| 329 |
+
The requirement to provide Installation Information does not include a
|
| 330 |
+
requirement to continue to provide support service, warranty, or updates
|
| 331 |
+
for a work that has been modified or installed by the recipient, or for
|
| 332 |
+
the User Product in which it has been modified or installed. Access to a
|
| 333 |
+
network may be denied when the modification itself materially and
|
| 334 |
+
adversely affects the operation of the network or violates the rules and
|
| 335 |
+
protocols for communication across the network.
|
| 336 |
+
|
| 337 |
+
Corresponding Source conveyed, and Installation Information provided,
|
| 338 |
+
in accord with this section must be in a format that is publicly
|
| 339 |
+
documented (and with an implementation available to the public in
|
| 340 |
+
source code form), and must require no special password or key for
|
| 341 |
+
unpacking, reading or copying.
|
| 342 |
+
|
| 343 |
+
7. Additional Terms.
|
| 344 |
+
|
| 345 |
+
"Additional permissions" are terms that supplement the terms of this
|
| 346 |
+
License by making exceptions from one or more of its conditions.
|
| 347 |
+
Additional permissions that are applicable to the entire Program shall
|
| 348 |
+
be treated as though they were included in this License, to the extent
|
| 349 |
+
that they are valid under applicable law. If additional permissions
|
| 350 |
+
apply only to part of the Program, that part may be used separately
|
| 351 |
+
under those permissions, but the entire Program remains governed by
|
| 352 |
+
this License without regard to the additional permissions.
|
| 353 |
+
|
| 354 |
+
When you convey a copy of a covered work, you may at your option
|
| 355 |
+
remove any additional permissions from that copy, or from any part of
|
| 356 |
+
it. (Additional permissions may be written to require their own
|
| 357 |
+
removal in certain cases when you modify the work.) You may place
|
| 358 |
+
additional permissions on material, added by you to a covered work,
|
| 359 |
+
for which you have or can give appropriate copyright permission.
|
| 360 |
+
|
| 361 |
+
Notwithstanding any other provision of this License, for material you
|
| 362 |
+
add to a covered work, you may (if authorized by the copyright holders of
|
| 363 |
+
that material) supplement the terms of this License with terms:
|
| 364 |
+
|
| 365 |
+
a) Disclaiming warranty or limiting liability differently from the
|
| 366 |
+
terms of sections 15 and 16 of this License; or
|
| 367 |
+
|
| 368 |
+
b) Requiring preservation of specified reasonable legal notices or
|
| 369 |
+
author attributions in that material or in the Appropriate Legal
|
| 370 |
+
Notices displayed by works containing it; or
|
| 371 |
+
|
| 372 |
+
c) Prohibiting misrepresentation of the origin of that material, or
|
| 373 |
+
requiring that modified versions of such material be marked in
|
| 374 |
+
reasonable ways as different from the original version; or
|
| 375 |
+
|
| 376 |
+
d) Limiting the use for publicity purposes of names of licensors or
|
| 377 |
+
authors of the material; or
|
| 378 |
+
|
| 379 |
+
e) Declining to grant rights under trademark law for use of some
|
| 380 |
+
trade names, trademarks, or service marks; or
|
| 381 |
+
|
| 382 |
+
f) Requiring indemnification of licensors and authors of that
|
| 383 |
+
material by anyone who conveys the material (or modified versions of
|
| 384 |
+
it) with contractual assumptions of liability to the recipient, for
|
| 385 |
+
any liability that these contractual assumptions directly impose on
|
| 386 |
+
those licensors and authors.
|
| 387 |
+
|
| 388 |
+
All other non-permissive additional terms are considered "further
|
| 389 |
+
restrictions" within the meaning of section 10. If the Program as you
|
| 390 |
+
received it, or any part of it, contains a notice stating that it is
|
| 391 |
+
governed by this License along with a term that is a further
|
| 392 |
+
restriction, you may remove that term. If a license document contains
|
| 393 |
+
a further restriction but permits relicensing or conveying under this
|
| 394 |
+
License, you may add to a covered work material governed by the terms
|
| 395 |
+
of that license document, provided that the further restriction does
|
| 396 |
+
not survive such relicensing or conveying.
|
| 397 |
+
|
| 398 |
+
If you add terms to a covered work in accord with this section, you
|
| 399 |
+
must place, in the relevant source files, a statement of the
|
| 400 |
+
additional terms that apply to those files, or a notice indicating
|
| 401 |
+
where to find the applicable terms.
|
| 402 |
+
|
| 403 |
+
Additional terms, permissive or non-permissive, may be stated in the
|
| 404 |
+
form of a separately written license, or stated as exceptions;
|
| 405 |
+
the above requirements apply either way.
|
| 406 |
+
|
| 407 |
+
8. Termination.
|
| 408 |
+
|
| 409 |
+
You may not propagate or modify a covered work except as expressly
|
| 410 |
+
provided under this License. Any attempt otherwise to propagate or
|
| 411 |
+
modify it is void, and will automatically terminate your rights under
|
| 412 |
+
this License (including any patent licenses granted under the third
|
| 413 |
+
paragraph of section 11).
|
| 414 |
+
|
| 415 |
+
However, if you cease all violation of this License, then your
|
| 416 |
+
license from a particular copyright holder is reinstated (a)
|
| 417 |
+
provisionally, unless and until the copyright holder explicitly and
|
| 418 |
+
finally terminates your license, and (b) permanently, if the copyright
|
| 419 |
+
holder fails to notify you of the violation by some reasonable means
|
| 420 |
+
prior to 60 days after the cessation.
|
| 421 |
+
|
| 422 |
+
Moreover, your license from a particular copyright holder is
|
| 423 |
+
reinstated permanently if the copyright holder notifies you of the
|
| 424 |
+
violation by some reasonable means, this is the first time you have
|
| 425 |
+
received notice of violation of this License (for any work) from that
|
| 426 |
+
copyright holder, and you cure the violation prior to 30 days after
|
| 427 |
+
your receipt of the notice.
|
| 428 |
+
|
| 429 |
+
Termination of your rights under this section does not terminate the
|
| 430 |
+
licenses of parties who have received copies or rights from you under
|
| 431 |
+
this License. If your rights have been terminated and not permanently
|
| 432 |
+
reinstated, you do not qualify to receive new licenses for the same
|
| 433 |
+
material under section 10.
|
| 434 |
+
|
| 435 |
+
9. Acceptance Not Required for Having Copies.
|
| 436 |
+
|
| 437 |
+
You are not required to accept this License in order to receive or
|
| 438 |
+
run a copy of the Program. Ancillary propagation of a covered work
|
| 439 |
+
occurring solely as a consequence of using peer-to-peer transmission
|
| 440 |
+
to receive a copy likewise does not require acceptance. However,
|
| 441 |
+
nothing other than this License grants you permission to propagate or
|
| 442 |
+
modify any covered work. These actions infringe copyright if you do
|
| 443 |
+
not accept this License. Therefore, by modifying or propagating a
|
| 444 |
+
covered work, you indicate your acceptance of this License to do so.
|
| 445 |
+
|
| 446 |
+
10. Automatic Licensing of Downstream Recipients.
|
| 447 |
+
|
| 448 |
+
Each time you convey a covered work, the recipient automatically
|
| 449 |
+
receives a license from the original licensors, to run, modify and
|
| 450 |
+
propagate that work, subject to this License. You are not responsible
|
| 451 |
+
for enforcing compliance by third parties with this License.
|
| 452 |
+
|
| 453 |
+
An "entity transaction" is a transaction transferring control of an
|
| 454 |
+
organization, or substantially all assets of one, or subdividing an
|
| 455 |
+
organization, or merging organizations. If propagation of a covered
|
| 456 |
+
work results from an entity transaction, each party to that
|
| 457 |
+
transaction who receives a copy of the work also receives whatever
|
| 458 |
+
licenses to the work the party's predecessor in interest had or could
|
| 459 |
+
give under the previous paragraph, plus a right to possession of the
|
| 460 |
+
Corresponding Source of the work from the predecessor in interest, if
|
| 461 |
+
the predecessor has it or can get it with reasonable efforts.
|
| 462 |
+
|
| 463 |
+
You may not impose any further restrictions on the exercise of the
|
| 464 |
+
rights granted or affirmed under this License. For example, you may
|
| 465 |
+
not impose a license fee, royalty, or other charge for exercise of
|
| 466 |
+
rights granted under this License, and you may not initiate litigation
|
| 467 |
+
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
| 468 |
+
any patent claim is infringed by making, using, selling, offering for
|
| 469 |
+
sale, or importing the Program or any portion of it.
|
| 470 |
+
|
| 471 |
+
11. Patents.
|
| 472 |
+
|
| 473 |
+
A "contributor" is a copyright holder who authorizes use under this
|
| 474 |
+
License of the Program or a work on which the Program is based. The
|
| 475 |
+
work thus licensed is called the contributor's "contributor version".
|
| 476 |
+
|
| 477 |
+
A contributor's "essential patent claims" are all patent claims
|
| 478 |
+
owned or controlled by the contributor, whether already acquired or
|
| 479 |
+
hereafter acquired, that would be infringed by some manner, permitted
|
| 480 |
+
by this License, of making, using, or selling its contributor version,
|
| 481 |
+
but do not include claims that would be infringed only as a
|
| 482 |
+
consequence of further modification of the contributor version. For
|
| 483 |
+
purposes of this definition, "control" includes the right to grant
|
| 484 |
+
patent sublicenses in a manner consistent with the requirements of
|
| 485 |
+
this License.
|
| 486 |
+
|
| 487 |
+
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
| 488 |
+
patent license under the contributor's essential patent claims, to
|
| 489 |
+
make, use, sell, offer for sale, import and otherwise run, modify and
|
| 490 |
+
propagate the contents of its contributor version.
|
| 491 |
+
|
| 492 |
+
In the following three paragraphs, a "patent license" is any express
|
| 493 |
+
agreement or commitment, however denominated, not to enforce a patent
|
| 494 |
+
(such as an express permission to practice a patent or covenant not to
|
| 495 |
+
sue for patent infringement). To "grant" such a patent license to a
|
| 496 |
+
party means to make such an agreement or commitment not to enforce a
|
| 497 |
+
patent against the party.
|
| 498 |
+
|
| 499 |
+
If you convey a covered work, knowingly relying on a patent license,
|
| 500 |
+
and the Corresponding Source of the work is not available for anyone
|
| 501 |
+
to copy, free of charge and under the terms of this License, through a
|
| 502 |
+
publicly available network server or other readily accessible means,
|
| 503 |
+
then you must either (1) cause the Corresponding Source to be so
|
| 504 |
+
available, or (2) arrange to deprive yourself of the benefit of the
|
| 505 |
+
patent license for this particular work, or (3) arrange, in a manner
|
| 506 |
+
consistent with the requirements of this License, to extend the patent
|
| 507 |
+
license to downstream recipients. "Knowingly relying" means you have
|
| 508 |
+
actual knowledge that, but for the patent license, your conveying the
|
| 509 |
+
covered work in a country, or your recipient's use of the covered work
|
| 510 |
+
in a country, would infringe one or more identifiable patents in that
|
| 511 |
+
country that you have reason to believe are valid.
|
| 512 |
+
|
| 513 |
+
If, pursuant to or in connection with a single transaction or
|
| 514 |
+
arrangement, you convey, or propagate by procuring conveyance of, a
|
| 515 |
+
covered work, and grant a patent license to some of the parties
|
| 516 |
+
receiving the covered work authorizing them to use, propagate, modify
|
| 517 |
+
or convey a specific copy of the covered work, then the patent license
|
| 518 |
+
you grant is automatically extended to all recipients of the covered
|
| 519 |
+
work and works based on it.
|
| 520 |
+
|
| 521 |
+
A patent license is "discriminatory" if it does not include within
|
| 522 |
+
the scope of its coverage, prohibits the exercise of, or is
|
| 523 |
+
conditioned on the non-exercise of one or more of the rights that are
|
| 524 |
+
specifically granted under this License. You may not convey a covered
|
| 525 |
+
work if you are a party to an arrangement with a third party that is
|
| 526 |
+
in the business of distributing software, under which you make payment
|
| 527 |
+
to the third party based on the extent of your activity of conveying
|
| 528 |
+
the work, and under which the third party grants, to any of the
|
| 529 |
+
parties who would receive the covered work from you, a discriminatory
|
| 530 |
+
patent license (a) in connection with copies of the covered work
|
| 531 |
+
conveyed by you (or copies made from those copies), or (b) primarily
|
| 532 |
+
for and in connection with specific products or compilations that
|
| 533 |
+
contain the covered work, unless you entered into that arrangement,
|
| 534 |
+
or that patent license was granted, prior to 28 March 2007.
|
| 535 |
+
|
| 536 |
+
Nothing in this License shall be construed as excluding or limiting
|
| 537 |
+
any implied license or other defenses to infringement that may
|
| 538 |
+
otherwise be available to you under applicable patent law.
|
| 539 |
+
|
| 540 |
+
12. No Surrender of Others' Freedom.
|
| 541 |
+
|
| 542 |
+
If conditions are imposed on you (whether by court order, agreement or
|
| 543 |
+
otherwise) that contradict the conditions of this License, they do not
|
| 544 |
+
excuse you from the conditions of this License. If you cannot convey a
|
| 545 |
+
covered work so as to satisfy simultaneously your obligations under this
|
| 546 |
+
License and any other pertinent obligations, then as a consequence you may
|
| 547 |
+
not convey it at all. For example, if you agree to terms that obligate you
|
| 548 |
+
to collect a royalty for further conveying from those to whom you convey
|
| 549 |
+
the Program, the only way you could satisfy both those terms and this
|
| 550 |
+
License would be to refrain entirely from conveying the Program.
|
| 551 |
+
|
| 552 |
+
13. Use with the GNU Affero General Public License.
|
| 553 |
+
|
| 554 |
+
Notwithstanding any other provision of this License, you have
|
| 555 |
+
permission to link or combine any covered work with a work licensed
|
| 556 |
+
under version 3 of the GNU Affero General Public License into a single
|
| 557 |
+
combined work, and to convey the resulting work. The terms of this
|
| 558 |
+
License will continue to apply to the part which is the covered work,
|
| 559 |
+
but the special requirements of the GNU Affero General Public License,
|
| 560 |
+
section 13, concerning interaction through a network will apply to the
|
| 561 |
+
combination as such.
|
| 562 |
+
|
| 563 |
+
14. Revised Versions of this License.
|
| 564 |
+
|
| 565 |
+
The Free Software Foundation may publish revised and/or new versions of
|
| 566 |
+
the GNU General Public License from time to time. Such new versions will
|
| 567 |
+
be similar in spirit to the present version, but may differ in detail to
|
| 568 |
+
address new problems or concerns.
|
| 569 |
+
|
| 570 |
+
Each version is given a distinguishing version number. If the
|
| 571 |
+
Program specifies that a certain numbered version of the GNU General
|
| 572 |
+
Public License "or any later version" applies to it, you have the
|
| 573 |
+
option of following the terms and conditions either of that numbered
|
| 574 |
+
version or of any later version published by the Free Software
|
| 575 |
+
Foundation. If the Program does not specify a version number of the
|
| 576 |
+
GNU General Public License, you may choose any version ever published
|
| 577 |
+
by the Free Software Foundation.
|
| 578 |
+
|
| 579 |
+
If the Program specifies that a proxy can decide which future
|
| 580 |
+
versions of the GNU General Public License can be used, that proxy's
|
| 581 |
+
public statement of acceptance of a version permanently authorizes you
|
| 582 |
+
to choose that version for the Program.
|
| 583 |
+
|
| 584 |
+
Later license versions may give you additional or different
|
| 585 |
+
permissions. However, no additional obligations are imposed on any
|
| 586 |
+
author or copyright holder as a result of your choosing to follow a
|
| 587 |
+
later version.
|
| 588 |
+
|
| 589 |
+
15. Disclaimer of Warranty.
|
| 590 |
+
|
| 591 |
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
| 592 |
+
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
| 593 |
+
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
| 594 |
+
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
| 595 |
+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| 596 |
+
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
| 597 |
+
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
| 598 |
+
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
| 599 |
+
|
| 600 |
+
16. Limitation of Liability.
|
| 601 |
+
|
| 602 |
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
| 603 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
| 604 |
+
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
| 605 |
+
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
| 606 |
+
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
| 607 |
+
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
| 608 |
+
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
| 609 |
+
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
| 610 |
+
SUCH DAMAGES.
|
| 611 |
+
|
| 612 |
+
17. Interpretation of Sections 15 and 16.
|
| 613 |
+
|
| 614 |
+
If the disclaimer of warranty and limitation of liability provided
|
| 615 |
+
above cannot be given local legal effect according to their terms,
|
| 616 |
+
reviewing courts shall apply local law that most closely approximates
|
| 617 |
+
an absolute waiver of all civil liability in connection with the
|
| 618 |
+
Program, unless a warranty or assumption of liability accompanies a
|
| 619 |
+
copy of the Program in return for a fee.
|
| 620 |
+
|
| 621 |
+
END OF TERMS AND CONDITIONS
|
| 622 |
+
|
| 623 |
+
How to Apply These Terms to Your New Programs
|
| 624 |
+
|
| 625 |
+
If you develop a new program, and you want it to be of the greatest
|
| 626 |
+
possible use to the public, the best way to achieve this is to make it
|
| 627 |
+
free software which everyone can redistribute and change under these terms.
|
| 628 |
+
|
| 629 |
+
To do so, attach the following notices to the program. It is safest
|
| 630 |
+
to attach them to the start of each source file to most effectively
|
| 631 |
+
state the exclusion of warranty; and each file should have at least
|
| 632 |
+
the "copyright" line and a pointer to where the full notice is found.
|
| 633 |
+
|
| 634 |
+
<one line to give the program's name and a brief idea of what it does.>
|
| 635 |
+
Copyright (C) <year> <name of author>
|
| 636 |
+
|
| 637 |
+
This program is free software: you can redistribute it and/or modify
|
| 638 |
+
it under the terms of the GNU General Public License as published by
|
| 639 |
+
the Free Software Foundation, either version 3 of the License, or
|
| 640 |
+
(at your option) any later version.
|
| 641 |
+
|
| 642 |
+
This program is distributed in the hope that it will be useful,
|
| 643 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 644 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 645 |
+
GNU General Public License for more details.
|
| 646 |
+
|
| 647 |
+
You should have received a copy of the GNU General Public License
|
| 648 |
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| 649 |
+
|
| 650 |
+
Also add information on how to contact you by electronic and paper mail.
|
| 651 |
+
|
| 652 |
+
If the program does terminal interaction, make it output a short
|
| 653 |
+
notice like this when it starts in an interactive mode:
|
| 654 |
+
|
| 655 |
+
<program> Copyright (C) <year> <name of author>
|
| 656 |
+
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
| 657 |
+
This is free software, and you are welcome to redistribute it
|
| 658 |
+
under certain conditions; type `show c' for details.
|
| 659 |
+
|
| 660 |
+
The hypothetical commands `show w' and `show c' should show the appropriate
|
| 661 |
+
parts of the General Public License. Of course, your program's commands
|
| 662 |
+
might be different; for a GUI interface, you would use an "about box".
|
| 663 |
+
|
| 664 |
+
You should also get your employer (if you work as a programmer) or school,
|
| 665 |
+
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
| 666 |
+
For more information on this, and how to apply and follow the GNU GPL, see
|
| 667 |
+
<http://www.gnu.org/licenses/>.
|
| 668 |
+
|
| 669 |
+
The GNU General Public License does not permit incorporating your program
|
| 670 |
+
into proprietary programs. If your program is a subroutine library, you
|
| 671 |
+
may consider it more useful to permit linking proprietary applications with
|
| 672 |
+
the library. If this is what you want to do, use the GNU Lesser General
|
| 673 |
+
Public License instead of this License. But first, please read
|
| 674 |
+
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
yolov5-code-main/datasets/coco128-seg/README.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Introduction
|
| 2 |
+
|
| 3 |
+
This directory contains software developed by Ultralytics LLC, and **is freely available for redistribution under the GPL-3.0 license**. For more information please visit https://www.ultralytics.com.
|
| 4 |
+
|
| 5 |
+
# Description
|
| 6 |
+
|
| 7 |
+
The https://github.com/ultralytics/COCO2YOLO repo contains code to convert JSON datasets into YOLO (darknet) format. The code works on Linux, MacOS and Windows.
|
| 8 |
+
|
| 9 |
+
# Requirements
|
| 10 |
+
|
| 11 |
+
Python 3.7 or later with the following `pip3 install -U -r requirements.txt` packages:
|
| 12 |
+
|
| 13 |
+
- `numpy`
|
| 14 |
+
- `tqdm`
|
| 15 |
+
|
| 16 |
+
# Citation
|
| 17 |
+
|
| 18 |
+
[](https://zenodo.org/badge/latestdoi/186122711)
|
| 19 |
+
|
| 20 |
+
# Contact
|
| 21 |
+
|
| 22 |
+
Issues should be raised directly in the repository. For additional questions or comments please email Glenn Jocher at glenn.jocher@ultralytics.com or visit us at https://contact.ultralytics.com.
|
yolov5-code-main/datasets/coco128-seg/images/train2017/000000000009.jpg
ADDED
|
yolov5-code-main/datasets/coco128-seg/images/train2017/000000000025.jpg
ADDED
|
yolov5-code-main/datasets/coco128-seg/images/train2017/000000000030.jpg
ADDED
|
yolov5-code-main/datasets/coco128-seg/images/train2017/000000000034.jpg
ADDED
|
yolov5-code-main/datasets/coco128-seg/images/train2017/000000000036.jpg
ADDED
|