代码链接

WongKinYiu/yolov7 - GitHub

环境配置

  1. 创建新的虚拟环境,避免与其余框架(如openmmlab)冲突。经过长时间等待后激活新环境。
conda create -n yolov7 python=3.7 -y
conda activate yolov7
  1. requirements.txt中默认会下载PyTorch 1.12.0以及torchvision 0.13.0,与CUDA 10.1不匹配,因此需要在其中将以下两行注释掉。
requests>=2.23.0
scipy>=1.4.1
#torch>=1.7.0,!=1.12.0
#torchvision>=0.8.1,!=0.13.0
tqdm>=4.41.0
  1. 首先安装PyTorch和torchvision,由于CUDA版本为10.1,因此选择以下命令进行安装,版本匹配关系可查阅Previous PyTorch Versions | PyTorch。
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=10.1
  1. 接着安装剩余的requirements。
pip install -r requirements.txt
  1. 验证环境配置是否成功,可以在一张图片上进行推理看看可视化结果。首先需要下载权重yolov7.pt至本地,避免运行途中下载出现网络问题。README.md中附有预训练权重的下载地址。
mkdir weights
cd weights
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
  1. 运行如下脚本在某张图片上进行推理,得到的可视化结果保存在runs/detect中。
python detect.py --weights weights/yolov7.pt --conf 0.25 --img-size 640 --source data/bdd100k/images/val/b1c66a42-6f7d68ca/b1c66a42-6f7d68ca-0000001.jpg
  1. runs/detect中能看见可视化结果,说明环境配置工作完成,可以开展进一步工作。

自定义数据集处理

  1. 首先需要将数据集转为YOLO格式,可使用alexmihalyk23/COCO2YOLO - GitHub进行,不过需要注意的是直接运用该脚本转换后,类别编号会从0开始而不是1,但此处不可以修改,因为YOLO类别编号从0开始。
  2. 在data中,需要编写新的yaml文件,对于bdd100k数据集有data/bdd100k.yaml
