三個地方
第一:在定義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)