# yolov5_swimmer **Repository Path**: bg8wj/yolov5_swimmer ## Basic Information - **Project Name**: yolov5_swimmer - **Description**: 【计算机视觉-目标检测】YoloV5进行水域游泳者检测,自定义数据集。 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-12-23 - **Last Updated**: 2024-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YoloV5对水域中游泳者进行检测 ## 一、说明 ### 1.1 项目说明 本项目是使用 YoloV5 来训练自己的数据集,所以仅仅展示训练自定义数据集的过程。 **yolov5原项目在 github的地址:https://github.com/ultralytics/yolov5** **本次视频检测的结果已经上传至B站:https://www.bilibili.com/video/BV1zf4y1h717** **如果想要训练自己的数据集,强烈推荐去 github 下载最新的代码,因为最新的代码目录结构可能发生改变,以最新的代码为准。** **同时,原作者在 github 给出的文档十分详细,想要深入了解的话强烈推荐去 github,这里只是展示本人训练的一个过程。** ### 1.2 数据集说明 **数据集存放在项目根路径的 `myDataSet` 文件夹内,但是在实际训练时,请按照作者要求的目录机构组织数据集的位置,即让数据集和项目位于同级目录下。** - `swimmer_img` 这个数据集是本人自己标注的水域游泳者的数据集,共有118张图片。 - `coco128` 这个是从官网下的 coco128 数据集,已经标注好了的。 - `BCCD.v1-resize-416x416.yolov5pytorch` 这是是血细胞的数据集,可以用来检测血细胞,同样也是标注好了的数据集,数据集来源于 B 站。 ## 二、检测效果截图 - 检测水域游泳者 ![水域游泳者检测1](https://images.gitee.com/uploads/images/2021/0620/153308_fcbc9bfe_5430474.png "屏幕截图.png") - 检测血细胞 ![检测血细胞](https://images.gitee.com/uploads/images/2021/0620/154402_79038d2f_5430474.png "屏幕截图.png") - 数据集的标注 ![数据集的标注](https://images.gitee.com/uploads/images/2021/0620/153835_66c255c3_5430474.png "屏幕截图.png") ## 三、训练步骤 ### 3.1 组织目录结构 ![目录结构](https://images.gitee.com/uploads/images/2021/0620/154204_06d7cce6_5430474.png "屏幕截图.png") 项目工程代码位于 `yolov5-develp` 目录项目,标注好的数据集位于 `swimmer_img` 里面 ### 3.2 编写数据集配置文件 修改位于 `models/yolov5s_swimmer.yaml` 的文件内容。 主要是修改 ==nc== 参数的值,这里我们有 ==person== 和 ==swimmer== 两种类型的目标,所以 nc 设置为 2。 ```yaml # 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== 参数为类别名称,名称要和标注图片时的下标对应起来。 ```yaml # 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== 里面有具体的解释 ```sh 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` 文件夹下存放检测的结果,`exp10`,`exp11`,`exp12` 存放的是对图片检测的结果, `swimmer_video2` 存放的是对视频检测到的结果。 视频较大,不方便上传,已经上传至B站: https://www.bilibili.com/video/BV1zf4y1h717