You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.5 KiB

11 months ago
from pathlib import Path
from lightning import Callback
11 months ago
from check import create_circle
class SaveImageCallback(Callback):
11 months ago
def __init__(self, save_interval=1, final_dir: str = None):
11 months ago
self.save_interval = save_interval
11 months ago
self.final_dir = final_dir
11 months ago
11 months ago
def on_train_epoch_end(self, trainer, pl_module):
11 months ago
epoch = trainer.current_epoch
11 months ago
if self.save_interval <= 0:
return None
11 months ago
if epoch % self.save_interval == 0:
# Set the model to eval mode for generating the image
pl_module.eval()
# Save the image
# if pl_module.trainer.logger:
11 months ago
#
11 months ago
# else:
# version = 0
fname = Path(pl_module.trainer.logger.log_dir) / Path(f"e{epoch:04d}")
create_circle(pl_module, fname=fname)
# Make sure to set it back to train mode
pl_module.train()
11 months ago
def on_train_end(self, trainer, pl_module):
if self.final_dir:
version = pl_module.trainer.logger.version
fname = Path(f"{self.final_dir}") / Path(f"v{version}")
pl_module.eval()
create_circle(pl_module, fname=fname)
11 months ago
if self.save_interval > 0:
import os
log_dir = str(Path(pl_module.trainer.logger.log_dir))
fps = 12
os.system(
f'ffmpeg -i {log_dir}/e%04d.png -c:v libx264 -vf "fps={fps},format=yuv420p,pad=ceil(iw/2)*2:ceil(ih/2)*2" {log_dir}/a{version}.mp4'
)