gaitedge细节①数据集

跑完整实验时发现phase1_rec的测试集有些问题,主要还是有分布式训练遗留下来的坑,测试集用的InferenceSampler是把batch切分成一个一个的喂给不同的gpu,导致原本的测试batchsize只能用于labs不能用于seqs
试着照ChatGPT给的方法把它修改成了如下情况依然于事无补

class InferenceSampler(tordata.sampler.Sampler):
    def __init__(self, dataset, batch_size):
        self.dataset = dataset
        self.batch_size = batch_size

        self.size = len(dataset)
        indices = list(range(self.size))



        ########### 修改
        # world_size = dist.get_world_size()
        # rank = dist.get_rank()
        #
        # if batch_size % world_size != 0:
        #     raise ValueError("World size ({}) is not divisible by batch_size ({})".format(
        #         world_size, batch_size))
        ##########################


        if batch_size != 1:
            complement_size = math.ceil(self.size / batch_size) * \
                batch_size
            indices += indices[:(complement_size - self.size)]
            self.size = complement_size

        batch_size_per_rank = self.batch_size # 修改
        # batch_size_per_rank = int(self.batch_size / world_size)
        indx_batch_per_rank = []

        for i in range(int(self.size / batch_size_per_rank)):
            indx_batch_per_rank.append(
                indices[i*batch_size_per_rank:(i+1)*batch_size_per_rank])

        # self.idx_batch_this_rank = indx_batch_per_rank[rank::world_size] 
        self.idx_batch_this_rank = indx_batch_per_rank # 修改

    def __iter__(self):
        yield from self.idx_batch_this_rank

    def __len__(self):
        return len(self.dataset)

不过其实yaml里已经写了这样的话,所以能跑就行吧

Note  : *** the batch_size should be equal to the gpus number at the test phase!!! ***

但是标签可以认batchsize,seqs认不了还是很神秘,所以还是从头捋一遍数据集采样吧

casia-b数据集基本情况

124大类(ID),11小类(视角),10中类(外观差异类型)
每小类类内样本量不定,大体上大于30张(毕竟训练时是有设定每类取30张的→frames_num_fixed: 30)(其实每个大类大体上总共有110张样本,但也有的小于这个数,比如079只有108张,088只有101张,109只有106张)
训练集:前75大类
测试集:后50大类

DataSet

训练集

输入data_cfg

{'dataset_name': 'CASIA-B', 
'dataset_root': '../datasets/CASIA-B-pkl', 'num_workers': 1, 
'dataset_partition': '../datasets/CASIA-B/CASIA-B.json', 
'remove_no_gallery': False, 
'cache': False, 
'test_dataset_name': 'CASIA-B', 
'data_in_use': [True, False, False, False]}
__dataset_parser

遍历所有,得到8107个训练样本的路径和类别计入self.seqs_info
然后再分别填入label_list,types_list,views_list(感觉这段代码写的好像有点冗余)

测试集

5485个测试样本

sampler

训练集-三元

测试集-InferenceSampler

——————————————————————
突然发现源代码这里好像是直接用的casia-b-star,之前还没搞到数据集时我改成casia-b了,所以下面再重新看一遍casia-b-star
(待续)

你可能感兴趣的:(python,深度学习,人工智能)