# BDD100K dataset https://www.bdd100k.com/# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./data/bdd100k/images/train/
val: ./data/bdd100k/images/val/
test: ./data/bdd100k/images/test/# number of classes
nc: 8# class names
names: ['pedestrian', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', 'bicycle']
  1. 自定义cfg/training/yolov7_bdd100k.yaml
# parameters
nc: 8  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
anchors:- [12,16, 19,36, 40,28]  # P3/8- [36,75, 76,55, 72,146]  # P4/16- [142,110, 192,243, 459,401]  # P5/32# yolov7 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [32, 3, 1]],  # 0[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2      [-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [128, 3, 2]],  # 3-P2/4  [-1, 1, Conv, [64, 1, 1]],[-2, 1, Conv, [64, 1, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],  # 11[-1, 1, MP, []],[-1, 1, Conv, [128, 1, 1]],[-3, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 16-P3/8  [-1, 1, Conv, [128, 1, 1]],[-2, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],  # 24[-1, 1, MP, []],[-1, 1, Conv, [256, 1, 1]],[-3, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 29-P4/16  [-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [1024, 1, 1]],  # 37[-1, 1, MP, []],[-1, 1, Conv, [512, 1, 1]],[-3, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [512, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 42-P5/32  [-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [1024, 1, 1]],  # 50]# yolov7 head
head:[[-1, 1, SPPCSPC, [512]], # 51[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[37, 1, Conv, [256, 1, 1]], # route backbone P4[[-1, -2], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]], # 63[-1, 1, Conv, [128, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[24, 1, Conv, [128, 1, 1]], # route backbone P3[[-1, -2], 1, Concat, [1]],[-1, 1, Conv, [128, 1, 1]],[-2, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [128, 1, 1]], # 75[-1, 1, MP, []],[-1, 1, Conv, [128, 1, 1]],[-3, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 2]],[[-1, -3, 63], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]], # 88[-1, 1, MP, []],[-1, 1, Conv, [256, 1, 1]],[-3, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 2]],[[-1, -3, 51], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],[-2, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]], # 101[75, 1, RepConv, [256, 3, 1]],[88, 1, RepConv, [512, 3, 1]],[101, 1, RepConv, [1024, 3, 1]],[[102,103,104], 1, IDetect, [nc, anchors]],   # Detect(P3, P4, P5)]
  1. 自定义超参数data/hyp.bdd100k.yaml
lr0: 0.01  # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.1  # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937  # SGD momentum/Adam beta1
weight_decay: 0.0005  # optimizer weight decay 5e-4
warmup_epochs: 3.0  # warmup epochs (fractions ok)
warmup_momentum: 0.8  # warmup initial momentum
warmup_bias_lr: 0.1  # warmup initial bias lr
box: 0.05  # box loss gain
cls: 0.3  # cls loss gain
cls_pw: 1.0  # cls BCELoss positive_weight
obj: 0.7  # obj loss gain (scale with pixels)
obj_pw: 1.0  # obj BCELoss positive_weight
iou_t: 0.20  # IoU training threshold
anchor_t: 4.0  # anchor-multiple threshold
fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4  # image HSV-Value augmentation (fraction)
degrees: 0.0  # image rotation (+/- deg)
translate: 0.2  # image translation (+/- fraction)
scale: 0.5  # image scale (+/- gain)
shear: 0.0  # image shear (+/- deg)
perspective: 0.0  # image perspective (+/- fraction), range 0-0.001
flipud: 0.0  # image flip up-down (probability)
fliplr: 0.5  # image flip left-right (probability)
mosaic: 1.0  # image mosaic (probability)
mixup: 0.0  # image mixup (probability)
copy_paste: 0.0  # image copy paste (probability)
paste_in: 0.0  # image copy paste (probability)

训练

训练时运行如下指令,下面代码展示的是双卡训练,其中bs、epochs等参数,以及hyp.bdd100k.yaml内的超参数均可以自行调整。

python -m torch.distributed.launch \--nproc_per_node 2 \--master_port 25000 \train.py \--workers 1 \--device 0,1 \--sync-bn \--batch-size 2 \--data data/bdd100k.yaml \--img 640 640 \--cfg cfg/training/yolov7_bdd100k.yaml \--weights '' \--name bdd100k \--hyp data/hyp.bdd100k.yaml \--epochs 12

测试

训练得到权重文件后,可运行如下指令进行测试,其中权重文件的位置需自行指定,可视化结果会保存至runs/test文件夹中。下图为部分可视化结果。

python test.py --data data/bdd100k.yaml --img 640 --batch 1 --conf 0.001 --iou 0.65 --device 0 --weights runs/train/bdd100k/weights/best.pt --name yolov7_bdd100k


YOLOv7部署于自定义数据集(BDD100K)相关推荐

  1. [YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)

    1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 ...

  2. YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)

    1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 ...

  3. mmrotate自定义数据集安装部署训练测试

    环境 Ubuntu18.04 cuda10.2 python3.7 2080s 一.安装 conda create -n mmrotate python=3.7 conda activate mmro ...

  4. 我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!

    大家好,我是红色石头! 在上三篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 我用 PyTorch ...

  5. 【深度学习】我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!

    在上三篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 我用 PyTorch 复现了 LeNet-5 ...

  6. YOLOv7训练自己的数据集(超详细)

       目录 一.准备深度学习环境 二. 准备自己的数据集 1.创建数据集 2.转换数据格式 3.配置文件 三.模型训练 1.下载预训练模型 2.训练 四.模型测试 五.模型推理 YOLOv7训练自己的 ...

  7. 【超级视客营】基于超算平台的MMYOLO实践过程记录(自定义数据集实现YOLO v5)

    上一篇博文我们搭建好了超算平台对MMYOLO编译环境,并通过单张图片加载训练好的模型进行推理.本篇文章参考MMYOLO官方发布的自定义数据集 标注+训练+测试+部署 全流程文档,进一步在超算平台中实现 ...

  8. 行人属性识别二:添加新网络训练和自定义数据集训练

    序言 上一篇记录了训练过程,但是项目中提供的模型网络都是偏大的,如果想要在边缘设备上部署,还是比较吃力的,所以本文记录如何加入新的网络模型进行训练,以repvgg为例,加入mobilenet.shuf ...

  9. 目标检测算法——YOLOv7训练自己的数据集(保姆级教程)

    >>>深度学习Tricks,第一时间送达<<< 目录 YOLOv7训练自己的数据集(保姆级教程): 一.YOLOv7源代码下载 二.安装深度学习环境 三.准备自己的 ...

最新文章

  1. python npv 计算公式_机器学习各种相似性度量及Python实现
  2. 20幅扎心漫画,道尽无数人的人生!30万网友:这简直是在偷窥我生活...
  3. 43 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-激活实际成本组件划分
  4. pymongo的使用 0916
  5. greenDao 3.0基础
  6. xhell启动mysql_xshell怎么搭建mysql
  7. 听说有人快收权限掉了
  8. Java中父类强制转换为子类的可能
  9. 安卓手机浏览器排行_安卓手机性价比排行:小米10至尊纪念版仅排第三
  10. 毕业10年,阻碍你职业发展的最大“拦路虎”到底是什么?
  11. mysql 导入SQL脚本及乱码处理
  12. 饿了么ui 下拉框远程搜索 绑定清空原始数据
  13. python 报错 IndentationError: unexpected unindent
  14. 大数据智能营销笔记本人工智能下引入新的交互方式
  15. Qt: Exception at 0x7ff8082c4f69, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be ...
  16. cad怎么把图层英文变成中文_CAD图层中英文对照表.pdf
  17. 如何修改计算机网络密码,无线网密码怎么改,教您如何修改无线网络密码
  18. html5 励志名言,励志名言五十条
  19. 【C++】VAL树的旋转(左单旋、右单旋、双旋)
  20. html实现用户调查的表单网页,江苏开放大学网页制作基础及HTML测试作业二制作1个E游调查的表单网页...

热门文章

  1. java ascii 转中文_Java中文与ASCII码的转换
  2. GPU相关:NVIDIA控制面板的CUDA与nvcc -V的CUDA版本不一致
  3. Caysn打印机IOS平台打印示例及接口说明文档 - 20161008
  4. Chrome浏览器B站进度条不显示
  5. 2021-2027全球与中国演播室和外场超高清和高清镜头市场现状及未来发展趋势
  6. PAT - 天梯赛 L3-013 非常弹的球 (高中物理题)
  7. Android | Activity 启动流程分析
  8. 定西计算机职称报名时间,定西2012年职称计算机考试报名时间
  9. python语言程序设计是什么课文_中国大学MOOC有哪些优质课程?
  10. (阿里云 淘宝 百度 腾讯)到此一游