利用YOLOv5尝试进行口罩识别,在网上下载了口罩的数据集,为了制作训练集和验证集,需要从整体数据中随机选取一定比例的图片,并放至val文件夹中,同时图像标注的结果也要相应的放至在labels文件夹中。
1 创建文件目录
在data文件夹下新建数据文件mask_data,mask_data文件下新建images和labels两个文件夹,文件夹内容如下:
- images
- train -----放训练图片, 将下载的口罩数据集图片放入这里
- val -----放验证图片
- labels —图像标注后的结果存放在这里
- train -----放训练label, 将下载的口罩数据集图片对应的结果放入这里
- val -----放验证label
2 随机选取一定比例的图片放入val文件夹
方法参考了这位博主的文章python随机选取10000张图片并复制到另一个文件夹中,在这里记录一下。
import os, random, shutil
def moveFile(fileDir, tarDir):
pathDir = os.listdir(fileDir) # 原始图片的路径
filenumber = len(pathDir)
rate = 0.2 # 选取图片的比例,这里我的训练集和验证集数据量比例为4:1,即抽取比例为0.2
picknumber = int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
print(sample)
for name in sample:
shutil.move(fileDir + name, tarDir + "\\" + name)
return
if __name__ == '__main__':
fileDir = r"F:\facemask_detect\data\mask_data\images\train" + "\\" # 原始图片文件夹路径
tarDir = r'F:\facemask_detect\data\mask_data\images\val' # 移动到新的文件夹路径
moveFile(fileDir, tarDir)
3 将images\val中同名的txt文件放入labels\val中
找出labels/train文件夹中与images/val文件夹中同名的txt文件,作为验证集的标签放到labels\val中,方法参考了这位博主python实现取出某个文件夹A中与另外一个文件夹B图片中相同名字的txt文件放到C文件夹下。
import os,shutil
file_root = r'F:\facemask_detect\data\mask_data\images\val' # images\val文件夹路径
file_list = os.listdir(file_root)
for i in file_list:
if i.endswith('.jpg'):
filename = r'F:\facemask_detect\data\mask_data\labels\train' + "\\" + i[:-4] + '.txt'
print(os.path.exists(filename))
if os.path.exists(filename):
shutil.move(filename, r'F:\facemask_detect\data\mask_data\labels\val')#需要保存的位置,labels\val文件夹路径