detalles de la marcha ① Conjunto de datos

Al ejecutar el experimento completo, encontré algunos problemas con el conjunto de prueba de phase1_rec, principalmente debido a las dificultades que quedaron del entrenamiento distribuido. El InferenceSampler utilizado para el conjunto de prueba divide los lotes uno por uno y los alimenta a diferentes GPU, por lo que el solo se puede usar el tamaño del lote de prueba original Debido a que los laboratorios no se pueden usar para secuencias,
intente modificarlo a la siguiente situación de acuerdo con el método proporcionado por ChatGPT, que aún no ayuda

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)

Pero, de hecho, tales palabras se han escrito en yaml, por lo que está bien ejecutar

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

Pero la etiqueta puede reconocer el tamaño del lote, pero aún es muy misterioso que las secuencias no puedan reconocerlo, así que repasemos el muestreo del conjunto de datos desde el principio.

Situación básica del conjunto de datos casia-b

124 categorías principales (ID), 11 subcategorías (puntos de vista) y 10 categorías medias (tipos de diferencia de apariencia). El
número de muestras en cada subcategoría es variable, generalmente más de 30 (después de todo, está configurado para tomar 30 para cada categoría durante el entrenamiento) →frames_num_fixed: 30) (De hecho, cada categoría generalmente tiene un total de 110 muestras, pero algunas son más pequeñas que este número, como 079 solo tiene 108, 088 tiene solo 101, 109 tiene solo 106) conjunto de entrenamiento: las primeras 75 categorías
de
pruebas Colección: Publicar 50 Categorías

conjunto de datos

Conjunto de entrenamiento

datos de entrada_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

Recorra todo, obtenga 8107 rutas y categorías de muestras de capacitación en self.seqs_info
y luego complete label_list, types_list, views_list respectivamente (Creo que este código parece un poco redundante)

equipo de prueba

5485 muestras de prueba

dechado

Set de Entrenamiento - Ternario

Conjunto de prueba - InferenceSampler

—————————————————————————
De repente descubrí que el código fuente aquí parece ser usado directamente casia-b-star, lo cambié a casia antes de obtener el conjunto de datos -b, así que lea casia-b-star nuevamente a continuación
(continuará)

Supongo que te gusta

Origin blog.csdn.net/weixin_40459958/article/details/130078635
Recomendado
Clasificación