三个地方
第一:在定义model时,要在pre_processor里面去定义一个前处理,前处理就一个功能,定义图像的大小
pre_processor0 = Patchcore.configure_pre_processor( image_size = (128, 128))
model =Patchcore( backbone="wide_resnet50_2",layers=["layer1", "layer2"], pre_trained=True,pre_processor= pre_processor0)
第二个地方:在Folder里面定义transform。
datamodule = Folder(name="runzhi",root="",normal_dir=r"C:\Users\Administrator\Desktop\B\GOOD",abnormal_dir=r"C:\Users\Administrator\Desktop\B\BAD",num_workers=0,train_batch_size=10,eval_batch_size=5,train_augmentations=train_transform,val_augmentations=eval_transform,test_augmentations=eval_transform,#augmentations=eval_transform,)datamodule.setup()
这里要注意两点,这里的transform是从torchvision.transforms.v2里来的,它的方式也略有不同,定义如下,还有就是在如果定了了图像的归一化,和尺寸缩放,那么,在train_augment,val_augment,test_augment是要保证统一的,不然你可能得不到理想的结果图。
from torchvision.transforms.v2 import Compose, RandomAdjustSharpness, RandomHorizontalFlip, Resize, Normalize, ToPILImage, PILToTensor, ToTensortrain_transform = Compose([ToTensor(),RandomAdjustSharpness(sharpness_factor=0.7, p=0.5),RandomHorizontalFlip(p=0.5),Resize([128,128]),Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),],)eval_transform = Compose([ToTensor(),Resize([128,128]),Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),],)
第三,就是在predict层面,也要对输入的待测图像全部进行同样的resize和normalize的操作
我的完整代码如下,给自己看得
# Import the model and engine
import torch
from anomalib.data import Folder
from anomalib.engine import Engine
from anomalib.models import Patchcoreif __name__ == '__main__':pre_processor0 = Patchcore.configure_pre_processor( image_size = (128, 128))model =Patchcore( backbone="wide_resnet50_2",layers=["layer1", "layer2"], pre_trained=True,pre_processor= pre_processor0)engine = Engine()#####在这里要注意的是 Folder制作数据集时,它的transform是从torchvision.transforms.v2已入使用的from torchvision.transforms.v2 import Compose, RandomAdjustSharpness, RandomHorizontalFlip, Resize, Normalize, \ToPILImage, PILToTensor, ToTensortrain_transform = Compose([ToTensor(),RandomAdjustSharpness(sharpness_factor=0.7, p=0.5),RandomHorizontalFlip(p=0.5),Resize([128,128]),Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),],)eval_transform = Compose([ToTensor(),Resize([128,128]),Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),],)datamodule = Folder(name="runzhi",root="",normal_dir=r"C:\Users\Administrator\Desktop\B\GOOD",abnormal_dir=r"C:\Users\Administrator\Desktop\B\BAD",num_workers=0,train_batch_size=10,eval_batch_size=5,train_augmentations=train_transform,val_augmentations=eval_transform,test_augmentations=eval_transform,#augmentations=eval_transform,)datamodule.setup()engine.train(datamodule=datamodule, model=model)