Pytorch中的图像分类

时间:2020-04-08 12:56:02

标签: python neural-network pytorch face-recognition

我想知道Pytorch的{​​{3}}库

  1. 数据扩充应该在火车数据集中还是在测试数据集中?

  2. 我至少应将几张图像放入测试数据集中(我已经使用了测试数据集中2%的图像)

  3. 我有21个班级(21人脸),并且具有(vggface2数据集)带有评估模式,这足以用于训练和测试数据集吗?

  4. 如何可视化测试数据集中的图像以显示面部是否匹配 我试过了,但是会出现这个错误:

TypeError:图像数据的形状无效(3、160、160)

图像的形状为:(10,3,160,160)

dataiter = iter(test_loader)
images, labels = dataiter.next()
# get predictions
preds = np.squeeze(net(images).data.max(1, keepdim=True)[1].numpy())
images = images.numpy()

# plot the images in the batch, along with predicted and true labels
fig = plt.figure(figsize=(25, 4))
for idx in np.arange(batch_size):
    ax = fig.add_subplot(2, batch_size/2, idx+1, xticks=[], yticks=[])
    ax.imshow(np.squeeze(images[idx]), cmap='gray')
    ax.set_title("{} ({})".format(classes[preds[idx]], classes[labels[idx]]),
             color=("green" if preds[idx]==labels[idx] else "red"))
  1. 检测到面部后如何从网络摄像机获取输入面部(预测功能)?
cap = cv.VideoCapture(0)
while True:
    ret, frame = cap.read()
    frame = cv.resize(frame, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    image = predict_draw_bounding_box(frame)
    cv.imshow('Output', image)
    c = cv.waitKey(1)
    if c == 27:
        break
cap.release()
cv.destroyAllWindows()

但是我不知道要实现predict_draw_bounding_box函数吗?

谢谢您的建议

1 个答案:

答案 0 :(得分:2)

有很多问题;您可能应该将这些问题分解为多个问题。无论如何,我都会尝试回答一些。

  1. 数据扩充通常应在火车数据集上进行 只要。典型的扩充包括随机轮播,调整大小的农作物, 水平翻转,抠图等。所有这些仅在火车上进行。

    除此之外,我只能想起频道 归一化是您通常同时应用于两者的唯一增强 培训和测试集。您按通道计算x-x_mean/sigma 用于数据集中的所有图像。

  2. 测试数据集中图像的百分比完全是经验值,取决于您实际拥有的图像数量。对于具有百万张图像的超大型数据集,可以使用2%之类的小百分比。但是,如果您的图像数量在上万,上千甚至更少,那么最好将测试集保持在20%左右。

  3. 无法理解您的问题。

  4. 您的图像的形状为(3,160,160)。这是pytorch的nn.Module系统使用的通道优先语法,但是在matplotlib中绘制RGB图像要求通道具有最后一个维度,即(160,160,3)。如果images是一批形状为(10,3,160,160)的图像,请执行以下操作:

    ...
    images = images.numpy()
    images = images.swapaxes(1,2).swapaxes(2,3)
    ...
    

    这会将其重塑为(10,160,160,3),而不会损害轴的顺序。

  5. 不知道。