import random import numpy as np import torch from PIL import Image # ---------------------------------------------------------# # 将图像转换成RGB图像,防止灰度图在预测时报错。 # 代码仅仅支持RGB图像的预测,所有其它类型的图像都会转化成RGB # ---------------------------------------------------------# def cvtColor(image): if len(np.shape(image)) == 3 and np.shape(image)[2] == 3: return image else: image = image.convert('RGB') return image # ---------------------------------------------------# # 对输入图像进行resize # ---------------------------------------------------# def resize_image(image, size): iw, ih = image.size w, h = size scale = min(w / iw, h / ih) nw = int(iw * scale) nh = int(ih * scale) image = image.resize((nw, nh), Image.BICUBIC) new_image = Image.new('RGB', size, (128, 128, 128)) new_image.paste(image, ((w - nw) // 2, (h - nh) // 2)) return new_image, nw, nh # ---------------------------------------------------# # 获得学习率 # ---------------------------------------------------# def get_lr(optimizer): for param_group in optimizer.param_groups: return param_group['lr'] # ---------------------------------------------------# # 设置种子 # ---------------------------------------------------# def seed_everything(seed=11): random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False # ---------------------------------------------------# # 设置Dataloader的种子 # ---------------------------------------------------# def worker_init_fn(rank, seed): worker_seed = rank + seed random.seed(worker_seed) np.random.seed(worker_seed) torch.manual_seed(worker_seed) def preprocess_input(image): image /= 255.0 return image