我有一个针对Mark Ruffalo的图像(裁剪后的脸部)进行训练的CNN。我有大约200张正面图像和200个随机脸部的负数据点。
该模型具有很高的召回率,但精度非常低。我该如何提高精度?此外,我的正面图像数量受到限制。在这种权衡中,我愿意牺牲召回率。
我尝试增加负样本数,但这会引入一种偏见,使模型开始将所有内容分类为负以达到局部最优解。
我基于overfeat构建了我的CNN:
请帮忙。
该模型具有很高的召回率,但精度非常低。我该如何提高精度?此外,我的正面图像数量受到限制。在这种权衡中,我愿意牺牲召回率。
我尝试增加负样本数,但这会引入一种偏见,使模型开始将所有内容分类为负以达到局部最优解。
我基于overfeat构建了我的CNN:
local features = nn.Sequential()
features:add(nn.SpatialConvolutionMM(3, 96, 11, 11))
features:add(nn.ReLU())
features:add(nn.SpatialMaxPooling(2, 2, 2, 2))
features:add(nn.SpatialConvolutionMM(96, 256, 5, 5))
features:add(nn.ReLU())
features:add(nn.SpatialMaxPooling(2, 2, 2, 2))
features:add(nn.SpatialConvolutionMM(256, 512, 3, 3))
features:add(nn.ReLU())
features:add(nn.SpatialMaxPooling(2, 2, 2, 2))
-- 24x24x512
features:add(nn.SpatialConvolutionMM(512, 1024, 3, 3))
features:add(nn.ReLU())
features:add(nn.SpatialMaxPooling(2, 2, 2, 2))
--11x11x1024
features:add(nn.SpatialConvolutionMM(1024, 1024, 3, 3))
features:add(nn.ReLU())
features:add(nn.SpatialMaxPooling(2, 2, 2, 2))
-- 1.3. Create Classifier (fully connected layers)
local classifier = nn.Sequential()
classifier:add(nn.View(1024*4*4))
classifier:add(nn.Dropout(0.5))
classifier:add(nn.Linear(1024*4*4, 3072))
classifier:add(nn.Threshold(0, 1e-6))
classifier:add(nn.Dropout(0.5))
classifier:add(nn.Linear(3072, 4096))
classifier:add(nn.Threshold(0, 1e-6))
classifier:add(nn.Linear(4096, noutputs))
model = nn.Sequential():add(features):add(classifier)
请帮忙。
PCA
很容易,并且有很多文档可以参考。如果图像中有受控照明并且姿势和面部表情变化很小,则它是一个很好的选择。您尝试过吗?用于人脸识别的PCA也称为“特征脸”。您目前正在进行任何特征提取/表示吗? - Pablo Rivas