YOLO4源码理解(1)random.seed()的理解+++random.sample()和numpy.random.choice() 的比较

凯哥英语视频
1 random.seed()–在代码第15行(代码在最底部)
random.seed() 会改变随机生成器的种子;传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;如果不设置这个值,则系统会根据时间来自己选择这个值,此时每次生成的随机数会因时间的差异而有所不同。
2 random.sample()和numpy.random.choice() 的比较–在代码第38行(代码在最底部)
一次性从列表中不重复地抽样出指定个数的元素,其中 random.sample()默认就是不重复抽样(不放回的抽样),而numpy.random.choice()默认是可以重复抽样,要想不重复地抽样,需要设置replace参数为False
import random
import numpy as np

a = [i for i in range(20)]

b = np.random.choice(a, 10, replace=False)

c = random.sample(a, 10)

print('b', b)
print('c', c)

# b [ 4  0  6 18 14 19  3 15 11  5]
# c [4, 18, 12, 0, 3, 16, 2, 1, 17, 11]
numpy.random.choice()抽样方法的时间几乎不会随着抽样数量的变化而变化,而random.sample() 会随着抽样数量的增加而增加。所以当数量较少的时候,random.sample() 用时非常少,而numpy.random.choice()则很长;当抽样数量很大的时候,numpy.random.choice()几乎不变,而random.sample() 用时变长。

在这里插入图片描述

voc2yolo4.py文件如下
#----------------------------------------------------------------------#
#   验证集的划分在train.py代码里面进行
#   test.txt和val.txt里面没有内容是正常的。训练不会使用到。
#----------------------------------------------------------------------#
'''
#--------------------------------注意----------------------------------#
如果在pycharm中运行时提示:
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: './VOCdevkit/VOC2007/Annotations'
这是pycharm运行目录的问题,最简单的方法是将该文件复制到根目录后运行。
可以查询一下相对目录和根目录的概念。在VSCODE中没有这个问题。
#--------------------------------注意----------------------------------#
'''
import os
import random 
random.seed(0)

# xmlfilepath = r'./VOCdevkit/VOC2007/Annotations'
xmlfilepath = 'Annotations'
# saveBasePath = r"./VOCdevkit/VOC2007/ImageSets/Main/"
saveBasePath = 'ImageSets\Main\\'
#----------------------------------------------------------------------#
#   想要增加测试集修改trainval_percent
#   train_percent不需要修改
#----------------------------------------------------------------------#
trainval_percent = 1
train_percent = 1

temp_xml = os.listdir(xmlfilepath)
total_xml = []
for xml in temp_xml:
    if xml.endswith(".xml"):
        total_xml.append(xml)

num = len(total_xml)
list = range(num)
tv = int(num*trainval_percent)
tr = int(tv*train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
 
print("train and val size", tv)
print("traub suze", tr)
ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w')  
ftest = open(os.path.join(saveBasePath,'test.txt'), 'w')  
ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w')  
fval = open(os.path.join(saveBasePath,'val.txt'), 'w')  
 
for i in list:
    name = total_xml[i][:-4]+'\n'
    if i in trainval:  
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)  
        else:
            fval.write(name)  
    else:
        ftest.write(name)  
  
ftrainval.close()  
ftrain.close()
fval.close()
ftest.close()

别的也没啥说的

ok,那就这样吧~

欢迎各位大佬留言吐槽,也可以深入交流~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

justwaityou1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值