Xianhua-He / cvpr2024-face-anti-spoofing-challenge

Accepted by CVPR Workshop 2024
MIT License
36 stars 3 forks source link

使用script下面的测试脚本测试,准确率极低,大量的数据spoof图片都被识别为live类 #6

Open dtiny opened 1 month ago

dtiny commented 1 month ago

下载了readme中提供的3个模型链接,script目录下的三个脚本全部测试一遍(test_p1.sh test_p21.sh test_p22.sh),发现模型的推理结果,准确度极低,几乎所有的数据都被识别为live类(1类),两种图片都测试过(一种是原图片推理,几乎都是live类;另一种是截取的人脸图片推理,准确率也很低,比原图推理要高一点点)。后来我直接使用了训练图片进行测试,发现结果也一样,spoof图片几乎都被识别为live类了,不知道是什么问题,希望作者能给与帮助和解答,谢谢。

测试系统:ubuntu18.04 python版本:python3.8,conda环境管理 cuda版本:11.2 GPU驱动版本:460.32.03

Xianhua-He commented 3 weeks ago

@dtiny

我这提供的模型是比赛数据集上分协议几千张图训练的过拟合比赛数据的模型,并不适配任意场景下的图片。只能用于比赛测试集上测试结果才会好。 你要测试任意场景下的spoof和live需要自己重新训练模型了。

Xianhua-He commented 3 weeks ago

@dtiny 我在readme中新增了3个我们自己数据集训练的低配版本的模型,能够适配任意场景下的图片,应该能适配你自己的数据,可以尝试我提供的新模型。

image
dtiny commented 3 weeks ago

谢谢作者帮助,我下载了face_swin_v2_base.pth模型测试,但是测试报错了,请帮助分析一下原因。

测试脚本如下: python -m torch.distributed.run --nproc_per_node=1 --master_port=12353 \ test_batch.py \ --protocol 'p1' \ --val_root "/disk_u2_a/face_anti-spoofing/CVPR23-FAS-WILD/test_v2/CVPR2023-Anti_Spoof-Challenge-ReleaseData-Test_V2-20230223/data" \ --val_list "models/CVPR2023-Anti_Spoof-Challenge-ReleaseData-Test_V2-20230223_Test.txt" \ --arch swin_v2_b \ --num_classes 2 \ --input_size 224 \ --batch_size 1 \ --workers 8 \ --resume 'models/face_swin_v2_base.pth' \ --score_list 'models/exp_p22/face_spoof.txt'

报错如下:

[2024-08-20 17:03:39](test_batch.py 89): INFO params: Namespace(arch='swin_v2_b', batch_size=1, class_index=1, ema=False, face_crop_extend_ratio=0.3, input_size=224, landmark_base_scale=0.0, landmark_rotate=10, landmark_scale=0.06, landmark_translation=0.06, model_ema_decay=0.9999, model_ema_steps=32, num_classes=2, protocol='p1', reset_epoch=False, resume='models/face_swin_v2_base.pth', score_list='models/exp_p22/face_spoof.txt', test_crop=False, test_five_crop=False, use_face=False, use_landmark=False, val_list='models/CVPR2023-Anti_Spoof-Challenge-ReleaseData-Test_V2-20230223_Test.txt', val_root='/disk_u2_a/face_anti-spoofing/CVPR23-FAS-WILD/test_v2/CVPR2023-Anti_Spoof-Challenge-ReleaseData-Test_V2-20230223/data', workers=8) [2024-08-20 17:03:39](test_batch.py 90): INFO world_size:1, rank:0, local_rank:0 [2024-08-20 17:03:39](test_batch.py 94): INFO => creating model 'swin_v2_b' /root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/functional.py:445: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:2157.) return _VF.meshgrid(tensors, kwargs) # type: ignore[attr-defined] Traceback (most recent call last): File "test_batch.py", line 156, in main(args) File "test_batch.py", line 95, in main model = get_model(args.arch, args.num_classes) File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/utils.py", line 43, in get_model model = swin_transformer_v2.dict[arch](num_classes=num_classes, fp16=fp16) File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/swin_transformer_v2.py", line 760, in swin_v2_b model = SwinTransformerV2(img_size=img_size, File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/swin_transformer_v2.py", line 616, in init layer = BasicLayer(dim=int(embed_dim * 2 * i_layer), File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/swin_transformer_v2.py", line 455, in init self.blocks = nn.ModuleList([ File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/swin_transformer_v2.py", line 456, in SwinTransformerBlock(dim=dim, input_resolution=input_resolution, File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/swin_transformer_v2.py", line 301, in init mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1 File "/home/cvpr2024-face-anti-spoofing-challenge-main/nets/swin_transformer_v2.py", line 64, in window_partition x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) RuntimeError: shape '[1, 4, 12, 4, 12, 1]' is invalid for input of size 3136 ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1) local_rank: 0 (pid: 6457) of binary: /root/anaconda3/envs/insight_face/bin/python Traceback (most recent call last): File "/root/anaconda3/envs/insight_face/lib/python3.8/runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "/root/anaconda3/envs/insight_face/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/distributed/run.py", line 723, in main() File "/root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/distributed/elastic/multiprocessing/errors/init.py", line 345, in wrapper return f(args, kwargs) File "/root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/distributed/run.py", line 719, in main run(args) File "/root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/distributed/run.py", line 710, in run elastic_launch( File "/root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 131, in call return launch_agent(self._config, self._entrypoint, list(args)) File "/root/anaconda3/envs/insight_face/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 259, in launch_agent raise ChildFailedError( torch.distributed.elastic.multiprocessing.errors.ChildFailedError:

test_batch.py FAILED

Failures:

------------------------------------------------------------ Root Cause (first observed failure): [0]: time : 2024-08-20_17:03:45 host : qs-S5GA-G58G1S1-00 rank : 0 (local_rank: 0) exitcode : 1 (pid: 6457) error_file: traceback : To enable traceback see: https://pytorch.org/docs/stable/elastic/errors.html
Xianhua-He commented 3 weeks ago

@dtiny 用bash scripts/test.sh脚本来测试。 --protocol 要设置为'none' ,否则读取不到你自己的数据集。face_swin_v2_base.pth要输入人脸区域的图片效果才会好。full_swin_v2_base.pth要输入全图区域的图片效果才好。

Xianhua-He commented 3 weeks ago

@dtiny 代码更新过了,你应该需要git pull拉取一下新的代码