mirror of https://github.com/open-mmlab/mmyolo.git
[Doc] add yolov5_tutorial.md (#12)
parent
56822f4185
commit
8ce6886994
docs/zh_cn/user_guides
|
@ -0,0 +1,156 @@
|
|||
# YOLOv5 从入门到部署全流程
|
||||
|
||||
## 环境安装
|
||||
|
||||
温馨提醒:由于本仓库采用的是 OpenMMLab 2.0,请最好新建一个 conda 虚拟环境,防止和 OpenMMLab 1.0 已经安装的仓库冲突。
|
||||
|
||||
```shell
|
||||
conda create -n open-mmlab python=3.8 -y
|
||||
conda activate open-mmlab
|
||||
conda install pytorch torchvision -c pytorch
|
||||
# conda install pytorch torchvision cpuonly -c pytorch
|
||||
pip install -U openmim
|
||||
mim install mmengine
|
||||
mim install "mmcv>=2.0.0rc1"
|
||||
mim install "mmdet>=3.0.0rc0"
|
||||
|
||||
git clone https://github.com/open-mmlab/mmyolo.git
|
||||
cd mmyolo
|
||||
pip install -v -e .
|
||||
```
|
||||
|
||||
详细环境配置操作请查看 [get_started](../get_started.md)
|
||||
|
||||
## 数据集准备
|
||||
|
||||
本文选取不到 40MB 大小的 balloon 气球数据集作为 MMYOLO 的学习数据集。
|
||||
|
||||
```shell
|
||||
python tools/misc/download_dataset.py --dataset-name balloon --save-dir data --unzip
|
||||
python tools/dataset_converters/balloon2coco.py
|
||||
```
|
||||
|
||||
执行以上命令,下载数据集并转化格式后,balloon 数据集在 data 文件夹中准备好了,train.json 和 val.json 便是 coco 格式的标注文件了。
|
||||
|
||||

|
||||
|
||||
## config文件准备
|
||||
|
||||
在 configs/yolov5 文件夹下新建 yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py 配置文件,并把以下内容复制配置文件中。
|
||||
|
||||
```python
|
||||
_base_ = './yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py'
|
||||
|
||||
data_root = 'data/balloon/'
|
||||
|
||||
train_batch_size_per_gpu = 4
|
||||
train_num_workers = 2
|
||||
|
||||
metainfo = {
|
||||
'CLASSES': ('balloon', ),
|
||||
'PALETTE': [
|
||||
(220, 20, 60),
|
||||
]
|
||||
}
|
||||
|
||||
train_dataloader = dict(
|
||||
batch_size=train_batch_size_per_gpu,
|
||||
dataset=dict(
|
||||
data_root=data_root,
|
||||
metainfo=metainfo,
|
||||
data_prefix=dict(img='train/'),
|
||||
ann_file='train.json'))
|
||||
|
||||
val_dataloader = dict(
|
||||
dataset=dict(
|
||||
data_root=data_root,
|
||||
metainfo=metainfo,
|
||||
data_prefix=dict(img='val/'),
|
||||
ann_file='val.json'))
|
||||
|
||||
test_dataloader = val_dataloader
|
||||
|
||||
val_evaluator = dict(ann_file=data_root + 'val.json')
|
||||
|
||||
test_evaluator = val_evaluator
|
||||
|
||||
model = dict(bbox_head=dict(head_module=dict(num_classes=1)))
|
||||
|
||||
default_hooks = dict(logger=dict(interval=1))
|
||||
|
||||
```
|
||||
|
||||
以上配置从 `./yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py` 中继承,并根据 balloon 数据的特点更新了 `data_root`、`metainfo`、`train_dataloader`、`val_dataloader`、`num_classes` 等配置。
|
||||
我们将 logger 的 interval 设置为 1 的原因是,每进行 interval 次 iteration 会输出一次 loss 相关的日志,而我们选取气球数据集比较小,interval 太大我们将看不到 loss 相关日志的输出。
|
||||
|
||||
## 训练
|
||||
|
||||
```shell
|
||||
python tools/train.py configs/yolov5/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py
|
||||
```
|
||||
|
||||
运行以上训练命令,`work_dirs/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon` 文件夹会被自动生成,权重文件以及此次的训练配置文件将会保存在此文件夹中。
|
||||
|
||||

|
||||
|
||||
### 中断后恢复训练
|
||||
|
||||
如果训练中途停止,在训练命令最后加上 --resume ,程序会自动从 work_dirs 中加载最新的权重文件恢复训练。
|
||||
|
||||
```shell
|
||||
python tools/train.py configs/yolov5/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py --resume
|
||||
```
|
||||
|
||||
### 加载预训练权重微调
|
||||
|
||||
经过测试,相比不加载预训练模型,加载 YOLOv5 官方的预训练模型在气球数据集上训练和验证 coco/bbox_mAP 能涨 30 多个百分点。
|
||||
|
||||
1. 下载 COCO 数据集预训练权重
|
||||
|
||||
```shell
|
||||
cd mmyolo
|
||||
wget xxx -O yolov5-6.1.zip
|
||||
```
|
||||
|
||||
2. 加载预训练模型进行训练
|
||||
|
||||
```shell
|
||||
cd mmyolo
|
||||
python tools/train.py configs/yolov5/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py --cfg-options load_from='yolov5-6.1/yolov5s.pth'
|
||||
```
|
||||
|
||||
3. 冻结backbone进行训练
|
||||
|
||||
通过config文件或者命令行中设置 model.backbone.frozen_stages=4 冻结 backbone 的 4 个 stages。
|
||||
|
||||
```shell
|
||||
# 命令行中设置 model.backbone.frozen_stages=4
|
||||
cd mmyolo
|
||||
python tools/train.py configs/yolov5/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py --cfg-options load_from='yolov5-6.1/yolov5s.pth' model.backbone.frozen_stages=4
|
||||
```
|
||||
|
||||
### 可视化训练参数
|
||||
|
||||
本教程以 wandb 展示 loss 等数据的可视化, wandb 官网注册并在 https://wandb.ai/settings 获取到 wandb 的 API Keys
|
||||
|
||||

|
||||
|
||||
```shell
|
||||
pip install wandb
|
||||
# 运行了 wandb login 后输入上文中获取到的 API Keys ,便登录成功。
|
||||
wandb login
|
||||
```
|
||||
|
||||
在 `configs/yolov5/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py` 添加 wandb 配置
|
||||
|
||||
```python
|
||||
visualizer = dict(vis_backends = [dict(type='LocalVisBackend'), dict(type='WandbVisBackend')])
|
||||
```
|
||||
|
||||
重新运行训练命令便可以在命令行中提示的网页链接中看到 loss、学习率和 coco/bbox_mAP 等数据可视化了。
|
||||
|
||||
```shell
|
||||
python tools/train.py configs/yolov5/yolov5_s-v61_syncbn_fast_1xb4-300e_balloon.py
|
||||
```
|
||||
|
||||

|
Loading…
Reference in New Issue