使用arcface处理普通分类后续:注册集的制作

上次谈到了使用arcface处理普通分类,今天补充一下注册集的制作;

一般在人脸识别中,注册集中的图片会选择清晰的正脸样本或者各种姿态的脸部图片,但是在一般分类问题中图片会存在一些背景,然后可以使用kmeans聚类产生一个中心样本特征,将这个样本特征记录在json文件中,使用时,直接读取出来和抓拍图片的特征计算余弦距离,步骤如下:

step1:提取主干网络提取图像特征;代码参考:使用arcface+CrossEntropyLoss处理普通分类

step2.使用kmeans对某类所有训练样本提取中心特征,并将中心特征存储到json文件中;

# define criteria and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
ret, label, center = cv2.kmeans(regfeat, 1, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = center.squeeze().tolist()
with open("1.json", "w") as f:
    json.dump(center, f)
print("写入文件完成...")

step3.当提取完所有类别的中心特征后,加载json文件,和抓拍的图像特征做对比,并通过已知的中心特征类别来划分抓拍图像特征的类别;

加载json代码:

dir_json = 'center_json_dir'
json_names = os.listdir(dir_json) #所有中心特征名
regidlist = []#保存对应标签名,json文件命名使用了标签名
regfeat = torch.FloatTensor(10, 512)#10个类别,每个中心特征为512维
for i,json_name in enumerate(json_names):
    json_path = os.path.join(dir_json, json_name)
    regidlist.append(json_name[:-5])
    with open(json_path, 'r') as load_f:
        feat_tensor = torch.tensor(np.array(json.load(load_f)))
        regfeat[i, :] = feat_tensor

step4.将提取的抓拍图像特征和中心特征计算余弦距离;具体还是参考:

使用arcface+CrossEntropyLoss处理普通分类

最终效果:还是很勉强,具体还是要求分类的训练样本越丰富越好;训练样本太单一容易被错分;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫猫与橙子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值