• yolov5训练flash芯片引脚


    1、利用labelimg打标签

    labeling安装:
    pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
    VOC2007的目录结构为:
    1. ├── VOC2007
    2. │├── images 存放需要打标签的图片文件
    3. │├── YOLOLabels 存放标注的标签文件
    4. │├──predict.txt 定义自己要标注的所有类别
    然后在 predict.txt 这个txt文档里面输入定义的类别种类,如下图所示。
    输入如下的命令打开labelimg工具,打开image文件夹,初始化predict.txt里面定义的类。
    labelimg images predict.txt
    运行如上的命令就会打开这个工具,如下:
    标签打完以后可以去YOLOLabels 文件下看到标签文件已经保存在这个目录下

    2、将数据集划分为训练集与验证集

    二八原则划分:
    1. import xml.etree.ElementTree as ET
    2. import pickle
    3. import os
    4. from os import listdir, getcwd
    5. from os.path import join
    6. import random
    7. from shutil import copyfile
    8. TRAIN_RATIO = 80
    9. def clear_hidden_files(path):
    10. dir_list = os.listdir(path)
    11. for i in dir_list:
    12. abspath = os.path.join(os.path.abspath(path), i)
    13. if os.path.isfile(abspath):
    14. if i.startswith("._"):
    15. os.remove(abspath)
    16. else:
    17. clear_hidden_files(abspath)
    18. wd = os.getcwd()
    19. data_base_dir = os.path.join(wd, "VOCflash/")
    20. if not os.path.isdir(data_base_dir):
    21. os.mkdir(data_base_dir)
    22. work_sapce_dir = os.path.join(data_base_dir, "VOC2007/")
    23. if not os.path.isdir(work_sapce_dir):
    24. os.mkdir(work_sapce_dir)
    25. image_dir = os.path.join(work_sapce_dir, "images/")
    26. if not os.path.isdir(image_dir):
    27. os.mkdir(image_dir)
    28. clear_hidden_files(image_dir)
    29. yolo_labels_dir = os.path.join(work_sapce_dir, "YOLOLabels/")
    30. if not os.path.isdir(yolo_labels_dir):
    31. os.mkdir(yolo_labels_dir)
    32. clear_hidden_files(yolo_labels_dir)
    33. yolov5_images_dir = os.path.join(data_base_dir, "images/")
    34. if not os.path.isdir(yolov5_images_dir):
    35. os.mkdir(yolov5_images_dir)
    36. clear_hidden_files(yolov5_images_dir)
    37. yolov5_labels_dir = os.path.join(data_base_dir, "labels/")
    38. if not os.path.isdir(yolov5_labels_dir):
    39. os.mkdir(yolov5_labels_dir)
    40. clear_hidden_files(yolov5_labels_dir)
    41. yolov5_images_train_dir = os.path.join(yolov5_images_dir, "train/")
    42. if not os.path.isdir(yolov5_images_train_dir):
    43. os.mkdir(yolov5_images_train_dir)
    44. clear_hidden_files(yolov5_images_train_dir)
    45. yolov5_images_test_dir = os.path.join(yolov5_images_dir, "val/")
    46. if not os.path.isdir(yolov5_images_test_dir):
    47. os.mkdir(yolov5_images_test_dir)
    48. clear_hidden_files(yolov5_images_test_dir)
    49. yolov5_labels_train_dir = os.path.join(yolov5_labels_dir, "train/")
    50. if not os.path.isdir(yolov5_labels_train_dir):
    51. os.mkdir(yolov5_labels_train_dir)
    52. clear_hidden_files(yolov5_labels_train_dir)
    53. yolov5_labels_test_dir = os.path.join(yolov5_labels_dir, "val/")
    54. if not os.path.isdir(yolov5_labels_test_dir):
    55. os.mkdir(yolov5_labels_test_dir)
    56. clear_hidden_files(yolov5_labels_test_dir)
    57. train_file = open(os.path.join(wd, "yolov5_train.txt"), 'w')
    58. test_file = open(os.path.join(wd, "yolov5_val.txt"), 'w')
    59. train_file.close()
    60. test_file.close()
    61. train_file = open(os.path.join(wd, "yolov5_train.txt"), 'a')
    62. test_file = open(os.path.join(wd, "yolov5_val.txt"), 'a')
    63. list_imgs = os.listdir(image_dir) # list image files
    64. prob = random.randint(1, 100)
    65. print("Probability: %d" % prob)
    66. for i in range(0, len(list_imgs)):
    67. path = os.path.join(image_dir,list_imgs[i])
    68. if os.path.isfile(path):
    69. image_path = image_dir + list_imgs[i]
    70. voc_path = list_imgs[i]
    71. (nameWithoutExtention, extention) = os.path.splitext(os.path.basename(image_path))
    72. (voc_nameWithoutExtention, voc_extention) = os.path.splitext(os.path.basename(voc_path))
    73. label_name = nameWithoutExtention + '.txt'
    74. label_path = os.path.join(yolo_labels_dir, label_name)
    75. prob = random.randint(1, 100)
    76. print("Probability: %d" % prob)
    77. if(prob < TRAIN_RATIO): # train dataset
    78. train_file.write(image_path + '\n')
    79. copyfile(image_path, yolov5_images_train_dir + voc_path)
    80. copyfile(label_path, yolov5_labels_train_dir + label_name)
    81. else: # test dataset
    82. test_file.write(image_path + '\n')
    83. copyfile(image_path, yolov5_images_test_dir + voc_path)
    84. copyfile(label_path, yolov5_labels_test_dir + label_name)
    85. train_file.close()
    86. test_file.close()
    结果:

    3、使用yolov5训练模型

    3.1、yolov5项目

    GitHub - ultralytics/yolov5 at v5.0克隆开源项目yolov5的代码,注意选择tag:v5.0分支
    项目结构:

    3.2、获得预训练权重

    为缩短网络的训练时间,并达到更好的精度,一般加载预训练权重进行网络的训练。yolov5的5.0版本给我们提供了几个预训练权重,我们可以对应我们不同的需求选择不同的版本的预训练权重。 预训练权重可以通过这个 网址 进行下载 ,本次训练自己的数据集用的预训练权重为 yolov5s.pt

    3.3、修改配置文件

    3.3.1、修改数据配置文件
    修改data目录下的相应的yaml文件。找到目录下的voc.yaml文件,将该文件复制一份,将复制的文件重命名,最好和项目相关,这样方便后面操作。我这里修改为flash.yaml。该项目是对芯片引脚的识别。
    3.3.2、修改模型配置文件
    由于该项目使用的是yolov5s.pt这个预训练权重,所以要使用models目录下的yolov5s.yaml文件中的相应参数(因为不同的预训练权重对应着不同的网络层数,所以用错预训练权重会报错)。同上修改data目录下的yaml文件一样,将yolov5s.yaml文件复制一份,然后将其重命名为 yolov5s_flash.yaml
    只需要修改如图中的数字就好了,这里是识别四个类别:

    3.4、开始yolov5训练

    修改train.py文件,主要修改weights权重路径、models模型路径、数据配置文件路径、轮询次数、是否使用GPU、模型保存位置
    运行:

    3.5、启用tensorbord查看参数

    打开pycharm的terminal,输入“tensorboard --logdir=runs/train”:
     如下图所示,这是已经训练了1000轮了:
    等待训练完成:
    会在主目录下产生一个run文件夹,在run/train/flash/weights/目录下会产生两个权重文件,一个是最后一轮的权重文件last.pt,一个是最好的权重文件best.pt。

    4、使用训练好的模型推理验证

    run/train/flash/weights/best.pt复制到weights/目录下,重命名为flash_best.pt;
    在data/images目录下准备测试图片;
    修改主目录下的detect.py:
     推理测试结束以后,在run下面会生成一个detect目录,推理结果会保存在flash目录下:
    图片的推理结果如下所示:
        
  • 相关阅读:
    OC-编译错误
    SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.20 ActiveMQ 安装
    Vue首次使用Element
    Java技术栈 —— 模版引擎 Freemarker or Thymeleaf?
    Spring @Transactional 原理解析
    再也不想去阿里巴巴面试了,6年测开面试遭到这样打击.....
    【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范
    基于 selenium 实现网站图片采集
    mysql安装
    【Yann LeCun点赞B站UP主使用Minecraft制作的红石神经网络】
  • 原文地址:https://blog.csdn.net/leiwuhen92/article/details/126887061