人脸多属性分类

最近转到人脸组,接手的第一件事,就是使用shufflenet进行人脸多属性分类,多属性包括:眼镜(墨镜,透明眼镜,没戴眼镜),口罩(戴口罩,没戴口罩),刘海(遮住眉毛的刘海,没有刘海),帽子(戴了帽子,没戴帽子);

1)进行数据的收集和处理;

     进入网络的数据我使用了hdf5格式保存。这种格式的数据保存,我使用过程:

      第一步,我使用了python将数据保存为图片名字+标签的的txt文件;

      第二步,使用了python文件生成了多标签的“.h5”文件。

2)进行网络结构的修改;

    shufflenet的末尾使用的dropout,参数设置的是0.5;同时加入了4个fc层,分别对应了四个任务(眼镜,刘海,帽子,口罩),其中眼镜属于细粒度分类,将眼镜层的fc层的输出设置的是3个,其他fc层设置的是2个输出;同时为了节省时间的开销,我将常规的224*224的输入data修改成为了112*112的大小,并将shufflenet 的pooling层给删除了;

3)注意

    a,dropout在训练的时候使用,测试时可以删除dropout层;

    b,我在对多属性进行测试时,忘了加入softmax层,导致结果分数不在0~1之间。

     测试代码:

def proprocess(img):
    tempimg = np.zeros((1, 112, 112, 3))
    scale_img = cv2.resize(img, (112, 112))
    scale_img = (scale_img - 127.5) / 125.0
    tempimg[0, :, :, :] = scale_img
    tempimg = tempimg.transpose(0, 3, 1, 2)
    return tempimg

for img in imgPaths:#遍历测试图片
    num += 1
    print(num)
    clip_img = cv2.imread(img)
    # cv2.imwrite(save_img_dir, clip_img)
    t0 = time.time()
    proprocess_img = proprocess(clip_img)

    net.blobs['data'].data[...] = proprocess_img
    output = net.forward()
    # predictions1 = output[self.outputs[0]]
    # predictions2 = out[self.outputs[1]]
    # predictions3 = out[self.outputs[2]]
    # predictions4 = out[self.outputs[3]]

    mask = copy.deepcopy(net.blobs['fc6_mask'].data[0])
    prob_mask = mask.reshape(-1).argmax()#口罩类别

    hat = copy.deepcopy(net.blobs['fc6_hat'].data[0])
    prob_hat = hat.reshape(-1).argmax()#帽子类别

    liuhai = copy.deepcopy(net.blobs['fc6_bangs'].data[0])
    prob_liuhai = liuhai.reshape(-1).argmax()#刘海类别

    eyeglasses = copy.deepcopy(net.blobs['fc6_eyeglasses'].data[0])
    prob_eyeglasses = eyeglasses.reshape(-1).argmax()#眼镜类别
    t1 = time.time()
    result_time = (t1-t0)*1000#运行一张图片需要的时间
    print("time : "+str(result_time))

(注:代码只有部分,并不能直接运行)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫猫与橙子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值