Yolov5玩手机检测(记录自用)

数据集结构

data
|-- phone
|   |-- images
|      |-- train
|      |-- val
|   |-- labels
|      |-- train
|      |-- val

划分数据集

# 划分数据集
import os
import random
import shutil

def split_data(source_image_folder, source_label_folder, dest_train_image_folder, dest_train_label_folder, dest_val_image_folder, dest_val_label_folder, split_ratio=0.8):
    # 获取图片和标签文件列表
    image_files = os.listdir(source_image_folder)
    label_files = os.listdir(source_label_folder)

    # 确保文件名一一对应
    image_files.sort()
    label_files.sort()

    # 计算分割的索引
    split_index = int(len(image_files) * split_ratio)

    # 创建训练集和验证集文件夹
    os.makedirs(dest_train_image_folder, exist_ok=True)
    os.makedirs(dest_val_image_folder, exist_ok=True)
    os.makedirs(dest_train_label_folder, exist_ok=True)
    os.makedirs(dest_val_label_folder, exist_ok=True)

    # 将数据复制到训练集和验证集文件夹
    for i, (image_file, label_file) in enumerate(zip(image_files, label_files)):
        src_image = os.path.join(source_image_folder, image_file)
        src_label = os.path.join(source_label_folder, label_file)

        if i < split_index:
            dest_image = os.path.join(dest_train_image_folder, image_file)
            dest_label = os.path.join(dest_train_label_folder, label_file)
        else:
            dest_image = os.path.join(dest_val_image_folder, image_file)
            dest_label = os.path.join(dest_val_label_folder, label_file)

        shutil.copyfile(src_image, dest_image)
        shutil.copyfile(src_label, dest_label)

split_data("/home/aistudio/work/data/JPEGImages",
           "/home/aistudio/work/data/labels", 
           "/home/aistudio/work/data/phone/images/train", 
           "/home/aistudio/work/data/phone/labels/train", 
           "/home/aistudio/work/data/phone/images/val", 
           "/home/aistudio/work/data/phone/labels/val")
print("Finish!")

检测是否一一对应

# 很奇怪,划分完数据集在train文件夹下有个.db文件,导致images和labels的文件没有对应上,所以还是检测一下,如果对应上了就不用管
# 检测images\train、images\val的文件名是否与labels\train、labels\val是否一致
import os

def find_mismatched_files(folder1, folder2):
    files1 = set([os.path.splitext(file)[0] for file in os.listdir(folder1)])
    files2 = set([os.path.splitext(file)[0] for file in os.listdir(folder2)])

    mismatched_files = files1.symmetric_difference(files2)

    return mismatched_files

def identify_mismatched_folders(mismatched_files, folder1, folder2):
    mismatched_in_folder1 = [file for file in mismatched_files if file in set([os.path.splitext(f)[0] for f in os.listdir(folder1)])]
    mismatched_in_folder2 = [file for file in mismatched_files if file in set([os.path.splitext(f)[0] for f in os.listdir(folder2)])]

    return mismatched_in_folder1, mismatched_in_folder2

folder1 = "/home/aistudio/work/data/phone/images/train"
folder2 = "/home/aistudio/work/data/phone/labels/train"

# folder1 = "/home/aistudio/work/data/phone/images/val"
# folder2 = "/home/aistudio/work/data/phone/labels/val"

mismatched_files = find_mismatched_files(folder1, folder2)

if not mismatched_files:
    print("文件名一致,没有不同的文件。")
else:
    mismatched_in_folder1, mismatched_in_folder2 = identify_mismatched_folders(mismatched_files, folder1, folder2)
    print("不同的文件名:")
    
    for file in mismatched_in_folder1:
        print(f"文件 '{file}' 在 {folder1} 中。")
    
    for file in mismatched_in_folder2:
        print(f"文件 '{file}' 在 {folder2} 中。")

下载Yolov5

yolov5下载地址

训练前的几个小处理

①下载yolov5x.pt放在根目录下weights中,以防服务器连接GitHub下载该模型始终timeout
②Arial.ttf,手动下载放在根目录下,一样也是连接不上GitHub,然后在yolov5-master\utils\general.py中找到(ctrl+F)Font,将其改为根目录的路径
在这里插入图片描述

开始训练

# 训练
# epochs:指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。
# batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。
# cfg:存储模型结构的配置文件
# data:存储训练、测试数据的文件
# img:输入图片宽高,显卡不行就调小点

python train.py --img 640 --batch 16 --epochs 100 --data ./data/phone.yaml --cfg ./models/yolov5x.yaml --weights ./weights/yolov5x.pt --device '0,1' 

开始检测

python detect.py --weights ./runs/train/exp/weights/best.pt --cfg models/yolov5x.yaml --data ./data/phone.yaml --source ./test_image/play_phone.jpg

检测效果

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLOv5是一种目标检测算法,可以用于抽烟行为的检测。它可以通过训练一个模型来识别图像或视频中是否存在抽烟行为,并给出相应的置信度。 以下是使用YOLOv5进行抽烟检测的步骤: 1. 安装YOLOv5:首先,你需要安装YOLOv5。你可以通过以下命令在终端中安装YOLOv5: ```shell git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt ``` 2. 下载预训练权重:YOLOv5提供了一些预训练的权重文件,你可以选择下载适合你的模型的权重文件。你可以在YOLOv5的GitHub页面上找到这些权重文件。 3. 运行检测脚本:使用YOLOv5进行抽烟检测的最简单方法是使用提供的检测脚本。你可以使用以下命令运行检测脚本: ```shell python detect.py --weights <权重文件路径> --img <图像尺寸> --conf <置信度阈值> --source <图像或视频路径> ``` 其中,`<权重文件路径>`是你下载的预训练权重文件的路径,`<图像尺寸>`是输入图像的尺寸,`<置信度阈值>`是判断目标存在的置信度阈值,`<图像或视频路径>`是你要进行抽烟检测的图像或视频的路径。 4. 查看检测结果:运行检测脚本后,YOLOv5会对图像或视频进行抽烟检测,并输出检测结果。你可以查看输出结果,包括检测到的抽烟行为的位置和置信度。 请注意,以上步骤仅提供了使用YOLOv5进行抽烟检测的基本方法。根据你的具体需求,你可能需要进行更多的配置和调整来获得更好的检测效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值