| import os |
| import time |
|
|
| from data.dataset import TextDataset |
| from models.model import WriteViT
|
| from params import *
|
|
|
| def main():
|
|
|
| init_project() |
|
|
| TextDatasetObj = TextDataset(num_examples = NUM_EXAMPLES)
|
| dataset = torch.utils.data.DataLoader(
|
| TextDatasetObj,
|
| batch_size=batch_size,
|
| shuffle=True,
|
| num_workers=0,
|
| pin_memory=True, drop_last=True,
|
| collate_fn=TextDatasetObj.collate_fn)
|
|
|
| model = WriteViT(backbone=BACKBONE).to(DEVICE) |
|
|
| os.makedirs('saved_models', exist_ok = True)
|
| MODEL_PATH = os.path.join('saved_models', EXP_NAME)
|
| if os.path.isdir(MODEL_PATH) and RESUME:
|
| model.load_state_dict(torch.load(MODEL_PATH+'/model.pth'))
|
| print (MODEL_PATH+' : Model loaded Successfully')
|
| else:
|
| if not os.path.isdir(MODEL_PATH): os.mkdir(MODEL_PATH)
|
|
|
|
|
| for epoch in range(EPOCHS):
|
|
|
|
|
| start_time = time.time()
|
|
|
| for i,data in enumerate(dataset):
|
|
|
| if (i % NUM_CRITIC_GOCR_TRAIN) == 0:
|
|
|
| model._set_input(data)
|
| model.optimize_G_only()
|
| model.optimize_G_step()
|
|
|
| if (i % NUM_CRITIC_DOCR_TRAIN) == 0:
|
|
|
| model._set_input(data)
|
| model.optimize_D_OCR_W()
|
| model.optimize_D_OCR_W_step()
|
|
|
|
|
|
|
| end_time = time.time()
|
|
|
| losses = model.get_current_losses()
|
|
|
| print ({'EPOCH':epoch, 'TIME':end_time-start_time, 'LOSSES': losses}) |
|
|
| if epoch % SAVE_MODEL == 0: torch.save(model.state_dict(), MODEL_PATH+ '/model.pth')
|
| if epoch % SAVE_MODEL_HISTORY == 0: torch.save(model.state_dict(), MODEL_PATH+ '/model'+str(epoch)+'.pth')
|
|
|
|
|
| if __name__ == "__main__":
|
|
|
| main() |
|
|