bodymocap/train/eftFitter.py [1037:1263]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        train_data_loader = CheckpointDataLoader(self.train_ds,checkpoint=self.checkpoint,
                                                    batch_size=1,       #Always o1
                                                    num_workers=self.options.num_workers,
                                                    pin_memory=self.options.pin_memory,
                                                    shuffle=False)      #No Shuffle      
        
        maxExemplarIter = self.options.maxExemplarIter
       
        # Iterate over all batches in an epoch
        outputList ={}
        for step, batch in enumerate(tqdm(train_data_loader)):#, desc='Epoch '+str(epoch),
                                        #     total=len(self.train_ds) // self.options.batch_size,
                                        #     initial=train_data_loader.checkpoint_batch_idx),
                                        # train_data_loader.checkpoint_batch_idx):
            
            #3DPW test
            # if 'downtown_bus_00' not in batch['imgname']:
            #     continue

            #Only performed for 1/100 data (roughly hundred level)
            if self.options.bExemplar_analysis_testloss:
                sampleIdx = batch['sample_index'][0].item()
                if sampleIdx%100 !=0:
                    continue
            
            if self.options.bExemplar_badsample_finder:
                sampleIdx = batch['sample_index'][0].item()
                # if sampleIdx%100 !=0:
                #     continue

            bSkipExisting  =  self.options.bNotSkipExemplar==False     #bNotSkipExemplar ===True --> bSkipExisting==False
            if bSkipExisting:
                if self.options.db_set =='panoptic':
                    # fileNameOnly = os.path.basename(output['imageName'][0])[:-4]
                    # fileNameOnly = (batch['pkl_save_name'][0])[:-4].replace("/","-")

                    sampleIdx = batch['sample_index'][0].item()
                    if self.options.bExemplar_dataLoaderStart>=0:
                        sampleIdx +=self.options.bExemplar_dataLoaderStart

                    sampleIdxSaveFrame = 100* (int(sampleIdx/100.0) + 1)
                    
                    fileName = '{:08d}.pkl'.format(sampleIdxSaveFrame)

                    outputPath = os.path.join(exemplarOutputPath,fileName)
                    # print(">> checking: {}".format(outputPath))
                    if os.path.exists(outputPath):
                        print("Skipped: {}".format(outputPath))
                        continue
                elif '3dpw' in self.options.db_set:

                    fileNameOnly = os.path.basename(batch['imgname'][0])[:-4]
                    seqName = os.path.basename(os.path.dirname(batch['imgname'][0]))
                    fileNameOnly = f"{seqName}_{fileNameOnly}"

                    sampleIdx = batch['sample_index'][0].item()
                    if self.options.bExemplar_dataLoaderStart>=0:
                        sampleIdx +=self.options.bExemplar_dataLoaderStart
                    fileName = '{}_{}.pkl'.format(fileNameOnly,sampleIdx)
                    outputPath = os.path.join(exemplarOutputPath,fileName)
                    if os.path.exists(outputPath):
                        print("Skipped: {}".format(outputPath))
                        continue
                else:
                    fileNameOnly = os.path.basename(batch['imgname'][0])[:-4]
                    sampleIdx = batch['sample_index'][0].item()
                    if self.options.bExemplar_dataLoaderStart>=0:
                        sampleIdx +=self.options.bExemplar_dataLoaderStart
                    fileName = '{}_{}.pkl'.format(fileNameOnly,sampleIdx)
                    outputPath = os.path.join(exemplarOutputPath,fileName)
                    if os.path.exists(outputPath):
                        print("Skipped: {}".format(outputPath))
                        continue
                    
            g_timer.tic()
            self.reloadModel()  #For each sample


            #Freeze non resnet part model
            if self.options.ablation_layerteset_onlyLayer4:
                # self.model.conv1.requires_grad = False
                # self.model.bn1.requires_grad = False
                # self.model.relu.requires_grad = False
                # self.model.maxpool.requires_grad = False
                # self.model.layer1.requires_grad = False
                # self.model.layer2.requires_grad = False
                # self.model.layer3.requires_grad = False
                # self.model.layer4.requires_grad = False
                # self.model.fc1.requires_grad = False
                # self.model.drop1.requires_grad = False
                # self.model.fc2.requires_grad = False
                # self.model.drop2.requires_grad = False
                # self.model.decpose.requires_grad = False
                # self.model.decshape.requires_grad = False
                # self.model.deccam.requires_grad = False
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():      #Optimize Layer 4 of resnet
                    # print(name)
                    # if 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                    #     print(f"activate {name}")
                    #     par.requires_grad = True
                    if 'layer4' in name:
                        # print(f">>  Activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_onlyAfterRes:   #Optimize  HMR FC part
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True
            
            if self.options.ablation_layerteset_Layer4Later:        #Optimize Layer 4 of resent +  HMR FC part
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True
            
            if self.options.ablation_layerteset_onlyRes:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            
            if self.options.ablation_layerteset_Layer3Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer3' in name or 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_Layer2Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer2' in name or 'layer3' in name or 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_Layer1Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer1' in name or 'layer2' in name or 'layer3' in name or 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_all:    #No Freeze. debugging purpose
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'conv1' in name or 'layer' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_onlyRes_withconv1:      #Only use ResNet. Freeze HMR part all
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'conv1' in name or 'layer' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True


            if self.options.ablation_layerteset_decOnly:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True


            if self.options.ablation_layerteset_fc2Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'fc2' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True


            #Freeze all except the last layer of Resnet
            if self.options.ablation_layerteset_onlyRes50LastConv:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer4.2.conv3' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True
            

            # g_timer.toc(average =False, bPrint=True,title="reload")
            # self.exemplerTrainingMode()

            batch = {k: v.to(self.device) if isinstance(v, torch.Tensor) else v for k,v in batch.items()}

            output_backup={}
            for it in range(maxExemplarIter):
                

                ##########################################################################################
                ##### RUN EFT
                ##########################################################################################
                # g_timer.tic()
                if self.options.bUseHand3D:
                    output, losses = self.run_eft_step_wHand(batch)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



