利用paddlepaddle中的resnet网络训练人脸验证1:1

问题概述

训练数据参考此链接https://www.kesci.com/home/competition/5b0cf4c8a8b1fd09d0ba99a8/content/5,训练集有7403人,图片大约35万,测试集为12000对图片。

模型概述

利用了paddlepaddle的filud模型库中的resnet为基础网络训练一个二分类问题。模型的输入为两个图像的灰度图拼接,比如要比对的俩个图 A(1,64,64) B(1,64,64)那么拼接起来的结构就是(1,64,128),输入图像的标签为0,1,表示图像相同或者是不同。损失函数为交叉熵,梯度下降:SGD,lr:0.2。 设计出这个模型的原因主要有3个方面,1.CNN中端到端的训练总是最优的 2.损失函数中交叉熵比较起距离函数等也是有一定优势的 3. 这样处理可 以成倍的扩大训练集。这是没有选择多分类和类似于facenet中算法的模型原因。

训练过程概述

训练集中一共7403人,同一个人的图片互相组合标签为1,不同的人的互相组合标签为0。我采取了随机选取的原则,选取一轮保证每张图片都可以选到一次就行。

  1. 训练过程 选择输入图像大小为(1,64,128) resnet层为50层,如果只选取一轮数据,在这个一轮数据上反复训练20个epoch,模型未收敛,loss为0.2左右,成绩为0.8多一点,训练50个epoch,成绩为0.86左右。
  2. 训练过程 选择输入图像大小为(1,64,128) resnet层为50层,选取100轮数据,只训练一个epoch,loss在0.05左右,成绩便能达到0.91。如果训练俩个epoch成绩还可以提升一些。

  3. 选择输入图像大小为(1,128,256)resnet层为101,选取20轮数据,训练1个epoch,loss为0.3左右的时候,成绩就能轻松达到0.9

关键性代码

训练数据预处理,all_train_data是一个二维list,存储了所有图片数据。

#产生随机数,用来选取同类和非同类图像坐标
def random_my(now, len_my):
    if len_my==1:
        index = 0
    else:
        index = random.randint(0, len_my - 1)
        if index == now:
            index = random_my(index, len_my-1)
    return index
#合并图像
def image_mix(image_a,image_b):
    return np.concatenate((image_a,image_b),axis=2)
#####产生输入模型的数据
def reader_creator_facenet():
    def reader():
        for i in range(100): ##### 循环100次,产生100轮数据,可以换其他数字,得到想要的轮数
            for index_class ,cell in enumerate(all_train_data):#这里控制读取多少个人的数据
                for index, element in enumerate(cell):
                    label = random.randint(0,1)
                    if label==0:
                        im_anchor = element
        
                        element_negative = random_my(index_class,len(all_train_data))
                        element_negative_result = all_train_data[element_negative][random.randint(0,len(all_train_data[element_negative])-1)]
                        im_negative = element_negative_result
                        
                        yield image_mix(im_anchor,im_negative),label
                    else:
                        im_anchor = element
                        
                        element_positive =random_my(index,len(cell))
                        im_positive = cell[element_positive]
                       
                        yield image_mix(im_anchor,im_positive),label
                
        
    return reader

详细代码参考https://www.kesci.com/home/project/5b45a6d9a6e68e001068d3e8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值