我是靠谱客的博主 平常彩虹,最近开发中收集的这篇文章主要介绍yolov5训练flash芯片引脚,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、利用labelimg打标签

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

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

二八原则划分:
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
import random
from shutil import copyfile

TRAIN_RATIO = 80


def clear_hidden_files(path):
    dir_list = os.listdir(path)
    for i in dir_list:
        abspath = os.path.join(os.path.abspath(path), i)
        if os.path.isfile(abspath):
            if i.startswith("._"):
                os.remove(abspath)
        else:
            clear_hidden_files(abspath)


wd = os.getcwd()
data_base_dir = os.path.join(wd, "VOCflash/")
if not os.path.isdir(data_base_dir):
    os.mkdir(data_base_dir)
work_sapce_dir = os.path.join(data_base_dir, "VOC2007/")
if not os.path.isdir(work_sapce_dir):
    os.mkdir(work_sapce_dir)

image_dir = os.path.join(work_sapce_dir, "images/")
if not os.path.isdir(image_dir):
        os.mkdir(image_dir)
clear_hidden_files(image_dir)
yolo_labels_dir = os.path.join(work_sapce_dir, "YOLOLabels/")
if not os.path.isdir(yolo_labels_dir):
        os.mkdir(yolo_labels_dir)
clear_hidden_files(yolo_labels_dir)
yolov5_images_dir = os.path.join(data_base_dir, "images/")
if not os.path.isdir(yolov5_images_dir):
        os.mkdir(yolov5_images_dir)
clear_hidden_files(yolov5_images_dir)
yolov5_labels_dir = os.path.join(data_base_dir, "labels/")
if not os.path.isdir(yolov5_labels_dir):
        os.mkdir(yolov5_labels_dir)
clear_hidden_files(yolov5_labels_dir)
yolov5_images_train_dir = os.path.join(yolov5_images_dir, "train/")
if not os.path.isdir(yolov5_images_train_dir):
        os.mkdir(yolov5_images_train_dir)
clear_hidden_files(yolov5_images_train_dir)
yolov5_images_test_dir = os.path.join(yolov5_images_dir, "val/")
if not os.path.isdir(yolov5_images_test_dir):
        os.mkdir(yolov5_images_test_dir)
clear_hidden_files(yolov5_images_test_dir)
yolov5_labels_train_dir = os.path.join(yolov5_labels_dir, "train/")
if not os.path.isdir(yolov5_labels_train_dir):
        os.mkdir(yolov5_labels_train_dir)
clear_hidden_files(yolov5_labels_train_dir)
yolov5_labels_test_dir = os.path.join(yolov5_labels_dir, "val/")
if not os.path.isdir(yolov5_labels_test_dir):
        os.mkdir(yolov5_labels_test_dir)
clear_hidden_files(yolov5_labels_test_dir)

train_file = open(os.path.join(wd, "yolov5_train.txt"), 'w')
test_file = open(os.path.join(wd, "yolov5_val.txt"), 'w')
train_file.close()
test_file.close()
train_file = open(os.path.join(wd, "yolov5_train.txt"), 'a')
test_file = open(os.path.join(wd, "yolov5_val.txt"), 'a')
list_imgs = os.listdir(image_dir) # list image files
prob = random.randint(1, 100)
print("Probability: %d" % prob)
for i in range(0, len(list_imgs)):
    path = os.path.join(image_dir,list_imgs[i])
    if os.path.isfile(path):
        image_path = image_dir + list_imgs[i]
        voc_path = list_imgs[i]
        (nameWithoutExtention, extention) = os.path.splitext(os.path.basename(image_path))
        (voc_nameWithoutExtention, voc_extention) = os.path.splitext(os.path.basename(voc_path))

        label_name = nameWithoutExtention + '.txt'
        label_path = os.path.join(yolo_labels_dir, label_name)

    prob = random.randint(1, 100)
    print("Probability: %d" % prob)
    if(prob < TRAIN_RATIO): # train dataset
            train_file.write(image_path + 'n')
            copyfile(image_path, yolov5_images_train_dir + voc_path)
            copyfile(label_path, yolov5_labels_train_dir + label_name)
    else: # test dataset
            test_file.write(image_path + 'n')
            copyfile(image_path, yolov5_images_test_dir + voc_path)
            copyfile(label_path, yolov5_labels_test_dir + label_name)
train_file.close()
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目录下:
图片的推理结果如下所示:
    

最后

以上就是平常彩虹为你收集整理的yolov5训练flash芯片引脚的全部内容,希望文章能够帮你解决yolov5训练flash芯片引脚所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部