eft/train/eftFitter.py [1320:1550]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        train_data_loader = CheckpointDataLoader(self.train_ds,checkpoint=self.checkpoint,
                                                    batch_size=1,       #Always o1
                                                    num_workers=self.options.num_workers,
                                                    pin_memory=self.options.pin_memory,
                                                    shuffle=False)      #No Shuffle      
        
        maxExemplarIter = self.options.maxExemplarIter
       
        # Iterate over all batches in an epoch
        outputList ={}
        for step, batch in enumerate(tqdm(train_data_loader)):#, desc='Epoch '+str(epoch),
                                        #     total=len(self.train_ds) // self.options.batch_size,
                                        #     initial=train_data_loader.checkpoint_batch_idx),
                                        # train_data_loader.checkpoint_batch_idx):
            
            #3DPW test
            # if 'downtown_bus_00' not in batch['imgname']:
            #     continue

            #Only performed for 1/100 data (roughly hundred level)
            if self.options.bExemplar_analysis_testloss:
                sampleIdx = batch['sample_index'][0].item()
                if sampleIdx%100 !=0:
                    continue
            
            if self.options.bExemplar_badsample_finder:
                sampleIdx = batch['sample_index'][0].item()
                # if sampleIdx%100 !=0:
                #     continue

            # if self.options.bDebug_visEFT and self.options.bUseHand2D:
            #     is_valid = sum(batch['kp_leftHand_gt'][0,:,2]).clone().detach().cpu().numpy().item() + sum(batch['kp_rightHand_gt'][0,:,2]).clone().detach().cpu().numpy().item()
            #     if is_valid<0.1:
            #         continue

            bSkipExisting  =  self.options.bNotSkipExemplar==False     #bNotSkipExemplar ===True --> bSkipExisting==False
            if bSkipExisting:
                if self.options.db_set =='panoptic':
                    # fileNameOnly = os.path.basename(output['imageName'][0])[:-4]
                    # fileNameOnly = (batch['pkl_save_name'][0])[:-4].replace("/","-")

                    sampleIdx = batch['sample_index'][0].item()
                    if self.options.bExemplar_dataLoaderStart>=0:
                        sampleIdx +=self.options.bExemplar_dataLoaderStart

                    sampleIdxSaveFrame = 100* (int(sampleIdx/100.0) + 1)
                    
                    fileName = '{:08d}.pkl'.format(sampleIdxSaveFrame)

                    outputPath = os.path.join(exemplarOutputPath,fileName)
                    # print(">> checking: {}".format(outputPath))
                    if os.path.exists(outputPath):
                        print("Skipped: {}".format(outputPath))
                        continue
                elif '3dpw' in self.options.db_set:

                    fileNameOnly = os.path.basename(batch['imgname'][0])[:-4]
                    seqName = os.path.basename(os.path.dirname(batch['imgname'][0]))
                    fileNameOnly = f"{seqName}_{fileNameOnly}"

                    sampleIdx = batch['sample_index'][0].item()
                    if self.options.bExemplar_dataLoaderStart>=0:
                        sampleIdx +=self.options.bExemplar_dataLoaderStart
                    fileName = '{}_{}.pkl'.format(fileNameOnly,sampleIdx)
                    outputPath = os.path.join(exemplarOutputPath,fileName)
                    if os.path.exists(outputPath):
                        print("Skipped: {}".format(outputPath))
                        continue
                else:
                    fileNameOnly = os.path.basename(batch['imgname'][0])[:-4]
                    sampleIdx = batch['sample_index'][0].item()
                    if self.options.bExemplar_dataLoaderStart>=0:
                        sampleIdx +=self.options.bExemplar_dataLoaderStart
                    fileName = '{}_{}.pkl'.format(fileNameOnly,sampleIdx)
                    outputPath = os.path.join(exemplarOutputPath,fileName)
                    if os.path.exists(outputPath):
                        print("Skipped: {}".format(outputPath))
                        continue
                    
            g_timer.tic()
            self.reloadModel()  #For each sample


            #Freeze non resnet part model
            if self.options.ablation_layerteset_onlyLayer4:
                # self.model.conv1.requires_grad = False
                # self.model.bn1.requires_grad = False
                # self.model.relu.requires_grad = False
                # self.model.maxpool.requires_grad = False
                # self.model.layer1.requires_grad = False
                # self.model.layer2.requires_grad = False
                # self.model.layer3.requires_grad = False
                # self.model.layer4.requires_grad = False
                # self.model.fc1.requires_grad = False
                # self.model.drop1.requires_grad = False
                # self.model.fc2.requires_grad = False
                # self.model.drop2.requires_grad = False
                # self.model.decpose.requires_grad = False
                # self.model.decshape.requires_grad = False
                # self.model.deccam.requires_grad = False
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():      #Optimize Layer 4 of resnet
                    # print(name)
                    # if 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                    #     print(f"activate {name}")
                    #     par.requires_grad = True
                    if 'layer4' in name:
                        # print(f">>  Activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_onlyAfterRes:   #Optimize  HMR Decoder part
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True
            
            if self.options.ablation_layerteset_Layer4Later:        #Optimize Layer 4 of resent +  HMR FC part
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True
            
            if self.options.ablation_layerteset_onlyRes:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            
            if self.options.ablation_layerteset_Layer3Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer3' in name or 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_Layer2Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer2' in name or 'layer3' in name or 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_Layer1Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer1' in name or 'layer2' in name or 'layer3' in name or 'layer4' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_all:    #No Freeze. debugging purpose
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'conv1' in name or 'layer' in name or 'fc' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True

            if self.options.ablation_layerteset_onlyRes_withconv1:      #Only use ResNet. Freeze HMR part all
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'conv1' in name or 'layer' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True


            if self.options.ablation_layerteset_decOnly:    #Optimize the last layer of hmr decoder
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True


            if self.options.ablation_layerteset_fc2Later:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'fc2' in name or 'decpose' in name or 'decshape' in name or 'deccam' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True


            #Freeze all except the last layer of Resnet
            if self.options.ablation_layerteset_onlyRes50LastConv:
                for par in self.model.parameters():
                    par.requires_grad = False

                for name, par in self.model.named_parameters():
                    if 'layer4.2.conv3' in name:
                        # print(f"activate {name}")
                        par.requires_grad = True
            

            # g_timer.toc(average =False, bPrint=True,title="reload")
            # self.exemplerTrainingMode()

            batch = {k: v.to(self.device) if isinstance(v, torch.Tensor) else v for k,v in batch.items()}

            output_backup={}
            for it in range(maxExemplarIter):

                ##########################################################################################
                ##### RUN EFT
                ##########################################################################################
                # g_timer.tic()
                if self.options.bUseHand3D:
                    output, losses = self.run_eft_step_wHand(batch)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



