code: def finetune_function(
      self, pl_module: LightningModule, epoch: int, optimizer: Optimizer
  ):
      if epoch == self.milestones[0]:
          # unfreeze 5 last layers
          self.unfreeze_and_add_param_group(
              modules=pl_module.feature_extractor[-5:],
              optimizer=optimizer,
              train_bn=self.train_bn,
          )
  
      elif epoch == self.milestones[1]:
          # unfreeze remaining layers
          self.unfreeze_and_add_param_group(
              modules=pl_module.feature_extractor[:-5],
              optimizer=optimizer,
              train_bn=self.train_bn,
          )
  
imports: import logging
  from pathlib import Path
  from typing import Union
  import torch
  import torch.nn.functional
  from lightning.pytorch import LightningDataModule, LightningModule, cli_lightning_logo
  from lightning.pytorch.callbacks.finetuning import BaseFinetuning
  from lightning.pytorch.cli import LightningCLI
  from lightning.pytorch.utilities import rank_zero_info
  from lightning.pytorch.utilities.model_helpers import get_torchvision_model
  from torch import nn, optim
  from torch.optim.lr_scheduler import MultiStepLR
  from torch.optim.optimizer import Optimizer
  from torch.utils.data import DataLoader
  from torchmetrics import Accuracy
  from torchvision import transforms
  from torchvision.datasets import ImageFolder
  from torchvision.datasets.utils import download_and_extract_archive
label_desc: Use image node_id 3 for calling the MilestonesFinetuning obj's underlying member method code with example usage: obj.finetune_function(pl_module, epoch, optimizer) without return types