提交 7edb747d 编写于 作者: 明月醉窗台

Initial commit

上级

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
**/*.pyc
# C extensions
# Distribution / packaging
.Python
videos/
build/
runs/
weights/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# custom
.DS_Store
# Pytorch
*.pth
#vscode
.vscode/*
#user scripts
*.sh
# model files
*.onnx
*.pt
*.engine
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
此差异已折叠。
<p align="center">
<img src="assets/banner-YOLO.png" align="middle" width = "1000" />
</p>
English | [简体中文](README_cn.md)
<br>
<div>
</a>
<a href="[https://colab.research.google.com/github/meituan/YOLOv6/blob/main/turtorial.ipynb](https://colab.research.google.com/gist/HouSanDuo123/bdad4ad6706209d4e9275d2186d54289/tutorial.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a>
<a href="https://www.kaggle.com/code/housanduo/yolov6"><img src="https://kaggle.com/static/images/open-in-kaggle.svg" alt="Open In Kaggle"></a>
</div>
<br>
## YOLOv6
Implementation of paper:
- [YOLOv6 v3.0: A Full-Scale Reloading](https://arxiv.org/abs/2301.05586) 🔥
- [YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications](https://arxiv.org/abs/2209.02976)
<p align="center">
<img src="assets/speed_comparision_v3.png" align="middle" width = "1000" />
</p>
## What's New
- [2023.01.06] Release P6 models and enhance the performance of P5 models. ⭐️ [Benchmark](#Benchmark)
- Renew the neck of the detector with a BiC module and SimCSPSPPF Block.
- Propose an anchor-aided training (AAT) strategy.
- Involve a new self-distillation strategy for small models of YOLOv6.
- Expand YOLOv6 and hit a new
SOTA performance on the COCO dataset.
- [2022.11.04] Release [base models](configs/base/README.md) to simplify the training and deployment process.
- [2022.09.06] Customized quantization methods. 🚀 [Quantization Tutorial](./tools/qat/README.md)
- [2022.09.05] Release M/L models and update N/T/S models with enhanced performance.
- [2022.06.23] Release N/T/S models with excellent performance.
## Benchmark
| Model | Size | mAP<sup>val<br/>0.5:0.95 | Speed<sup>T4<br/>trt fp16 b1 <br/>(fps) | Speed<sup>T4<br/>trt fp16 b32 <br/>(fps) | Params<br/><sup> (M) | FLOPs<br/><sup> (G) |
| :----------------------------------------------------------- | ---- | :----------------------- | --------------------------------------- | ---------------------------------------- | -------------------- | ------------------- |
| [**YOLOv6-N**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n.pt) | 640 | 37.5 | 779 | 1187 | 4.7 | 11.4 |
| [**YOLOv6-S**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s.pt) | 640 | 45.0 | 339 | 484 | 18.5 | 45.3 |
| [**YOLOv6-M**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m.pt) | 640 | 50.0 | 175 | 226 | 34.9 | 85.8 |
| [**YOLOv6-L**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l.pt) | 640 | 52.8 | 98 | 116 | 59.6 | 150.7 |
| | | | | |
| [**YOLOv6-N6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n6.pt) | 1280 | 44.9 | 228 | 281 | 10.4 | 49.8 |
| [**YOLOv6-S6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s6.pt) | 1280 | 50.3 | 98 | 108 | 41.4 | 198.0 |
| [**YOLOv6-M6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m6.pt) | 1280 | 55.2 | 47 | 55 | 79.6 | 379.5 |
| [**YOLOv6-L6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l6.pt) | 1280 | 57.2 | 26 | 29 | 140.4 | 673.4 |
<details>
<summary>Table Notes</summary>
- All checkpoints are trained with self-distillation except for YOLOv6-N6/S6 models trained to 300 epochs without distillation.
- Results of the mAP and speed are evaluated on [COCO val2017](https://cocodataset.org/#download) dataset with the input resolution of 640×640 for P5 models and 1280x1280 for P6 models.
- Speed is tested with TensorRT 7.2 on T4.
- Refer to [Test speed](./docs/Test_speed.md) tutorial to reproduce the speed results of YOLOv6.
- Params and FLOPs of YOLOv6 are estimated on deployed models.
</details>
<details>
<summary>Legacy models</summary>
| Model | Size | mAP<sup>val<br/>0.5:0.95 | Speed<sup>T4<br/>trt fp16 b1 <br/>(fps) | Speed<sup>T4<br/>trt fp16 b32 <br/>(fps) | Params<br/><sup> (M) | FLOPs<br/><sup> (G) |
| :----------------------------------------------------------- | ---- | :------------------------------------ | --------------------------------------- | ---------------------------------------- | -------------------- | ------------------- |
| [**YOLOv6-N**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6n.pt) | 640 | 35.9<sup>300e</sup><br/>36.3<sup>400e | 802 | 1234 | 4.3 | 11.1 |
| [**YOLOv6-T**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6t.pt) | 640 | 40.3<sup>300e</sup><br/>41.1<sup>400e | 449 | 659 | 15.0 | 36.7 |
| [**YOLOv6-S**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6s.pt) | 640 | 43.5<sup>300e</sup><br/>43.8<sup>400e | 358 | 495 | 17.2 | 44.2 |
| [**YOLOv6-M**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6m.pt) | 640 | 49.5 | 179 | 233 | 34.3 | 82.2 |
| [**YOLOv6-L-ReLU**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6l_relu.pt) | 640 | 51.7 | 113 | 149 | 58.5 | 144.0 |
| [**YOLOv6-L**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6l.pt) | 640 | 52.5 | 98 | 121 | 58.5 | 144.0 |
- Speed is tested with TensorRT 7.2 on T4.
### Quantized model 🚀
| Model | Size | Precision | mAP<sup>val<br/>0.5:0.95 | Speed<sup>T4<br/>trt b1 <br/>(fps) | Speed<sup>T4<br/>trt b32 <br/>(fps) |
| :-------------------- | ---- | --------- | :----------------------- | ---------------------------------- | ----------------------------------- |
| **YOLOv6-N RepOpt** | 640 | INT8 | 34.8 | 1114 | 1828 |
| **YOLOv6-N** | 640 | FP16 | 35.9 | 802 | 1234 |
| **YOLOv6-T RepOpt** | 640 | INT8 | 39.8 | 741 | 1167 |
| **YOLOv6-T** | 640 | FP16 | 40.3 | 449 | 659 |
| **YOLOv6-S RepOpt** | 640 | INT8 | 43.3 | 619 | 924 |
| **YOLOv6-S** | 640 | FP16 | 43.5 | 377 | 541 |
- Speed is tested with TensorRT 8.4 on T4.
- Precision is figured on models for 300 epochs.
</details>
## Quick Start
<details>
<summary> Install</summary>
```shell
git clone https://github.com/meituan/YOLOv6
cd YOLOv6
pip install -r requirements.txt
```
</details>
<details>
<summary> Reproduce our results on COCO</summary>
Please refer to [Train COCO Dataset](./docs/Train_coco_data.md).
</details>
<details open>
<summary> Finetune on custom data</summary>
Single GPU
```shell
# P5 models
python tools/train.py --batch 32 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0
# P6 models
python tools/train.py --batch 32 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0
```
Multi GPUs (DDP mode recommended)
```shell
# P5 models
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 256 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0,1,2,3,4,5,6,7
# P6 models
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 128 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0,1,2,3,4,5,6,7
```
- fuse_ab: add anchor-based auxiliary branch and use Anchor Aided Training Mode (Not supported on P6 models currently)
- conf: select config file to specify network/optimizer/hyperparameters. We recommend to apply yolov6n/s/m/l_finetune.py when training on your custom dataset.
- data: prepare dataset and specify dataset paths in data.yaml ( [COCO](http://cocodataset.org), [YOLO format coco labels](https://github.com/meituan/YOLOv6/releases/download/0.1.0/coco2017labels.zip) )
- make sure your dataset structure as follows:
```
├── coco
│ ├── annotations
│ │ ├── instances_train2017.json
│ │ └── instances_val2017.json
│ ├── images
│ │ ├── train2017
│ │ └── val2017
│ ├── labels
│ │ ├── train2017
│ │ ├── val2017
│ ├── LICENSE
│ ├── README.txt
```
</details>
<details>
<summary>Resume training</summary>
If your training process is corrupted, you can resume training by
```
# single GPU training.
python tools/train.py --resume
# multi GPU training.
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --resume
```
Above command will automatically find the latest checkpoint in YOLOv6 directory, then resume the training process.
Your can also specify a checkpoint path to `--resume` parameter by
```
# remember to replace /path/to/your/checkpoint/path to the checkpoint path which you want to resume training.
--resume /path/to/your/checkpoint/path
```
This will resume from the specific checkpoint you provide.
</details>
<details open>
<summary> Evaluation</summary>
Reproduce mAP on COCO val2017 dataset with 640×640 or 1280x1280 resolution
```shell
# P5 models
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s.pt --task val --reproduce_640_eval
# P6 models
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s6.pt --task val --reproduce_640_eval --img 1280
```
- verbose: set True to print mAP of each classes.
- do_coco_metric: set True / False to enable / disable pycocotools evaluation method.
- do_pr_metric: set True / False to print or not to print the precision and recall metrics.
- config-file: specify a config file to define all the eval params, for example: [yolov6n_with_eval_params.py](configs/experiment/yolov6n_with_eval_params.py)
</details>
<details>
<summary>Inference</summary>
First, download a pretrained model from the YOLOv6 [release](https://github.com/meituan/YOLOv6/releases/tag/0.3.0) or use your trained model to do inference.
Second, run inference with `tools/infer.py`
```shell
# P5 models
python tools/infer.py --weights yolov6s.pt --source img.jpg / imgdir / video.mp4
# P6 models
python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --source img.jpg / imgdir / video.mp4
```
If you want to inference on local camera or web camera, you can run:
```shell
# P5 models
python tools/infer.py --weights yolov6s.pt --webcam --webcam-addr 0
# P6 models
python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --webcam --webcam-addr 0
```
`webcam-addr` can be local camera number id or rtsp address.
</details>
<details>
<summary> Deployment</summary>
* [ONNX](./deploy/ONNX)
* [OpenCV Python/C++](./deploy/ONNX/OpenCV)
* [OpenVINO](./deploy/OpenVINO)
* [TensorRT](./deploy/TensorRT)
</details>
<details open>
<summary> Tutorials</summary>
* [User Guide(zh_CN)](https://yolov6-docs.readthedocs.io/zh_CN/latest/)
* [Train COCO Dataset](./docs/Train_coco_data.md)
* [Train custom data](./docs/Train_custom_data.md)
* [Test speed](./docs/Test_speed.md)
* [Tutorial of Quantization for YOLOv6](./docs/Tutorial%20of%20Quantization.md)
</details>
<details>
<summary> Third-party resources</summary>
* YOLOv6 NCNN Android app demo: [ncnn-android-yolov6](https://github.com/FeiGeChuanShu/ncnn-android-yolov6) from [FeiGeChuanShu](https://github.com/FeiGeChuanShu)
* YOLOv6 ONNXRuntime/MNN/TNN C++: [YOLOv6-ORT](https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/ort/cv/yolov6.cpp), [YOLOv6-MNN](https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/mnn/cv/mnn_yolov6.cpp) and [YOLOv6-TNN](https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/tnn/cv/tnn_yolov6.cpp) from [DefTruth](https://github.com/DefTruth)
* YOLOv6 TensorRT Python: [yolov6-tensorrt-python](https://github.com/Linaom1214/TensorRT-For-YOLO-Series) from [Linaom1214](https://github.com/Linaom1214)
* YOLOv6 TensorRT Windows C++: [yolort](https://github.com/zhiqwang/yolov5-rt-stack/tree/main/deployment/tensorrt-yolov6) from [Wei Zeng](https://github.com/Wulingtian)
* [YOLOv6 web demo](https://huggingface.co/spaces/nateraw/yolov6) on [Huggingface Spaces](https://huggingface.co/spaces) with [Gradio](https://github.com/gradio-app/gradio). [![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue)](https://huggingface.co/spaces/nateraw/yolov6)
* Tutorial: [How to train YOLOv6 on a custom dataset](https://blog.roboflow.com/how-to-train-yolov6-on-a-custom-dataset/) <a href="https://colab.research.google.com/drive/1YnbqOinBZV-c9I7fk_UL6acgnnmkXDMM"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a>
* YouTube Tutorial: [How to train YOLOv6 on a custom dataset](https://youtu.be/fFCWrMFH2UY)
* Demo of YOLOv6 inference on Google Colab [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/mahdilamb/YOLOv6/blob/main/inference.ipynb)
* Blog post: [YOLOv6 Object Detection – Paper Explanation and Inference](https://learnopencv.com/yolov6-object-detection/)
</details>
### [FAQ(Continuously updated)](https://github.com/meituan/YOLOv6/wiki/FAQ%EF%BC%88Continuously-updated%EF%BC%89)
If you have any questions, welcome to join our WeChat group to discuss and exchange.
<p align="center">
<img src="assets/wechat_qrcode.png" align="middle" width = "1000" />
</p>
<p align="center">
<img src="assets/banner-YOLO.png" align="middle" width = "1000" />
</p>
简体中文 | [English](README.md)
## YOLOv6
官方论文:
- [YOLOv6 v3.0: A Full-Scale Reloading](https://arxiv.org/abs/2301.05586) 🔥
- [YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications](https://arxiv.org/abs/2209.02976)
<p align="center">
<img src="assets/speed_comparision_v3.png" align="middle" width = "1000" />
</p>
## 更新日志
- [2023.01.06] 发布大分辨率 P6 模型以及对 P5 模型做了全面的升级 ⭐️ [模型指标](#模型指标)
- 添加 BiC 模块 和 SimCSPSPPF 模块以增强检测网络颈部的表征能力。
- 提出一个锚点辅助训练 (AAT) 策略。
- 为 YOLOv6 小模型引入一个新的自蒸馏训练策略。
- 扩展 YOLOv6 并在 COCO 上取得了实时目标检测 SOTA 的精度和速度。
- [2022.11.04] 发布 [基础版模型](configs/base/README_cn.md) 简化训练部署流程
- [2022.09.06] 定制化的模型量化加速方法 🚀 [量化教程](./tools/qat/README.md)
- [2022.09.05] 发布 M/L 模型,并且进一步提高了 N/T/S 模型的性能
- [2022.06.23] 发布 N/T/S v1.0 版本模型
## 模型指标
| 模型 | 输入尺寸 | mAP<sup>val<br/>0.5:0.95 | 速度<sup>T4<br/>trt fp16 b1 <br/>(fps) | 速度<sup>T4<br/>trt fp16 b32 <br/>(fps) | Params<br/><sup> (M) | FLOPs<br/><sup> (G) |
| :----------------------------------------------------------- | ---- | :------------------------------------ | --------------------------------------- | ---------------------------------------- | -------------------- | ------------------- |
| [**YOLOv6-N**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n.pt) | 640 | 37.5 | 779 | 1187 | 4.7 | 11.4 |
| [**YOLOv6-S**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s.pt) | 640 | 45.0 | 339 | 484 | 18.5 | 45.3 |
| [**YOLOv6-M**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m.pt) | 640 | 50.0 | 175 | 226 | 34.9 | 85.8 |
| [**YOLOv6-L**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l.pt) | 640 | 52.8 | 98 | 116 | 59.6 | 150.7 |
| | | | | |
| [**YOLOv6-N6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6n6.pt) | 1280 | 44.9 | 228 | 281 | 10.4 | 49.8 |
| [**YOLOv6-S6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6s6.pt) | 1280 | 50.3 | 98 | 108 | 41.4 | 198.0 |
| [**YOLOv6-M6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6m6.pt) | 1280 | 55.2 | 47 | 55 | 79.6 | 379.5 |
| [**YOLOv6-L6**](https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l6.pt) | 1280 | 57.2 | 26 | 29 | 140.4 | 673.4 |
<details>
<summary>表格笔记</summary>
- 除了 YOLOv6-N6/S6 模型是训练了300轮的结果,其余模型均为自蒸馏训练之后的结果;
- mAP 和速度指标是在 [COCO val2017](https://cocodataset.org/#download) 数据集上评估的,P5模型输入分辨率为 640×640,P6模型输入分辨率为 1280×1280;
- 速度是在 T4 上测试的,TensorRT 版本为 7.2;
- 复现 YOLOv6 的速度指标,请查看 [速度测试](./docs/Test_speed.md) 教程;
- YOLOv6 的参数和计算量是在推理模式下计算的;
</details>
<details>
<summary>旧版模型</summary>
| 模型 | 输入尺寸 | mAP<sup>val<br/>0.5:0.95 | 速度<sup>T4<br/>trt fp16 b1 <br/>(fps) | 速度<sup>T4<br/>trt fp16 b32 <br/>(fps) | Params<br/><sup> (M) | FLOPs<br/><sup> (G) |
| :----------------------------------------------------------- | ---- | :------------------------------------ | --------------------------------------- | ---------------------------------------- | -------------------- | ------------------- |
| [**YOLOv6-N**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6n.pt) | 640 | 35.9<sup>300e</sup><br/>36.3<sup>400e | 802 | 1234 | 4.3 | 11.1 |
| [**YOLOv6-T**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6t.pt) | 640 | 40.3<sup>300e</sup><br/>41.1<sup>400e | 449 | 659 | 15.0 | 36.7 |
| [**YOLOv6-S**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6s.pt) | 640 | 43.5<sup>300e</sup><br/>43.8<sup>400e | 358 | 495 | 17.2 | 44.2 |
| [**YOLOv6-M**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6m.pt) | 640 | 49.5 | 179 | 233 | 34.3 | 82.2 |
| [**YOLOv6-L-ReLU**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6l_relu.pt) | 640 | 51.7 | 113 | 149 | 58.5 | 144.0 |
| [**YOLOv6-L**](https://github.com/meituan/YOLOv6/releases/download/0.2.0/yolov6l.pt) | 640 | 52.5 | 98 | 121 | 58.5 | 144.0 |
- 速度是在 T4 上测试的,TensorRT 版本为 7.2;
### 量化模型
| 模型 | 输入尺寸 | 精度 | mAP<sup>val<br/>0.5:0.95 | 速度<sup>T4<br/>trt b1 <br/>(fps) | 速度<sup>T4<br/>trt b32 <br/>(fps) |
| :-------------------- | ---- | --------- | :----------------------- | ---------------------------------- | ----------------------------------- |
| **YOLOv6-N RepOpt** | 640 | INT8 | 34.8 | 1114 | 1828 |
| **YOLOv6-N** | 640 | FP16 | 35.9 | 802 | 1234 |
| **YOLOv6-T RepOpt** | 640 | INT8 | 39.8 | 741 | 1167 |
| **YOLOv6-T** | 640 | FP16 | 40.3 | 449 | 659 |
| **YOLOv6-S RepOpt** | 640 | INT8 | 43.3 | 619 | 924 |
| **YOLOv6-S** | 640 | FP16 | 43.5 | 377 | 541 |
- 速度是在 T4 上测试的,TensorRT 版本为 8.4;
- 精度是在训练 300 epoch 的模型上测试的;
</details>
## 快速开始
<details>
<summary> 安装</summary>
```shell
git clone https://github.com/meituan/YOLOv6
cd YOLOv6
pip install -r requirements.txt
```
</details>
<details>
<summary> 在 COCO 数据集上复现我们的结果</summary>
请参考教程 [训练 COCO 数据集](./docs/Train_coco_data.md).
</details>
<details open>
<summary> 在自定义数据集上微调模型 </summary>
单卡
```shell
# P5 models
python tools/train.py --batch 32 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0
# P6 models
python tools/train.py --batch 32 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0
```
多卡 (我们推荐使用 DDP 模式)
```shell
# P5 models
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 256 --conf configs/yolov6s_finetune.py --data data/dataset.yaml --fuse_ab --device 0,1,2,3,4,5,6,7
# P6 models
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --batch 128 --conf configs/yolov6s6_finetune.py --data data/dataset.yaml --img 1280 --device 0,1,2,3,4,5,6,7
```
- fuse_ab: 增加anchor-based预测分支并使用联合锚点训练模式 (P6模型暂不支持此功能)
- conf: 配置文件路径,里面包含网络结构、优化器配置、超参数信息。如果您是在自己的数据集训练,我们推荐您使用yolov6n/s/m/l_finetune.py配置文件;
- data: 数据集配置文件,以 COCO 数据集为例,您可以在 [COCO](http://cocodataset.org) 下载数据, 在这里下载 [YOLO 格式标签](https://github.com/meituan/YOLOv6/releases/download/0.1.0/coco2017labels.zip)
- 确保您的数据集按照下面这种格式来组织;
```
├── coco
│ ├── annotations
│ │ ├── instances_train2017.json
│ │ └── instances_val2017.json
│ ├── images
│ │ ├── train2017
│ │ └── val2017
│ ├── labels
│ │ ├── train2017
│ │ ├── val2017
```
</details>
<details>
<summary>恢复训练</summary>
如果您的训练进程中断了,您可以这样恢复先前的训练进程。
```
# 单卡训练
python tools/train.py --resume
# 多卡训练
python -m torch.distributed.launch --nproc_per_node 8 tools/train.py --resume
```
上面的命令将自动在 YOLOv6 目录中找到最新保存的模型,然后恢复训练。
您也可以通过 `--resume` 参数指定要恢复的模型路径
```
# 记得把 /path/to/your/checkpoint/path 替换为您要恢复训练的模型权重路径
--resume /path/to/your/checkpoint/path
```
这将从您提供的模型路径恢复训练。
</details>
<details>
<summary> 评估</summary>
在 COCO val2017 数据集上复现我们的结果(输入分辨率 640x640 或 1280x1280)
```shell
# P5 models
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s.pt --task val --reproduce_640_eval
# P6 models
python tools/eval.py --data data/coco.yaml --batch 32 --weights yolov6s6.pt --task val --reproduce_640_eval --img 1280
```
- verbose: 如果要打印每一类的精度信息,请设置为 True;
- do_coco_metric: 设置 True / False 来打开或关闭 pycocotools 的评估;
- do_pr_metric: 设置 True / False 来显示或不显示精度和召回的指标;
- config-file: 指定一个包含所有评估参数的配置文件,例如 [yolov6n_with_eval_params.py](configs/experiment/yolov6n_with_eval_params.py)
</details>
<details>
<summary>推理</summary>
首先,从 [release页面](https://github.com/meituan/YOLOv6/releases/tag/0.3.0) 下载一个训练好的模型权重文件,或选择您自己训练的模型;
然后,通过 `tools/infer.py`文件进行推理。
```shell
# P5 models
python tools/infer.py --weights yolov6s.pt --source img.jpg / imgdir / video.mp4
# P6 models
python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --source img.jpg / imgdir / video.mp4
```
如果您想使用本地摄像头或者网络摄像头,您可以运行:
```shell
# P5 models
python tools/infer.py --weights yolov6s.pt --webcam --webcam-addr 0
# P6 models
python tools/infer.py --weights yolov6s6.pt --img 1280 1280 --webcam --webcam-addr 0
```
`webcam-addr` 可以是本地摄像头的 ID,或者是 RTSP 地址。
</details>
<details>
<summary> 部署 </summary>
* [ONNX](./deploy/ONNX)
* [OpenCV Python/C++](./deploy/ONNX/OpenCV)
* [OpenVINO](./deploy/OpenVINO)
* [TensorRT](./deploy/TensorRT)
</details>
<details open>
<summary> 教程 </summary>
* [用户手册(中文版)](https://yolov6-docs.readthedocs.io/zh_CN/latest/)
* [训练 COCO 数据集](./docs/Train_coco_data.md)
* [训练自定义数据集](./docs/Train_custom_data.md)
* [测速](./docs/Test_speed.md)
* [ YOLOv6 量化教程](./docs/Tutorial%20of%20Quantization.md)
</details>
<details>
<summary> 第三方资源 </summary>
* YOLOv6 NCNN Android app demo: [ncnn-android-yolov6](https://github.com/FeiGeChuanShu/ncnn-android-yolov6) from [FeiGeChuanShu](https://github.com/FeiGeChuanShu)
* YOLOv6 ONNXRuntime/MNN/TNN C++: [YOLOv6-ORT](https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/ort/cv/yolov6.cpp), [YOLOv6-MNN](https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/mnn/cv/mnn_yolov6.cpp) and [YOLOv6-TNN](https://github.com/DefTruth/lite.ai.toolkit/blob/main/lite/tnn/cv/tnn_yolov6.cpp) from [DefTruth](https://github.com/DefTruth)
* YOLOv6 TensorRT Python: [yolov6-tensorrt-python](https://github.com/Linaom1214/TensorRT-For-YOLO-Series) from [Linaom1214](https://github.com/Linaom1214)
* YOLOv6 TensorRT Windows C++: [yolort](https://github.com/zhiqwang/yolov5-rt-stack/tree/main/deployment/tensorrt-yolov6) from [Wei Zeng](https://github.com/Wulingtian)
* [YOLOv6 web demo](https://huggingface.co/spaces/nateraw/yolov6) on [Huggingface Spaces](https://huggingface.co/spaces) with [Gradio](https://github.com/gradio-app/gradio). [![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue)](https://huggingface.co/spaces/nateraw/yolov6)
* 教程: [如何用 YOLOv6 训练自己的数据集](https://blog.roboflow.com/how-to-train-yolov6-on-a-custom-dataset/) <a href="https://colab.research.google.com/drive/1YnbqOinBZV-c9I7fk_UL6acgnnmkXDMM"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a>
* YOLOv6 在 Google Colab 上的推理 Demo [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/mahdilamb/YOLOv6/blob/main/inference.ipynb)
</details>
### [FAQ(持续更新)](https://github.com/meituan/YOLOv6/wiki/FAQ%EF%BC%88Continuously-updated%EF%BC%89)
如果您有任何问题,欢迎加入我们的微信群一起讨论交流!
<p align="center">
<img src="assets/wechat_qrcode.png" align="middle" width = "1000" />
</p>
\ No newline at end of file
## YOLOv6 base model
English | [简体中文](./README_cn.md)
### Features
- Use only regular convolution and Relu activation functions.
- Apply CSP (1/2 channel dim) blocks in the network structure, except for Nano base model.
Advantage:
- Adopt a unified network structure and configuration, and the accuracy loss of the PTQ 8-bit quantization model is negligible, about 0.4%.
- Suitable for users who are just getting started or who need to apply, optimize and deploy an 8-bit quantization model quickly and frequently.
Shortcoming:
- The accuracy on COCO is slightly lower than the v2.0 released models.
### Performance
| Model | Size | mAP<sup>val<br/>0.5:0.95 | Speed<sup>T4<br/>trt fp16 b1 <br/>(fps) | Speed<sup>T4<br/>trt fp16 b32 <br/>(fps) | Params<br/><sup> (M) | FLOPs<br/><sup> (G) |
| :----------------------------------------------------------- | -------- | :----------------------- | -------------------------------------- | --------------------------------------- | -------------------- | ------------------- |
| [**YOLOv6-N-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6n_base.pt) | 640 | 35.6<sup>400e | 832 | 1249 | 4.3 | 11.1 |
| [**YOLOv6-S-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6s_base.pt) | 640 | 43.8<sup>400e | 373 | 531 | 11.5 | 27.6 |
| [**YOLOv6-M-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6m_base.pt) | 640 | 48.8<sup>distill | 179 | 246 | 27.7 | 68.4 |
| [**YOLOv6-L-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6l_base.pt) | 640 | 51.0<sup>distill | 115 | 153 | 58.5 | 144.0 |
- Speed is tested with TensorRT 7.2 on T4.
- The processes of model training, evaluation, and inference are the same as the original ones. For details, please refer to [this README](https://github.com/meituan/YOLOv6#quick-start).
\ No newline at end of file
## YOLOv6 基础版模型
简体中文 | [English](./README.md)
### 模型特点
- 仅使用常规卷积和Relu激活函数
- 网络结构均采用CSP (1/2通道) block,Nano网络除外。
优势:
- 采用统一的网络结构和配置,且 PTQ 8位量化模型精度损失(约0.4%)较小,适合刚入门或有快速迭代部署8位量化模型需求的用户。
不足:
- COCO上精度对比2.0版本发布模型稍低。
### 模型指标
| 模型 | 输入尺寸 | mAP<sup>val<br/>0.5:0.95 | 速度<sup>T4<br/>trt fp16 b1 <br/>(fps) | 速度<sup>T4<br/>trt fp16 b32 <br/>(fps) | Params<br/><sup> (M) | FLOPs<br/><sup> (G) |
| :----------------------------------------------------------- | -------- | :----------------------- | -------------------------------------- | --------------------------------------- | -------------------- | ------------------- |
| [**YOLOv6-N-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6n_base.pt) | 640 | 35.6<sup>400e | 832 | 1249 | 4.3 | 11.1 |
| [**YOLOv6-S-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6s_base.pt) | 640 | 43.8<sup>400e | 373 | 531 | 11.5 | 27.6 |
| [**YOLOv6-M-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6m_base.pt) | 640 | 48.8<sup>distill | 179 | 246 | 27.7 | 68.4 |
| [**YOLOv6-L-base**](https://github.com/meituan/YOLOv6/releases/download/0.2.1/yolov6l_base.pt) | 640 | 51.0<sup>distill | 115 | 153 | 58.5 | 144.0 |
- 速度是在 T4 上测试的,TensorRT 版本为 7.2;
- 模型训练、评估、推理流程与原来保持一致,具体可参考 [首页 README 文档](https://github.com/meituan/YOLOv6/blob/main/README_cn.md#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B)
# YOLOv6 large base model
model = dict(
type='YOLOv6l_base',
depth_multiple=1.0,
width_multiple=1.0,
pretrained=None,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 2.0,
'dfl': 1.0,
},
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
training_mode = "conv_relu"
# YOLOv6 large base model
model = dict(
type='YOLOv6l_base',
depth_multiple=1.0,
width_multiple=1.0,
pretrained=None,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 2.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
training_mode = "conv_relu"
# YOLOv6 medium/large base model
model = dict(
type='YOLOv6m_base',
depth_multiple=0.80,
width_multiple=0.75,
pretrained=None,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
training_mode = "conv_relu"
# YOLOv6 medium/large base model
model = dict(
type='YOLOv6m_base',
depth_multiple=0.80,
width_multiple=0.75,
pretrained=None,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
training_mode = "conv_relu"
# YOLOv6 nano base model
model = dict(
type='YOLOv6n_base',
depth_multiple=0.33,
width_multiple=0.25,
pretrained=None,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
training_mode = "conv_relu"
# YOLOv6 nano base model
model = dict(
type='YOLOv6n_base',
depth_multiple=0.33,
width_multiple=0.25,
pretrained=None,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243
)
training_mode = "conv_relu"
# YOLOv6 small base model
model = dict(
type='YOLOv6s_base',
depth_multiple=0.70,
width_multiple=0.50,
pretrained=None,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
training_mode = "conv_relu"
# YOLOv6 small base model
model = dict(
type='YOLOv6s_base',
depth_multiple=0.70,
width_multiple=0.50,
pretrained=None,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243
)
training_mode = "conv_relu"
# eval param for different scale
eval_params = dict(
default = dict(
img_size=640,
test_load_size=638,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6n = dict(
img_size=640,
test_load_size=636,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6t = dict(
img_size=640,
test_load_size=634,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6s = dict(
img_size=640,
test_load_size=634,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6m = dict(
img_size=640,
test_load_size=636,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6l = dict(
img_size=640,
test_load_size=636,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6l_relu = dict(
img_size=640,
test_load_size=638,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6n6 = dict(
img_size=1280,
test_load_size=1263,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6s6 = dict(
img_size=1280,
test_load_size=1272,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6m6 = dict(
img_size=1280,
test_load_size=1216,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
),
yolov6l6 = dict(
img_size=1280,
test_load_size=1239,
letterbox_return_int=True,
scale_exact=True,
force_no_pad=True,
not_infer_on_rect=True,
)
)
# YOLOv6n model with eval param(when traing)
model = dict(
type='YOLOv6n',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.02, #0.01 # 0.02
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Eval params when eval model.
# If eval_params item is list, eg conf_thres=[0.03, 0.03],
# first will be used in train.py and second will be used in eval.py.
eval_params = dict(
batch_size=None, #None mean will be the same as batch on one device * 2
img_size=None, #None mean will be the same as train image size
conf_thres=0.03,
iou_thres=0.65,
#pading and scale coord
test_load_size=None, #None mean will be the same as test image size
letterbox_return_int=False,
force_no_pad=False,
not_infer_on_rect=False,
scale_exact=False,
#metric
verbose=False,
do_coco_metric=True,
do_pr_metric=False,
plot_curve=False,
plot_confusion_matrix=False
)
# YOLOv6m model
model = dict(
type='YOLOv6s_csp',
pretrained=None,
depth_multiple=0.70,
width_multiple=0.50,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
# YOLOv6t model
model = dict(
type='YOLOv6t',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.375,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# YOLOv6n model
model = dict(
type='YOLOv6n_csp',
pretrained=None,
depth_multiple=0.60,
width_multiple=0.50,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
neck=dict(
type='CSPRepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
# YOLOv6t model
model = dict(
type='YOLOv6t',
pretrained='weights/yolov6t.pt',
depth_multiple=0.33,
width_multiple=0.375,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
# YOLOv6t model
model = dict(
type='YOLOv6t',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.375,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='hyper_search'
# YOLOv6t model
model = dict(
type='YOLOv6t',
pretrained=None,
scales='../yolov6_assert/v6t_v2_scale_last.pt',
depth_multiple=0.33,
width_multiple=0.375,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='repopt'
# YOLOv6t model
model = dict(
type='YOLOv6t',
pretrained='./assets/v6s_t.pt',
scales='./assets/v6t_v2_scale_last.pt',
depth_multiple=0.33,
width_multiple=0.375,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False,
reg_max=0, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.00001,
lrf=0.001,
momentum=0.937,
weight_decay=0.00005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
ptq = dict(
num_bits = 8,
calib_batches = 4,
# 'max', 'histogram'
calib_method = 'max',
# 'entropy', 'percentile', 'mse'
histogram_amax_method='entropy',
histogram_amax_percentile=99.99,
calib_output_path='./',
sensitive_layers_skip=False,
sensitive_layers_list=[],
)
qat = dict(
calib_pt = './assets/v6s_t_calib_max.pt',
sensitive_layers_skip = False,
sensitive_layers_list=[],
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='repopt'
# YOLOv6n model
model = dict(
type='YOLOv6n',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.02, #0.01 # 0.02
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='hyper_search'
# YOLOv6n model
model = dict(
type='YOLOv6n',
pretrained=None,
scales='../yolov6_assert/v6n_v2_scale_last.pt',
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.02, #0.01 # 0.02
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='repopt'
# YOLOv6n model
model = dict(
type='YOLOv6n',
pretrained='./assets/v6s_n.pt',
scales='./assets/v6n_v2_scale_last.pt',
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False,
reg_max=0, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.00001, #0.01 # 0.02
lrf=0.001,
momentum=0.937,
weight_decay=0.00005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
ptq = dict(
num_bits = 8,
calib_batches = 4,
# 'max', 'histogram'
calib_method = 'max',
# 'entropy', 'percentile', 'mse'
histogram_amax_method='entropy',
histogram_amax_percentile=99.99,
calib_output_path='./',
sensitive_layers_skip=False,
sensitive_layers_list=[],
)
qat = dict(
calib_pt = './assets/v6s_n_calib_max.pt',
sensitive_layers_skip = False,
sensitive_layers_list=[],
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='repopt'
# YOLOv6s model
model = dict(
type='YOLOv6s',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=False,
reg_max=0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='hyper_search'
# YOLOv6s model
model = dict(
type='YOLOv6s',
pretrained=None,
scales='../yolov6_assert/v6s_v2_scale.pt',
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=False,
reg_max=0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='repopt'
# YOLOv6s model
model = dict(
type='YOLOv6s',
pretrained='./assets/yolov6s_v2_reopt_43.1.pt',
scales='./assets/yolov6s_v2_scale.pt',
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
),
neck=dict(
type='RepPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=1,
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type = 'giou',
use_dfl = False,
reg_max = 0, # if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.00001,
lrf=0.001,
momentum=0.937,
weight_decay=0.00005,
warmup_epochs=3,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
ptq = dict(
num_bits = 8,
calib_batches = 4,
# 'max', 'histogram'
calib_method = 'histogram',
# 'entropy', 'percentile', 'mse'
histogram_amax_method='entropy',
histogram_amax_percentile=99.99,
calib_output_path='./',
sensitive_layers_skip=False,
sensitive_layers_list=['detect.stems.0.conv',
'detect.stems.1.conv',
'detect.stems.2.conv',
'detect.cls_convs.0.conv',
'detect.cls_convs.1.conv',
'detect.cls_convs.2.conv',
'detect.reg_convs.0.conv',
'detect.reg_convs.1.conv',
'detect.reg_convs.2.conv',
'detect.cls_preds.0',
'detect.cls_preds.1',
'detect.cls_preds.2',
'detect.reg_preds.0',
'detect.reg_preds.1',
'detect.reg_preds.2',
],
)
qat = dict(
calib_pt = './assets/yolov6s_v2_reopt_43.1_calib_histogram.pt',
sensitive_layers_skip = False,
sensitive_layers_list=['detect.stems.0.conv',
'detect.stems.1.conv',
'detect.stems.2.conv',
'detect.cls_convs.0.conv',
'detect.cls_convs.1.conv',
'detect.cls_convs.2.conv',
'detect.reg_convs.0.conv',
'detect.reg_convs.1.conv',
'detect.reg_convs.2.conv',
'detect.cls_preds.0',
'detect.cls_preds.1',
'detect.cls_preds.2',
'detect.reg_preds.0',
'detect.reg_preds.1',
'detect.reg_preds.2',
],
)
# Choose Rep-block by the training Mode, choices=["repvgg", "hyper-search", "repopt"]
training_mode='repopt'
# YOLOv6l model
model = dict(
type='YOLOv6l',
pretrained=None,
depth_multiple=1.0,
width_multiple=1.0,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 2.0,
'dfl': 1.0,
},
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
training_mode = "conv_silu"
# use normal conv to speed up training and further improve accuracy.
# YOLOv6l6 model
model = dict(
type='YOLOv6l6',
pretrained=None,
depth_multiple=1.0,
width_multiple=1.0,
backbone=dict(
type='CSPBepBackbone_P6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
csp_e=float(1)/2,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck_P6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.2,
)
training_mode = "conv_silu"
\ No newline at end of file
# YOLOv6l6 model
model = dict(
type='YOLOv6l6',
pretrained='weights/yolov6l6.pt',
depth_multiple=1.0,
width_multiple=1.0,
backbone=dict(
type='CSPBepBackbone_P6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
csp_e=float(1)/2,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck_P6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
training_mode = "conv_silu"
\ No newline at end of file
# YOLOv6l model
model = dict(
type='YOLOv6l',
pretrained='weights/yolov6l.pt',
depth_multiple=1.0,
width_multiple=1.0,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(1)/2,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(1)/2,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 2.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
training_mode = "conv_silu"
# use normal conv to speed up training and further improve accuracy.
# YOLOv6m model
model = dict(
type='YOLOv6m',
pretrained=None,
depth_multiple=0.60,
width_multiple=0.75,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(2)/3,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(2)/3,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 0.8,
'dfl': 1.0,
},
)
)
solver=dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
# YOLOv6m6 model
model = dict(
type='YOLOv6m6',
pretrained=None,
depth_multiple=0.60,
width_multiple=0.75,
backbone=dict(
type='CSPBepBackbone_P6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
csp_e=float(2)/3,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck_P6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
csp_e=float(2)/3,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.9,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
)
\ No newline at end of file
# YOLOv6m6 model
model = dict(
type='YOLOv6m6',
pretrained='weights/yolov6m6.pt',
depth_multiple=0.60,
width_multiple=0.75,
backbone=dict(
type='CSPBepBackbone_P6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
csp_e=float(2)/3,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck_P6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
csp_e=float(2)/3,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
\ No newline at end of file
# YOLOv6m model
model = dict(
type='YOLOv6m',
pretrained='weights/yolov6m.pt',
depth_multiple=0.60,
width_multiple=0.75,
backbone=dict(
type='CSPBepBackbone',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
csp_e=float(2)/3,
fuse_P2=True,
),
neck=dict(
type='CSPRepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
csp_e=float(2)/3,
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=True,
reg_max=16, #if use_dfl is False, please set reg_max to 0
distill_weight={
'class': 0.8,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
# YOLOv6n model
model = dict(
type='YOLOv6n',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
fuse_P2=True,
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False, # set to True if you want to further train with distillation
reg_max=0, # set to 16 if you want to further train with distillation
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.02,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# YOLOv6n model
model = dict(
type='YOLOv6n6',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True.
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.02,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# YOLOv6n model
model = dict(
type='YOLOv6n6',
pretrained='weights/yolov6n6.pt',
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True.
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='siou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
# YOLOv6s model
model = dict(
type='YOLOv6n',
pretrained='weights/yolov6n.pt',
depth_multiple=0.33,
width_multiple=0.25,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
fuse_P2=True,
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='siou',
use_dfl=False, # set to True if you want to further train with distillation
reg_max=0, # set to 16 if you want to further train with distillation
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
# YOLOv6s model
model = dict(
type='YOLOv6s',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
fuse_P2=True,
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=False, # set to True if you want to further train with distillation
reg_max=0, # set to 16 if you want to further train with distillation
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# YOLOv6n model
model = dict(
type='YOLOv6s6',
pretrained=None,
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True.
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3.0,
warmup_momentum=0.8,
warmup_bias_lr=0.1
)
data_aug = dict(
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=0.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.0,
)
# YOLOv6n model
model = dict(
type='YOLOv6s6',
pretrained='weights/yolov6s6.pt',
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep6',
num_repeats=[1, 6, 12, 18, 6, 6],
out_channels=[64, 128, 256, 512, 768, 1024],
fuse_P2=True, # if use RepBiFPANNeck6, please set fuse_P2 to True.
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck6',
num_repeats=[12, 12, 12, 12, 12, 12],
out_channels=[512, 256, 128, 256, 512, 1024],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512, 1024],
num_layers=4,
anchors=1,
strides=[8, 16, 32, 64],
atss_warmup_epoch=4,
iou_type='giou',
use_dfl=False,
reg_max=0 #if use_dfl is False, please set reg_max to 0
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
\ No newline at end of file
# YOLOv6s model
model = dict(
type='YOLOv6s',
pretrained='weights/yolov6s.pt',
depth_multiple=0.33,
width_multiple=0.50,
backbone=dict(
type='EfficientRep',
num_repeats=[1, 6, 12, 18, 6],
out_channels=[64, 128, 256, 512, 1024],
fuse_P2=True,
cspsppf=True,
),
neck=dict(
type='RepBiFPANNeck',
num_repeats=[12, 12, 12, 12],
out_channels=[256, 128, 128, 256, 256, 512],
),
head=dict(
type='EffiDeHead',
in_channels=[128, 256, 512],
num_layers=3,
begin_indices=24,
anchors=3,
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],
out_indices=[17, 20, 23],
strides=[8, 16, 32],
atss_warmup_epoch=0,
iou_type='giou',
use_dfl=False, # set to True if you want to further train with distillation
reg_max=0, # set to 16 if you want to further train with distillation
distill_weight={
'class': 1.0,
'dfl': 1.0,
},
)
)
solver = dict(
optim='SGD',
lr_scheduler='Cosine',
lr0=0.0032,
lrf=0.12,
momentum=0.843,
weight_decay=0.00036,
warmup_epochs=2.0,
warmup_momentum=0.5,
warmup_bias_lr=0.05
)
data_aug = dict(
hsv_h=0.0138,
hsv_s=0.664,
hsv_v=0.464,
degrees=0.373,
translate=0.245,
scale=0.898,
shear=0.602,
flipud=0.00856,
fliplr=0.5,
mosaic=1.0,
mixup=0.243,
)
\ No newline at end of file
# COCO 2017 dataset http://cocodataset.org
train: ../coco/images/train2017 # 118287 images
val: ../coco/images/val2017 # 5000 images
test: ../coco/images/test2017
anno_path: ../coco/annotations/instances_val2017.json
# number of classes
nc: 80
# whether it is coco dataset, only coco dataset should be set to True.
is_coco: True
# class names
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
'hair drier', 'toothbrush' ]
# Please insure that your custom_dataset are put in same parent dir with YOLOv6_DIR
train: ../custom_dataset/images/train # train images
val: ../custom_dataset/images/val # val images
test: ../custom_dataset/images/test # test images (optional)
# whether it is coco dataset, only coco dataset should be set to True.
is_coco: False
# Classes
nc: 20 # number of classes
names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog',
'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'] # class names
# mytrain
train: ./data/test1/images/train
val: ./data/test1/images/val
test: ./data/test1/images/test
#anno_path: ../coco/annotations/instances_val2017.json
# number of classes
nc: 8
# whether it is coco dataset, only coco dataset should be set to True.
is_coco: False
# class names
names: ['person', 'face','hand','garb','larwas','conwas','foowas','recyc']
{"categories": [{"id": 0, "name": "person", "supercategory": ""}, {"id": 1, "name": "face", "supercategory": ""}, {"id": 2, "name": "hand", "supercategory": ""}, {"id": 3, "name": "garb", "supercategory": ""}, {"id": 4, "name": "larwas", "supercategory": ""}, {"id": 5, "name": "conwas", "supercategory": ""}, {"id": 6, "name": "foowas", "supercategory": ""}, {"id": 7, "name": "recyc", "supercategory": ""}], "annotations": [{"area": 44604.00207138064, "bbox": [381.00001335144043, 66.00000143051147, 126.00000381469727, 354.0000057220459], "category_id": 0, "id": 0, "image_id": "garb01_145", "iscrowd": 0, "segmentation": []}, {"area": 45745.99769973756, "bbox": [485.0000190734863, 92.00000524520874, 177.99999237060547, 256.99999809265137], "category_id": 0, "id": 1, "image_id": "garb01_145", "iscrowd": 0, "segmentation": []}, {"area": 5900.0003767013595, "bbox": [490.0000071525574, 0.9999972581863403, 59.000000953674316, 100.00000476837158], "category_id": 0, "id": 2, "image_id": "garb01_145", "iscrowd": 0, "segmentation": []}, {"area": 3408.0000610351535, "bbox": [478.0000066757202, 248.00000935792923, 48.00000190734863, 70.99999845027924], "category_id": 3, "id": 3, "image_id": "garb01_145", "iscrowd": 0, "segmentation": []}, {"area": 1944.0000257492045, "bbox": [394.9999928474426, 287.0000070333481, 35.999999046325684, 54.00000214576721], "category_id": 3, "id": 4, "image_id": "garb01_145", "iscrowd": 0, "segmentation": []}, {"area": 43839.99971628188, "bbox": [793.0000019073486, 560.0000041723251, 273.99999618530273, 160.0000011920929], "category_id": 7, "id": 5, "image_id": "garb01_145", "iscrowd": 0, "segmentation": []}, {"area": 30044.00137519838, "bbox": [521.0000133514404, 47.99999713897705, 116.00000381469727, 259.0000033378601], "category_id": 0, "id": 6, "image_id": "garb01_146", "iscrowd": 0, "segmentation": []}, {"area": 43647.99871635437, "bbox": [373.00000190734863, 67.99999594688416, 123.99999618530273, 352.00000047683716], "category_id": 0, "id": 7, "image_id": "garb01_146", "iscrowd": 0, "segmentation": []}, {"area": 2771.9999341964694, "bbox": [506.00000858306885, 199.9999988079071, 41.99999809265137, 66.00000143051147], "category_id": 3, "id": 8, "image_id": "garb01_146", "iscrowd": 0, "segmentation": []}, {"area": 2072.000101685525, "bbox": [394.99998450279236, 284.000001847744, 37.00000047683716, 56.00000202655792], "category_id": 3, "id": 9, "image_id": "garb01_146", "iscrowd": 0, "segmentation": []}, {"area": 43923.99766778949, "bbox": [789.0000343322754, 562.0000201463699, 277.99999237060547, 157.99999594688416], "category_id": 7, "id": 10, "image_id": "garb01_146", "iscrowd": 0, "segmentation": []}, {"area": 110160.00308990479, "bbox": [293.0000114440918, 103.99999380111694, 272.00000762939453, 405.0], "category_id": 0, "id": 11, "image_id": "garb01_147", "iscrowd": 0, "segmentation": []}, {"area": 12861.999757766716, "bbox": [558.0000066757202, 368.00002098083496, 118.00000190734863, 108.99999618530273], "category_id": 3, "id": 12, "image_id": "garb01_147", "iscrowd": 0, "segmentation": []}, {"area": 19840.000480413437, "bbox": [585.9999847412109, 272.999991774559, 155.0, 128.00000309944153], "category_id": 4, "id": 13, "image_id": "garb01_147", "iscrowd": 0, "segmentation": []}, {"area": 6350.000023841858, "bbox": [535.9999847412109, 384.9999797344208, 50.0, 127.00000047683716], "category_id": 7, "id": 14, "image_id": "garb01_147", "iscrowd": 0, "segmentation": []}, {"area": 3960.000060796736, "bbox": [517.0000004768372, 276.0000076889992, 65.99999904632568, 60.00000178813934], "category_id": 3, "id": 15, "image_id": "garb01_147", "iscrowd": 0, "segmentation": []}, {"area": 7525.999831199647, "bbox": [534.9999928474426, 275.9999942779541, 70.99999904632568, 105.99999904632568], "category_id": 7, "id": 16, "image_id": "garb01_147", "iscrowd": 0, "segmentation": []}, {"area": 72089.99691009521, "bbox": [393.0000114440918, 105.00000715255737, 177.99999237060547, 405.0], "category_id": 0, "id": 17, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 13684.999703168865, "bbox": [565.9999942779541, 365.9999889135361, 118.99999618530273, 115.0000011920929], "category_id": 3, "id": 18, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 2322.0001952648204, "bbox": [396.9999837875366, 240.00000178813934, 43.00000190734863, 54.00000214576721], "category_id": 3, "id": 19, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 20033.999178171165, "bbox": [584.9999713897705, 273.9999943971634, 158.99999618530273, 125.99999785423279], "category_id": 4, "id": 20, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 2345.9999349117284, "bbox": [544.0000081062317, 285.00000447034836, 45.999999046325684, 50.99999964237213], "category_id": 3, "id": 21, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 2789.9999141693115, "bbox": [554.9999928474426, 419.99998569488525, 30.999999046325684, 90.0], "category_id": 7, "id": 22, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 1350.0, "bbox": [559.0000152587891, 327.0000100135803, 30.0, 45.0], "category_id": 7, "id": 23, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 1350.0000402331352, "bbox": [544.0000152587891, 271.99999049305916, 45.0, 30.00000089406967], "category_id": 7, "id": 24, "image_id": "garb01_148", "iscrowd": 0, "segmentation": []}, {"area": 123074.00310134872, "bbox": [268.0000114440918, 101.9999885559082, 297.99999237060547, 413.00002098083496], "category_id": 0, "id": 25, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 17685.00051498413, "bbox": [206.99999809265137, 51.00000500679016, 131.00000381469727, 135.0], "category_id": 3, "id": 26, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 14145.00036597252, "bbox": [560.0000143051147, 365.9999889135361, 123.00000190734863, 115.0000011920929], "category_id": 3, "id": 27, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 20033.999178171165, "bbox": [583.0000019073486, 273.0000025033951, 158.99999618530273, 125.99999785423279], "category_id": 4, "id": 28, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 4088.0002547502554, "bbox": [515.0000143051147, 281.99999660253525, 73.00000190734863, 56.00000202655792], "category_id": 3, "id": 29, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 2576.0001029968234, "bbox": [532.9999852180481, 336.0000067949295, 55.999999046325684, 46.00000262260437], "category_id": 7, "id": 30, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 6551.999648094181, "bbox": [534.9999856948853, 385.9999877214432, 51.99999809265137, 125.99999785423279], "category_id": 7, "id": 31, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 1431.0001083612462, "bbox": [533.9999914169312, 273.0000051856041, 53.00000190734863, 27.000001072883606], "category_id": 7, "id": 32, "image_id": "garb01_149", "iscrowd": 0, "segmentation": []}, {"area": 104940.0037765503, "bbox": [347.00000762939453, 29.000000953674316, 220.0, 477.0000171661377], "category_id": 0, "id": 33, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 13090.000534057617, "bbox": [327.00000762939453, 33.99999260902405, 70.0, 187.00000762939453], "category_id": 3, "id": 34, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 15575.999554634098, "bbox": [551.9999933242798, 363.99998366832733, 131.99999809265137, 117.99999833106995], "category_id": 3, "id": 35, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 19812.00055885315, "bbox": [585.0000286102295, 271.9999945163727, 156.00000381469727, 127.00000047683716], "category_id": 4, "id": 36, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 5535.000032186508, "bbox": [534.0000152587891, 386.0000091791153, 45.0, 123.00000071525574], "category_id": 7, "id": 37, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 2819.9999928474426, "bbox": [530.0, 334.0000095963478, 60.0, 46.99999988079071], "category_id": 7, "id": 38, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 3976.000090479849, "bbox": [517.0000004768372, 281.99999660253525, 70.99999904632568, 56.00000202655792], "category_id": 3, "id": 39, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}, {"area": 1507.9999942779523, "bbox": [534.9999856948853, 272.99999713897705, 51.99999809265137, 29.000000953674316], "category_id": 7, "id": 40, "image_id": "garb01_150", "iscrowd": 0, "segmentation": []}], "images": [{"file_name": "garb01_145.jpg", "id": "garb01_145", "width": 1280, "height": 720}, {"file_name": "garb01_146.jpg", "id": "garb01_146", "width": 1280, "height": 720}, {"file_name": "garb01_147.jpg", "id": "garb01_147", "width": 1280, "height": 720}, {"file_name": "garb01_148.jpg", "id": "garb01_148", "width": 1280, "height": 720}, {"file_name": "garb01_149.jpg", "id": "garb01_149", "width": 1280, "height": 720}, {"file_name": "garb01_150.jpg", "id": "garb01_150", "width": 1280, "height": 720}]}
\ No newline at end of file
此差异已折叠。
{"information": {"./data/test1/images/val\\garb01_145.jpg": {"shape": [1280, 720], "labels": [[0.0, 0.34687501192092896, 0.3375000059604645, 0.09843750298023224, 0.49166667461395264], [0.0, 0.44843751192092896, 0.3062500059604645, 0.13906249403953552, 0.3569444417953491], [0.0, 0.4058593809604645, 0.07083333283662796, 0.04609375074505806, 0.1388888955116272], [3.0, 0.3921875059604645, 0.39375001192092896, 0.03750000149011612, 0.09861110895872116], [3.0, 0.3226562440395355, 0.43611112236976624, 0.02812499925494194, 0.07500000298023224], [7.0, 0.7265625, 0.8888888955116272, 0.21406249701976776, 0.2222222238779068]]}, "./data/test1/images/val\\garb01_146.jpg": {"shape": [1280, 720], "labels": [[0.0, 0.45234376192092896, 0.2465277761220932, 0.09062500298023224, 0.35972222685813904], [0.0, 0.33984375, 0.33888888359069824, 0.09687499701976776, 0.4888888895511627], [3.0, 0.4117187559604645, 0.3236111104488373, 0.03281249850988388, 0.09166666865348816], [3.0, 0.32304686307907104, 0.4333333373069763, 0.02890625037252903, 0.07777778059244156], [7.0, 0.7250000238418579, 0.8902778029441833, 0.21718749403953552, 0.21944443881511688]]}, "./data/test1/images/val\\garb01_147.jpg": {"shape": [1280, 720], "labels": [[0.0, 0.33515626192092896, 0.42569443583488464, 0.21250000596046448, 0.5625], [3.0, 0.4820312559604645, 0.5868055820465088, 0.09218750149011612, 0.15138888359069824], [4.0, 0.518359363079071, 0.4680555462837219, 0.12109375, 0.17777778208255768], [7.0, 0.43828123807907104, 0.6229166388511658, 0.0390625, 0.17638888955116272], [3.0, 0.4296875, 0.42500001192092896, 0.05156249925494194, 0.0833333358168602], [7.0, 0.4457031190395355, 0.45694443583488464, 0.05546874925494194, 0.14722222089767456]]}, "./data/test1/images/val\\garb01_148.jpg": {"shape": [1280, 720], "labels": [[0.0, 0.3765625059604645, 0.4270833432674408, 0.13906249403953552, 0.5625], [3.0, 0.4886718690395355, 0.5881944298744202, 0.09296874701976776, 0.1597222238779068], [3.0, 0.32695311307907104, 0.3708333373069763, 0.03359375149011612, 0.07500000298023224], [4.0, 0.5191406011581421, 0.4680555462837219, 0.12421874701976776, 0.17499999701976776], [3.0, 0.4429687559604645, 0.4312500059604645, 0.03593749925494194, 0.07083333283662796], [7.0, 0.4457031190395355, 0.6458333134651184, 0.02421874925494194, 0.125], [7.0, 0.44843751192092896, 0.4854166805744171, 0.0234375, 0.0625], [7.0, 0.44257813692092896, 0.3986110985279083, 0.03515625, 0.0416666679084301]]}, "./data/test1/images/val\\garb01_149.jpg": {"shape": [1280, 720], "labels": [[0.0, 0.3257812559604645, 0.42847222089767456, 0.23281249403953552, 0.5736111402511597], [3.0, 0.212890625, 0.16458334028720856, 0.10234375298023224, 0.1875], [3.0, 0.48554688692092896, 0.5881944298744202, 0.09609375149011612, 0.1597222238779068], [4.0, 0.517578125, 0.46666666865348816, 0.12421874701976776, 0.17499999701976776], [3.0, 0.43085938692092896, 0.4305555522441864, 0.05703125149011612, 0.07777778059244156], [7.0, 0.43828123807907104, 0.49861112236976624, 0.04374999925494194, 0.06388889253139496], [7.0, 0.43828123807907104, 0.6236110925674438, 0.04062499850988388, 0.17499999701976776], [7.0, 0.4378906190395355, 0.39791667461395264, 0.04140625149011612, 0.03750000149011612]]}, "./data/test1/images/val\\garb01_150.jpg": {"shape": [1280, 720], "labels": [[0.0, 0.3570312559604645, 0.3715277910232544, 0.171875, 0.6625000238418579], [3.0, 0.2828125059604645, 0.1770833283662796, 0.0546875, 0.2597222328186035], [3.0, 0.4828124940395355, 0.5874999761581421, 0.10312499850988388, 0.16388888657093048], [4.0, 0.5179687738418579, 0.4659722149372101, 0.12187500298023224, 0.17638888955116272], [7.0, 0.43476563692092896, 0.6215277910232544, 0.03515625, 0.17083333432674408], [7.0, 0.4375, 0.4965277910232544, 0.046875, 0.06527777761220932], [3.0, 0.431640625, 0.4305555522441864, 0.05546874925494194, 0.07777778059244156], [7.0, 0.43828123807907104, 0.3993055522441864, 0.04062499850988388, 0.04027777910232544]]}}, "image_hash": "3c5f665e49f188f90f996e6af6c415c3", "label_hash": "514ebd89a2c94eb602e4d74973bf577a"}
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册