计算机视觉 全教程 目录
😎😎😎物体检测-系列教程 总目录
有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传
点我下载源码
1、基本概述
- YOLOv5没有一篇对应的论文,是一个对v4更好的实现
- v5版本是一个在github更新的基于工程项目的实现
- 基本上和v4没有差异,只不过在整个项目上做出了更好的实现效果
- 主要基于github的文档介绍来讲解yolov5
- 按照根据需求文档按照即可,建议版本,python=3.8、torch=1.8.1、torchvision=0.9.1,安装的时候指定一下清华源关掉梯子即可(对安装不熟悉参考这篇文章):
pip install -r requirements.txt # install
- github源码中有多个模型可以选择,分别为5n、5s、5m、5l、5x等模型,源码中运行的是coco数据集,但是这个coco数据集实在太大了,实际上yolov5的泛化能力非常好,直接跑自己的项目就好了。
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml --batch-size 128
yolov5s 64
yolov5m 40
yolov5l 24
yolov5x 16
- yolov5的代码写得非常非常好,对比v3你会觉得v3比较啰嗦,v5的代码是一个如此庞大的工程,但是配置文件却是如此简洁,每个人都需要对一个很大很好的开源项目从前到后一行一行代码去debug,因为这是你从初级程序员进阶的必经之路,非常建议选择yolov5
2、yolov5目录结构
yolov5是一个相对比较庞大的工程,这部分主要介绍一级目录所有的文件的意义:
2.1 文件夹/包:
.github:存放github相关配置的,这个不用管
data:主要是构建数据集的配置文件,还有一些官方的测试文件,当然如果你需要训练自己的数据集,那就需要修改部分配置文件了
model:主要是构建网络的函数代码文件、配置文本文件
runs:这个真的是最重要的文件夹了,我们主要跑的就是三个脚本,分别是训练、测试、预测,这三个分别一个文件夹,每个文件夹又都会记录出每次运行该脚本的结果
utils:主要是功能函数的代码文件,比如画图、计算损失等
wandb:
weights:
2.2 .py文件:
train.py:训练脚本,将通用模型训练自己任务的模型
test.py:测试脚本,读取自己训练的模型,对当前的数据进行测试
detect.py:检测脚本,读取自己训练的模型,实时检测当前视频帧,并显示实时的视频和标记的框、置信度、
hubconf.py:
2.3 其他不重要的文件:
.dockerignore
.gitattributes
.gitignore
Dockerfile
LICENCE:证书
README.MD
requiresments.txt
tutorial.ipynb
yolov5s.pt:coco数据集训练出来的5s模型
3、train.py参数解读
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=300)
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
parser.add_argument('--notest', action='store_true', help='only test final epoch')
parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')
parser.add_argument('--project', default='runs/train', help='save to project/name')
parser.add_argument('--entity', default=None, help='W&B entity')
parser.add_argument('--name', default='exp', help='save to project/name')
parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
parser.add_argument('--quad', action='store_true', help='quad dataloader')
parser.add_argument('--linear-lr', action='store_true', help='linear LR')
parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
opt = parser.parse_args()
--weights
: 5n、5s、5m、5l、5x中选择一个作为预训练模型,初始模型路径,默认是’yolov5s.pt’。--cfg
: 模型配置文件(.yaml
)的路径。--data
: 数据集配置文件(.yaml
)的路径。默认是data/coco128.yaml
。--hyp
: 超参数配置文件(.yaml
)的路径。默认是data/hyp.scratch.yaml
。--epochs
: 训练的次数--batch-size
: 批次--img-size
: 训练和测试的图像尺寸。可以指定一个或两个尺寸。--rect
: 是否采用矩形训练,这可以提高训练速度和效率。--resume
: 是否恢复最近的训练。--nosave
: 只保存最终的检查点。--notest
: 只在最后一个epoch进行测试。--noautoanchor
: 禁用自动锚点检查。--evolve
: 进化超参数。--bucket
: Google Cloud Storage的桶名。--cache-images
: 缓存图像以加快训练速度。--image-weights
: 使用加权图像选择进行训练。--device
: 训练使用的CUDA设备,例如0
或0,1,2,3
或cpu
。--multi-scale
: 图像尺寸变化±50%。--single-cls
: 将多类数据作为单一类别训练。--adam
: 使用Adam优化器。--sync-bn
: 使用同步批量归一化,仅在分布式数据并行(DDP)模式下可用。--local_rank
: DDP参数,通常不需要手动修改。--workers
: 数据加载器的最大工作进程数。--project
: 训练结果保存的项目路径。--entity
: W&B(Weights & Biases)的实体。--name
: 保存的项目/名称。--exist-ok
: 如果项目/名称已存在,则不增加编号。--quad
: 使用四边形数据加载器。--linear-lr
: 使用线性学习率调整。--label-smoothing
: 标签平滑的epsilon值。--upload_dataset
: 作为W&B(Weights & Biases)工件表上传数据集。--bbox_interval
: 设置W&B日志记录的边界框图像间隔。--save_period
: 每"save_period"轮日志记录一次模型。--artifact_alias
: 使用的数据集工件的版本。