hcw-00 / PatchCore_anomaly_detection

Unofficial implementation of PatchCore anomaly detection
Apache License 2.0
317 stars 95 forks source link

Parameter: coreset_sampling_ratio 0.01 happened error #20

Closed RozenAstrayChen closed 2 years ago

RozenAstrayChen commented 2 years ago

Hello, I have try to run your code by your sample cmd

python train.py --phase train or test --dataset_path .../mvtec_anomaly_detection --category carpet --project_root_path path/to/save/results --coreset_sampling_ratio 0.01 --n_neighbors 9

But I found coreset_sampling_ratio 0.01 will make error so I try use default parameters 0.001 and this is correctly work.

Error code

Error report is : Traceback (most recent call last): File "train.py", line 441, in <module> trainer.fit(model) File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/trainer.py", line 458, in fit self._run(model) File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/trainer.py", line 756, in _run self.dispatch() File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/trainer.py", line 797, in dispatch self.accelerator.start_training(self) File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/accelerators/accelerator.py", line 96, in start_training self.training_type_plugin.start_training(trainer) File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/plugins/training_type/training_type_plugin.py", line 144, in start_training self._results = trainer.run_stage() File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/trainer.py", line 807, in run_stage return self.run_train() File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/trainer.py", line 869, in run_train self.train_loop.run_training_epoch() File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/training_loop.py", line 556, in run_training_epoch self.on_train_epoch_end(epoch_output) File "/home/neaf-3090/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pytorch_lightning/trainer/training_loop.py", line 596, in on_train_epoch_end training_epoch_end_output = model.training_epoch_end(processed_epoch_output) File "train.py", line 345, in training_epoch_end selected_idx = selector.select_batch(model=self.randomprojector, already_selected=[], N=int(total_embeddings.shape[0]*args.coreset_sampling_ratio)) ValueError: invalid literal for int() with base 10: '0.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.010.0

Look like the problem is happened in line 345: selected_idx = selector.select_batch(model=self.randomprojector, already_selected=[], N=int(total_embeddings.shape[0]*args.coreset_sampling_ratio))

System and python interpreter

Can you tell me why coreset_sampling_ratio set 0.01 will make this bug ?

thx~

mengxianghan123 commented 2 years ago

You can change the code like this: parser.add_argument('--coreset_sampling_ratio', default=0.001, type=float)

RozenAstrayChen commented 2 years ago

Ok, thanks for your reply !

WS-W commented 1 year ago

The problem is that the default type of input args.coreset_sampling_ratio is str, it can not be multiplied, so we need change it to float like this: selected_idx = selector.select_batch(model=self.randomprojector, already_selected=[], N=int(total_embeddings.shape[0]*float(args.coreset_sampling_ratio)))