计算机视觉 全教程 目录
物体检测 系列教程 总目录
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 128yolov5s 64yolov5m 40yolov5l 24yolov5x 16
- yolov5的代码写得非常非常好,对比v3你会觉得v3比较啰嗦,v5的代码是一个如此庞大的工程,但是配置文件却是如此简洁,每个人都需要对一个很大很好的开源项目从前到后一行一行代码去debug,因为这是你从初级程序员进阶的必经之路,非常建议选择yolov5
2、训练自己的数据集(待更新)
3、yolov5目录结构
yolov5是一个相对比较庞大的工程,这部分主要介绍一级目录所有的文件的意义:
3.1 文件夹/包:
.github:存放github相关配置的,这个不用管
data:主要是构建数据集的配置文件,还有一些官方的测试文件,当然如果你需要训练自己的数据集,那就需要修改部分配置文件了
model:主要是构建网络的函数代码文件、配置文本文件
runs:这个真的是最重要的文件夹了,我们主要跑的就是三个脚本,分别是训练、测试、预测,这三个分别一个文件夹,每个文件夹又都会记录出每次运行该脚本的结果
utils:主要是功能函数的代码文件,比如画图、计算损失等
wandb:
weights:
3.2 .py文件:
train.py:训练脚本,将通用模型训练自己任务的模型
test.py:测试脚本,读取自己训练的模型,对当前的数据进行测试
detect.py:检测脚本,读取自己训练的模型,实时检测当前视频帧,并显示实时的视频和标记的框、置信度、
hubconf.py:
3.3 其他不重要的文件:
.dockerignore
.gitattributes
.gitignore
Dockerfile
LICENCE:证书
README.MD
requiresments.txt
tutorial.ipynb
yolov5s.pt:coco数据集训练出来的5s模型
4、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中选择一个作为预训练模型,初始模型路径
- cfg,模型配置文件的路径
- data,数据集对应的配置文件路径
- hyp,超参数
- epochs,训练次数
- batch-size,批次
- img-size,默认输入图像尺寸
- rect,
- resume,
- nosave,
- notest,
- noautoanchor
- evolve
- bucket
- cache-images
- image-weights
- device,指定训练设备
- multi-scale
- single-cls
- adam
- sync-bn
- local_rank
- workers
- project
- entity
- name
- exist-ok
- quad
- linear-lr
- label-smoothing
- upload_dataset
- bbox_interval
- save_period
- artifact_alias