毕业设计:YoloV5对水域中游泳者进行检测

一、说明

1.1 项目说明

本项目是使用 YoloV5 来训练自己的数据集,所以仅仅展示训练自定义数据集的过程。

yolov5原项目在 github的地址:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

本次视频检测的结果已经上传至B站:【目标检测】水域游泳者检测_yolov5自定义数据集_哔哩哔哩_bilibili

如果想要训练自己的数据集,强烈推荐去 github 下载最新的代码,因为最新的代码目录结构可能发生改变,以最新的代码为准。

同时,原作者在 github 给出的文档十分详细,想要深入了解的话强烈推荐去 github,这里只是展示本人训练的一个过程。

1.2 数据集说明

数据集存放在项目根路径的 myDataSet 文件夹内,但是在实际训练时,请按照作者要求的目录机构组织数据集的位置,即让数据集和项目位于同级目录下。

  • swimmer_img

这个数据集是本人自己标注的水域游泳者的数据集,共有118张图片。

  • coco128

这个是从官网下的 coco128 数据集,已经标注好了的。

  • BCCD.v1-resize-416x416.yolov5pytorch

这是是血细胞的数据集,可以用来检测血细胞,同样也是标注好了的数据集,数据集来源于 B 站。

二、检测效果截图

  • 检测水域游泳者

1

  • 检测血细胞

2

  • 数据集的标注

3

三、训练步骤

3.1 组织目录结构

4

项目工程代码位于 yolov5-develp 目录项目,标注好的数据集位于 swimmer_img 里面

3.2 编写数据集配置文件

修改位于 models/yolov5s_swimmer.yaml 的文件内容。

主要是修改 ==nc== 参数的值,这里我们有 ==person== 和 ==swimmer== 两种类型的目标,所以 nc 设置为 2。

# parameters
nc: 2  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

3.3 编写模型配置文件

编辑 /data/swimmer.yaml 文件。

修改 ==train== 参数和 ==val== 参数,这 2 个参数设置用来指定数据集的路径。

修改 ==nc== 参数为识别的目标类别个数。

修改 ==names== 参数为类别名称,名称要和标注图片时的下标对应起来。

# COCO 2017 dataset http://cocodataset.org - first 128 training images
# Train command: python train.py --data coco128.yaml
# Default dataset location is next to YOLOv5:
#   /parent_folder
#     /coco128
#     /yolov5


# download command/URL (optional)
# download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ../swimmer_img/images/  # 128 images
val: ../swimmer_img/images/  # 128 images

# number of classes
nc: 2

# class names
names: ['swimmer', 'water' ]

3.4 开始训练

具体的各个参数可以看 ==train.py== 里面有具体的解释

python train.py --img 640 --batch 16 --epochs 100 --data ./data/swimmer.yaml --cfg ./models/yolov5s_swimmer.yaml --weights weights/yolov5s.pt --name yolov5s_swimmer

可以去官网下载对应的预训练模型,我下载的预训练模型放在 weights/yolov5s.pt 。

预训练模型的尽量和项目的版本一致,否则会导致训练失败。

四、查看结果

在 /runs/train 文件夹下存放每次训练的结果,最后一层训练成功的结果位于 yolov5s_swimmer2 文件夹下。

在 /runs/detect 文件夹下存放检测的结果,exp10exp11exp12 存放的是对图片检测的结果, swimmer_video2 存放的是对视频检测到的结果。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值