1、利用labelimg打标签
labeling安装:
复制代码
1pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
VOC2007的目录结构为:
复制代码
1
2
3
4├── VOC2007 │├── images 存放需要打标签的图片文件 │├── YOLOLabels 存放标注的标签文件 │├──predict.txt 定义自己要标注的所有类别
然后在 predict.txt 这个txt文档里面输入定义的类别种类,如下图所示。

输入如下的命令打开labelimg工具,打开image文件夹,初始化predict.txt里面定义的类。
复制代码
1labelimg images predict.txt
运行如上的命令就会打开这个工具,如下:

标签打完以后可以去YOLOLabels 文件下看到标签文件已经保存在这个目录下

2、将数据集划分为训练集与验证集
二八原则划分:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96import 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芯片引脚内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复