|
@@ -5,6 +5,7 @@ from datetime import datetime
|
|
|
import numpy as np
|
|
import numpy as np
|
|
|
import torch
|
|
import torch
|
|
|
from matplotlib import pyplot as plt
|
|
from matplotlib import pyplot as plt
|
|
|
|
|
+from torch.optim.lr_scheduler import StepLR, ReduceLROnPlateau
|
|
|
from torch.utils.tensorboard import SummaryWriter
|
|
from torch.utils.tensorboard import SummaryWriter
|
|
|
|
|
|
|
|
from libs.vision_libs.utils import draw_bounding_boxes, draw_keypoints
|
|
from libs.vision_libs.utils import draw_bounding_boxes, draw_keypoints
|
|
@@ -263,17 +264,23 @@ class Trainer(BaseTrainer):
|
|
|
|
|
|
|
|
optimizer = torch.optim.Adam(
|
|
optimizer = torch.optim.Adam(
|
|
|
filter(lambda p: p.requires_grad, model.parameters()),
|
|
filter(lambda p: p.requires_grad, model.parameters()),
|
|
|
- lr=kwargs['train_params']['optim']['lr']
|
|
|
|
|
|
|
+ lr=kwargs['train_params']['optim']['lr'],
|
|
|
|
|
+ weight_decay=kwargs['train_params']['optim']['weight_decay'],
|
|
|
|
|
+
|
|
|
)
|
|
)
|
|
|
|
|
+ # scheduler = StepLR(optimizer, step_size=10, gamma=0.1)
|
|
|
|
|
+ scheduler = ReduceLROnPlateau(optimizer, 'min', patience=30)
|
|
|
|
|
|
|
|
for epoch in range(self.max_epoch):
|
|
for epoch in range(self.max_epoch):
|
|
|
print(f"train epoch:{epoch}")
|
|
print(f"train epoch:{epoch}")
|
|
|
|
|
|
|
|
- model, epoch_train_loss = self.one_epoch(model, data_loader_train, epoch, optimizer)
|
|
|
|
|
|
|
|
|
|
|
|
+ model, epoch_train_loss = self.one_epoch(model, data_loader_train, epoch, optimizer)
|
|
|
|
|
+ scheduler.step(epoch_train_loss)
|
|
|
# ========== Validation ==========
|
|
# ========== Validation ==========
|
|
|
with torch.no_grad():
|
|
with torch.no_grad():
|
|
|
model, epoch_val_loss = self.one_epoch(model, data_loader_val, epoch, optimizer, phase='val')
|
|
model, epoch_val_loss = self.one_epoch(model, data_loader_val, epoch, optimizer, phase='val')
|
|
|
|
|
+ scheduler.step(epoch_val_loss)
|
|
|
|
|
|
|
|
if epoch==0:
|
|
if epoch==0:
|
|
|
best_train_loss = epoch_train_loss
|
|
best_train_loss = epoch_train_loss
|
|
@@ -286,6 +293,9 @@ class Trainer(BaseTrainer):
|
|
|
best_val_loss = self.save_best_model(model, self.best_val_model_path, epoch, epoch_val_loss, best_val_loss,
|
|
best_val_loss = self.save_best_model(model, self.best_val_model_path, epoch, epoch_val_loss, best_val_loss,
|
|
|
optimizer)
|
|
optimizer)
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
def one_epoch(self, model, data_loader, epoch, optimizer, phase='train'):
|
|
def one_epoch(self, model, data_loader, epoch, optimizer, phase='train'):
|
|
|
if phase == 'train':
|
|
if phase == 'train':
|
|
|
model.train()
|
|
model.train()
|