模型分类结果都分到一类

在做活体检测的时候,出现这样的结果,4000张假脸全部认为是真脸,非常不合理,
理论上二分类就算是瞎猜也应该有0.5的概率判断是对的,
出现这种可能的原因是样本不均衡,但我的不属于这种,最后的原因是测试时候的预处理和模型训练中不一样,更改后结果正确。
注意维度、图片的预处理、还有图片读入的方式,模型训练中用的 Image.open 读入的图片,而我的离线测试代码中用的cv2.imread(), 还有ndarray转换为tensor的方法都应与训练时保持一致。

注意!!!预处理会影响模型的效果,影响还不是一点点,所以在代码设计的时候,就应该只写一个预处理函数,保证训练和测试的图片在读入后都进行了相同的处理。

def preprocess(image):
    img = Image.open(image)
    img = np.asarray(img, dtype='uint8')
    img = cv2.resize(img, (112, 112))
    img = img.reshape((112, 112, 1))
    img = np.concatenate((img, img, img), axis=-1)
    # print(img.shape)
    img = np.transpose(img, (2, 0, 1))
    # img = img.reshape([3, 112, 112])
    # print(img.shape)
    img = img.astype(np.float32)
    img1 = cv2.Scharr(img, cv2.CV_8U, 0, 1)  # cv2.Sobel(img, cv2.CV_8U, 0, 1)
    img2 = cv2.Scharr(img, cv2.CV_8U, 1, 0)
    img = np.abs(img1) + np.abs(img2)
    img = img[np.newaxis, :, :, :]
    # print(img.shape)
    return torch.FloatTensor(img)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我现在强的可怕~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值