Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deepvac/yolov5
DeepVAC-compliant Yolo v5 implementation.
https://github.com/deepvac/yolov5
Last synced: 4 days ago
JSON representation
DeepVAC-compliant Yolo v5 implementation.
- Host: GitHub
- URL: https://github.com/deepvac/yolov5
- Owner: DeepVAC
- License: gpl-3.0
- Created: 2021-01-21T10:04:41.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-07-21T12:37:33.000Z (over 3 years ago)
- Last Synced: 2023-03-05T16:49:51.270Z (over 1 year ago)
- Language: Python
- Size: 144 KB
- Stars: 5
- Watchers: 2
- Forks: 2
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Yolov5
DeepVAC-compliant Yolov5 implementation# 简介
本项目实现了符合DeepVAC规范的Yolov5**项目依赖**
- deepvac >= 0.6.0
- pytorch >= 1.9.0
- torchvision >= 0.10.0# 如何运行本项目
## 1. 阅读[DeepVAC规范](https://github.com/DeepVAC/deepvac)
可以粗略阅读,建立起第一印象## 2. 准备运行环境
使用Deepvac规范指定[Docker镜像](https://github.com/DeepVAC/deepvac#2-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)## 3. 准备数据集
- 获取coco2017数据集
浏览器操作:
[coco2017labels.zip](https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels.zip)
[train2017.zip](http://images.cocodataset.org/zips/train2017.zip)
[val2017.zip](http://images.cocodataset.org/zips/val2017.zip)
[test2017.zip](http://images.cocodataset.org/zips/test2017.zip)命令行操作:
```bash
curl -L https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels.zip -o coco2017labels.zip
mkdir -p data/coco
unzip -q coco2017labels -d data/coco
rm coco2017labels.zip
```- 解压coco2017数据集
- 数据集配置
在config.py文件中作如下配置:```python
from deepvac import AttrDict, new# new("your train class name")
config = new("Yolov5Train")# train dataset
train_sample_path = "data/coco/images/train2017"
train_target_path = "data/coco/instances_train2017.json"
config.core.Yolov5Train.train_dataset = Yolov5MosaicDataset(config, train_sample_path, train_target_path, config.core.Yolov5Train.img_size, config.core.Yolov5Train.border)# val dataset
val_sample_path = "data/coco/images/val2017"
val_target_path = "data/coco/instances_val2017.json"
config.core.Yolov5Train.val_dataset = Yolov5Dataset(config, val_sample_path, val_target_path, config.core.Yolov5Train.img_size)# test dataset
config.core.Yolov5Test = AttrDict()
config.core.Yolov5Test.test_sample_path = "your test images dir"
```- 如果是自己的数据集,那么必须要符合标准coco标注格式
## 4. 训练相关配置
- 指定预训练模型路径(config.core.Yolov5Train.model_path)
[yolov5s & yolov5l](https://pan.baidu.com/share/init?surl=oA4uZUlWUtEq2dOMlBZ8hg) 提取码: g4tu
- 指定训练分类数量(config.core.Yolov5Train.class_num)
- 是否采用混合精度训练(config.core.Yolov5Train.amp)
- 是否采用ema策略(config.core.Yolov5Train.ema)
- 是否采用梯度积攒到一定数量在进行反向更新梯度策略(config.core.Yolov5Train.nominal_batch_factor)
- dataloader相关配置(config.core.Yolov5Train.num_workers)```python
config.core.Yolov5Train.model_path = "output/pretrained.pth"config.core.Yolov5Train.class_num = 80
config.core.Yolov5Train.amp = False
config.core.Yolov5Train.ema = True
# define ema_decay with other func
# config.ema_decay = lambda x: 0.9999 * (1 - math.exp(-x / 2000))config.core.Yolov5Train.nominal_batch_factor = 4
config.core.Yolov5Train.shuffle = True
config.core.Yolov5Train.batch_size = 16
config.core.Yolov5Train.num_workers = 8
config.core.Yolov5Train.pin_memory = True
```## 5. 训练
### 5.1 单卡训练
执行命令:
```bash
python3 train.py
```## 6. 测试
- 测试相关配置
```python
config.core.Yolov5Test.device = "cuda"
config.core.Yolov5Test.class_num = 80
config.core.Yolov5Test.img_size = 640
config.core.Yolov5Test.half = False
config.core.Yolov5Test.show_output_dir = "output/show"
config.core.Yolov5Test.iou_thres = 0.45
config.core.Yolov5Test.conf_thres = 0.25
config.core.Yolov5Test.idx2cat = ["cls{}".format(i) for i in range(config.core.Yolov5Test.class_num)]
```- 运行测试脚本:
```bash
# 方法1
config.core.Yolov5Test.model_path =
config.core.Yolov5Test.test_sample_path =
python3 test.py# 方法2
python3 test.py
```## 7. 使用torchscript模型
如果训练过程中未开启config.core.Yolov5Test.script_model_path开关,可以在测试过程中转化torchscript模型
- 转换torchscript模型(*.pt)```python
config.core.Yolov5Test.ema = False
config.core.Yolov5Test.script_model_path = "output/script.pt"
```
按照步骤6完成测试,torchscript模型将保存至config.core.Yolov5Test.script_model_path指定文件位置- 加载torchscript模型
```python
config.core.Yolov5Test.jit_model_path =
```## 8. 使用静态量化模型
```
TODO
```## 9. 使用coreml模型
- 测试环境
```
torch == 1.8.1
numpy == 1.19.5
coremltools == 4.1
```- 转换coreml模型(*.mlmodel)
```
# 如果指定路径,那么在训练或者测试过程中都会进行模型转换
import coremltools
config.cast.CoremlCast = AttrDict()
config.cast.TraceCast = AttrDict()
config.cast.TraceCast.model_dir = "output/trace.pt"
config.cast.CoremlCast.model_dir = "output/coreml.mlmodel"
config.cast.CoremlCast.input_type = None
config.cast.CoremlCast.scale = 1.0 / 255.0
config.cast.CoremlCast.color_layout = 'BGR'
config.cast.CoremlCast.blue_bias = 0
config.cast.CoremlCast.green_bias = 0
config.cast.CoremlCast.red_bias = 0
config.cast.CoremlCast.minimum_deployment_target = coremltools.target.iOS13
config.cast.CoremlCast.classfier_config = ["cls{}".format(i) for i in range(config.core.Yolov5Test.class_num)]# 训练过程中转换(cast2cpu配置可配置在config.py文件也可以配置在train.py文件)
config.core.Yolov5Train.cast2cpu = True
python3 train.py
# 测试过程中转换(cast2cpu配置可配置在config.py文件也可以配置在train.py文件)
config.core.Yolov5Test.cast2cpu = True
python3 test.py
```
- coreml模型推理
推理环境: macos13 or later## 10. 更多功能
如果要在本项目中开启如下功能:
- 使用tensorboard
- 转换ONNX
- 转换NCNN
- 开启量化
- 开启自动混合精度训练请参考[DeepVAC](https://github.com/DeepVAC/deepvac)
## 11. TODO
- 20210201 项目增加了对Yolov5S和Yolov5L的支持
- 20210219 修复了torchscript模型C++推理代码在cuda上CUDNN_STATUS_INTER_ERROR问题(在modules/model.py中重写Fcous模块)
- 修复在test过程中,静态量化模型报错问题
- 20210622 项目更新来适应新版本deepvac
- 20210625 项目增加coreml模型转换