siriusdemon / Build-Your-Own-Face-Model

Build your own ArcFace, CenterFace/Centernet
334 stars 69 forks source link

自定义网络结构 #7

Closed Linsongrong closed 4 years ago

Linsongrong commented 4 years ago

@siriusdemon 您好,感谢您的工作。我对训练过程感到困惑, image 这里面只加载了webface的目录,没看到它对应的list加载。请问这个list不需要吗,还是在别的地方加载了。期待您的回复。

siriusdemon commented 4 years ago

哦哦,这样子的。train_root下面都是一些文件夹,每个文件夹可以认为是一个类,所以数据和标签都有了。但在测试的时候,需要两两对比来评判准确度,所以就需要一个list

Linsongrong commented 4 years ago

谢谢您的回复,现在又出现了个问题,我更改了config里的embedding_size,改成256,因为我想获得256维的特征,还把输入改成了3112112的格式,但运行时出现了 image 这该怎么解决?还有我现在没有测试的数据集,可以不填写test_root和test_list吗。

siriusdemon commented 4 years ago

有两个要注意的点,一是改成[3, 112, 112]的话,在预处理的T.Grayscale()要去掉;二是要重新匹配一下模型中全连接层的维度。比如,在fmobilenet.py中,模型的Linear层的输入要改一下。

class FaceMobileNet(nn.Module):
    def __init__(self, embedding_size):
        super().__init__()
        # ...
        self.linear = nn.Linear(2048, embedding_size, bias=False)
        # ...

现在可以不填 test 相关的东西。

Linsongrong commented 4 years ago

谢谢!我会按照您的提示修改的。我测试用自己数据训练得到的模型时出现了这样的情况: image 准确率100% 阈值却是负数,这正常吗。我的测试集也是自己的,里面有点id目录下只有1张图片,而我制作Paris_list时,是忽略只有1张的情况的。请问我需要删除测试数据集里只有1张图片的ID吗?

Linsongrong commented 4 years ago

image

siriusdemon commented 4 years ago

图片看不到。

测试的时候,只有一张图片的ID也是可以的呀。测试有两个要测的:一是相同人脸能不能识别,二是不同人脸能不能识别。项目中附加的有6000对,其中3000对测相同人脸,3000对测不同人脸。

理解了这一点,就可以明白,只有一张图片的ID,只能用来制作第二种测试。

Linsongrong commented 4 years ago

您好,我改了网络,改成输入为3x112x112的图片,但我测试是出现了问题,我已经把test_transform里的T.Grayscale()去掉了,但还是出现’RuntimeError: Given groups=1, weight of size 64 3 3 3, expected input[192, 1, 112, 112] to have 3 channels, but got 1 channels instead ‘的错误,您觉得是什么问题?

siriusdemon commented 4 years ago

这里的意思是,你输入的图片似乎只有1个通道?

train_transform的去掉了吗?

Linsongrong commented 4 years ago

去掉了

Linsongrong commented 4 years ago

我网络结构改了,self.conv1 = ConvBnPrelu(3, 64, kernel=(3, 3), stride=2, padding=1)

Linsongrong commented 4 years ago

image debug发现在断点处变了通道,之前是3通的,到了这之后变成单通

siriusdemon commented 4 years ago

原来是test.py。嗯,应该是这里了。因为我之前设置的是单通道的。下次提问记得说清楚是在跑哪个脚本啊

Linsongrong commented 4 years ago

您知道怎么改吗

siriusdemon commented 4 years ago
data = torch.cat(res, dim=0)  # shape: (batch, 128, 128)

你检查一下这一行的输出。如果已经是3通道的,就把下面那行去掉就好了。