Open liaoyusy opened 3 months ago
你好! 如果你只想训练一个512*512的异常检测器,一个简单的方法是直接修改experiments/MVTec-AD/realnet.yaml的input_size即可。如果显存溢出可是适当减小一下structure里的planes. 如果你想训练512*512的扩散模型,你需要去 https://github.com/openai/guided-diffusion 下载512*512的预训练扩散模型checkpoint, 然后修改experiments/MVTec-AD/diffusion.yaml和experiments/MVTec-AD/classifier.yaml中的input_size和unet(classifier),可能需要参考一下 https://github.com/openai/guided-diffusion 中的设置。
OK 感谢指导,我试一下
作者您好,我再请教您几个问题: 我训练我自己的数据集,原图大小12801024,扩散模型和异常检测器的input_size是256256,然后有些小的缺陷检测效果不太好,我觉得是resize的太小了,丢失了一些信息,然后我做了一些修改: (1)只训练512512的异常检测器,扩散模型还是用之前256256的,生成的sdas大小也还是256256的,但是异常检测结果不及之前256256的效果好,这和扩散模型以及生成的sdas的大小有关吗?因为训练异常检测器会用到sdas异常数据。 (2)小缺陷检测效果不好,可能是因为resize尺寸太小的原因,请问我这样理解对吗? (3)我尝试训练512*512的扩散模型,将input_size和unet(classifier)参数也进行了相应的修改,但是显存48g,batchsize=1显存还是会溢出,但是之前训练256大小时,batchsize可以设置为6,这种情况正常吗? (4)我只有一个类别的异常,分类器是不是就不用训练了?
你好! 在高分辨率图像中检测小面积异常本身就比较困难。如果你把图像resize的太小那肯定检测不出来,如果你resize成256*256肉眼都看不出来了,那就是异常信息已经丢失了,网络肯定也检测不出来。 我建议你就不要训练512*512的扩散模型了(成本较高),还用256*256的sdas或者只用dtd也可以,修改一下网络结构,仅重建前三层特征(或者前两层),来增强网络的小面积异常检测能力。
重建三层
structure:
- name: block1
layers:
- idx: layer1
planes: 256
stride: 4
- name: block2
layers:
- idx: layer2
planes: 512
stride: 8
- name: block3
layers:
- idx: layer3
planes: 512
stride: 16
net:
- name: backbone
type: models.backbones.Backbone
frozen: True
kwargs:
backbone: wide_resnet50_2
- name: afs
type: models.afs.AFS
frozen: True
prev: backbone
kwargs:
init_bsn: 64
- name: recon
type: models.recon.ReconstructionLayer
prev: afs
kwargs:
num_res_blocks: 2
hide_channels_ratio: 0.5
channel_mult: [1,2,4]
attention_mult: [2,4]
- name: rrs
type: models.rrs.RRS
prev: recon
kwargs:
modes: [max,mean]
mode_numbers: [256,256] # dimensions of RRS, max=256,mean=256
num_residual_layers: 2
stop_grad: False
重建两层
structure:
- name: block1
layers:
- idx: layer1
planes: 256
stride: 4
- name: block2
layers:
- idx: layer2
planes: 512
stride: 8
net:
- name: backbone
type: models.backbones.Backbone
frozen: True
kwargs:
backbone: wide_resnet50_2
- name: afs
type: models.afs.AFS
frozen: True
prev: backbone
kwargs:
init_bsn: 64
- name: recon
type: models.recon.ReconstructionLayer
prev: afs
kwargs:
num_res_blocks: 2
hide_channels_ratio: 0.5
channel_mult: [1,2,4]
attention_mult: [2,4]
- name: rrs
type: models.rrs.RRS
prev: recon
kwargs:
modes: [max,mean]
mode_numbers: [128,128] # dimensions of RRS, max=256,mean=256
num_residual_layers: 2
stop_grad: False
上面的配置会增强网络检测小面积异常的能力,同时也会降低网络检测大面积异常区域的能力。
感谢您的耐心指导,我这就去试试~
作者您好,我想问一下能否将输入图像的尺寸从256调整为512呢?如果可以,麻烦您指导一下需要修改哪些代码