Yolov5 训练自己的数据集 - 识别螺丝

一. 准备自己的数据集

准备好自己的所需要的图片,使用labelme对图片进行标注

1. labelme的安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple labelme

使用上述命令安装labelme,安装源使用清华源。

2. labelme使用介绍

步骤1:在命令行执行labelme命令打开软件

步骤2:打开图片文件夹

步骤3:点击edit选择图形对目标进行标注,在这里我使用圆进行标注

步骤4:输入目标的标签,可用数字代替

步骤5:保存

步骤6:点击下一张图片

3.labelme生成的json文件介绍

4.处理数据集

按照yolov5的数据集目录结构存放图片和标签数据:

datasets
|--images
|--labels

images:存放图片

labels:存放标注的label数据

yolov5的label数据格式是txt文件,且需要满足一定的格式,如下所示:

0 0.284268465909091 0.4578302556818182 0.2331680030387468 0.2914600037984335
|         |____________________|               |                   |
类别              中心点坐标                   矩形宽               矩形高

基于以上格式,所以需要将label生成的json文件转换成以上格式的txt文件。

另外由于我标注的是圆,但yolov5是按照矩形框进行训练的,所以还需要将圆形转换成矩形,根据圆的半径画一个圆的外切正方形。

转换的代码如下:

import json
import os
import math

file_names = os.listdir('./')
#遍历目录下所有文件
for filename in file_names:
    #处理json文件
    if ".json" in filename:
        #读取文件
        file = open(filename, 'rb')
        data = json.loads(file.read())
        shapes = data["shapes"][0]
        label = shapes["label"]
        point0 = shapes["points"][0]
        point1 = shapes["points"][1]
        file.close()

        #获取两个点的坐标
        x1 = point0[0]
        y1 = point0[1]
        x2 = point1[0]
        y2 = point1[1]
        
        #txt文件名保持和图片名相同
        newfilename_1 = filename[0:-5]
        newfilename_2 = ".txt"
        print(newfilename_1+newfilename_2)
        #保存到../labels/目录
        textfile = open("../labels/"+newfilename_1+newfilename_2, 'w')
        
        #计算半径
        c_r = math.sqrt(pow((x2-x1),2)+pow(y2-y1,2))
        c_r = 2*c_r #直径
        #拼接数据,并做归一化处理,图片大小640x512
        data_str = str(label) + " " + str(x1/640.0) + " " + str(y1/512.0) + " " + str(c_r/640.0) + " " + str(c_r/512.0)
        print(label, x1/640.0, y1/512.0,c_r/640.0,c_r/512.0)
        #保存文件
        textfile.write(data_str)
        textfile.close()
        

以上就得到了一个完整的数据集

二. 修改数据集配置文件

可以直接复制yolov5/data/coco128.yaml文件,并修改内容,如下所示:

# YOLOv5  by Ultralytics, GPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: python train.py --data mydata.yaml
# parent
# ├── yolov5
# └── datasets
#     └── images
#     |—— labels


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets  # dataset root dir
train: images  # train images (relative to 'path') 128 images
val: images  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
names:
  0: luosi

因为我只有一个类别,所以names下只有一种。

三. 训练数据集

python3 train.py --img 640 --batch 16 --epochs 5 --data data/mydata.yaml --cfg models/yolov5s.yaml

四. 使用自己的训练的模型进行推理

python3 detect.py --weights runs/train/exp6/weights/best.pt --source ../N_609.jpg --data data/mydata.yaml

训练推理两步具体可以参考Yolov5训练数据集-入门篇-CSDN博客

推理结果如下:

图片资源https://download.csdn.net/download/u010492025/88529074

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
螺丝和螺母是机械工程中常见的紧固件,用于连接两个物体或零件。螺丝一般为长形的金属杆,上面有螺纹,螺母则是与螺丝相配的零件,也有螺纹。螺丝是通过将其螺纹插入两个物体的孔中,然后用螺丝刀等工具旋转以达到紧固效果的。而螺母则是配合螺丝使用,通过将其螺纹与螺丝的螺纹相匹配,用手或工具旋转以紧固螺丝。螺母的形状多种多样,可根据需要选择合适的类型。 螺丝和螺母数据集可以用于机械工程设计、制造和维修等领域的研究。通过对螺丝和螺母进行测量、分析和建模,可以提供各种方面的数据和信息,如尺寸、形状、材料、强度等。这些数据可以用于设计新的螺丝和螺母,选择合适的螺丝和螺母类型,或者进行产品的质量检测和质量控制等。 螺丝和螺母数据集还可以用于机械装配和拆卸的模拟和优化。通过收集和分析大量的螺丝和螺母数据,可以研究螺丝和螺母的装配和拆卸过程,找到最佳的装配力和拆卸力,提高装配质量和效率,减少人力成本。 此外,螺丝和螺母数据集还可以用于教育和培训目的。通过提供实际的螺丝和螺母数据,可以帮助学习者了解螺丝和螺母的结构、功能和应用,培养其在机械工程领域的技能和知识。 总之,螺丝和螺母数据集对于机械工程领域的研究和应用具有重要的意义,可以为工程设计、装配优化和教育培训等提供有价值的数据和信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老夫是子龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值