概述
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芯片引脚所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复