Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

About testing! #5

Open
dandelion915 opened this issue Jun 28, 2021 · 6 comments
Open

About testing! #5

dandelion915 opened this issue Jun 28, 2021 · 6 comments

Comments

@dandelion915
Copy link

谢谢你复现的代码!我有一些问题想请教一下:每个视频我提取了前300帧用作训练,在设置batchsize=2时,运行到auc, r_acc, f_acc = evaluate(model, dataset_path, mode='valid')时,测试模型需要花费15分钟时间,并且会无报错地返回Process finished with exit code -1。请问你每次测试模型需要花多久的时间?

@yyk-wew
Copy link
Owner

yyk-wew commented Jun 29, 2021

你好,印象中我测试模型花费的时间在四到五分钟左右。
关于测试的函数,可以在 utils.py中对evaluate函数进行调整的。

F3Net/utils.py

Lines 77 to 97 in 574667f

def evaluate(model, data_path, mode='valid'):
root= data_path
origin_root = root
root = os.path.join(data_path, mode)
real_root = os.path.join(root,'real')
dataset_real = FFDataset(dataset_root=real_root, size=299, frame_num=50, augment=False)
dataset_fake, _ = get_dataset(name=mode, root=origin_root, size=299, frame_num=50, augment=False)
dataset_img = torch.utils.data.ConcatDataset([dataset_real, dataset_fake])
bz = 64
# torch.cache.empty_cache()
with torch.no_grad():
y_true, y_pred = [], []
for i, d in enumerate(dataset_img.datasets):
dataloader = torch.utils.data.DataLoader(
dataset = d,
batch_size = bz,
shuffle = True,
num_workers = 8
)

在evaluate函数中每次会重新生成dataset和dataloader,通过frame_num参数可以控制每个id采样多少张图片进行测试,这里默认是50,如果想要提高总体测试速度可以减少采样个数。

关于无报错的返回信息我在自己运行的时候并未遇到类似的问题,根据你给出的信息只能猜测可能是由于测试的batch_size过大导致OOM,默认的测试batch_size大小(代码中为bz)为64,建议把参数调整过后再试一下。

@dandelion915
Copy link
Author

谢谢!已经可以很好地运行了,但是我的f_acc虽然能达到0.91,r_acc一直在0.4-0.6,您遇到过类似的情况吗?是否可以请教一下您在视频预处理中采取的方式(裁剪尺寸是否固定?尤其是有一些视频有多张人脸,可能导致人脸跟踪的id跳变)?

@yyk-wew
Copy link
Owner

yyk-wew commented Aug 12, 2021

  1. 关于fake acc和real acc差距较大,是存在这种情况的。本身FF++数据集就是长尾分布(fake:real=4:1),不做处理的话就会倾向于预测为fake。使用过采样或者欠采样类似的手段可以一定程度解决这个问题,其他论文也有对real样本做增强来获得更多样本达到数据均衡的做法。
    并且,我个人认为在这个场景下,本身real的预测难度就是高于fake的,fake图像有固定的瑕疵作为可学习的识别模式,但real样本相较而言没有固定的特征可供捕捉。所以real的预测准确度略低我认为也属于正常现象。
  2. 预处理我用的是dlib得到人脸部分的bounding box,放缩1.3倍之后将该区域裁剪出来。如你所说,确实会有人脸跟踪的id跳变这种情况(印象里有一个视频背后的海报上有一个很清晰的人脸,dlib就会把那个脸框出来)。其他论文里提到的解决方案有二,一是手动筛查,二是用tracking的方法去框人脸,我认为可能比逐帧框更可靠。
    实际上我观察dlib框脸的结果,id跳变出现的次数还是相当少的,应该不会对最终结果产生大的影响。

@dandelion915
Copy link
Author

再此感谢您及时的回复!那请问您0.91的准确率是指平均acc还是f_acc?程序里应该也没有做真实样本的增强吧?

@yyk-wew
Copy link
Owner

yyk-wew commented Aug 15, 2021

  1. 平均acc
  2. report的结果对真假样本同时做了flip的增强,没有单独对真实样本做增强。

@ss880426
Copy link

ss880426 commented Jun 17, 2022

Excuse me, is 0.91 acc or auc?
Can acc be provided if 0.91 is auc?
Because I see only auc in github
My average acc in test is only 0.78, is this normal?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants