Combined Margin loss人脸识别训练笔记

本文记录了使用Combined Margin Loss在caffe中训练人脸识别模型的过程,包括基于res36-E和SE-resXt50-E网络的训练经验。在SE-resXt50-E网络训练中遇到了梯度爆炸和局部极值点的问题,分析了可能的原因并提出了调整策略。通过预训练模型进行finetuning能有效提高训练效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    利用caffe第三方实现的combined margin_layer进行训练(https://github.com/gehaocool/CombinedMargin-caffe),数据集采用VGGFace2,经过筛选以后共有8631个人的244W+的人脸图片。

    训练过程中出现了一下问题,这里进行记录。

一、利用开源项目中的res36-E网络进行训练

    训练过程比较顺利,虽然为了尽快训练完,将epoch进行了精简,但是最终的loss也下降到2左右,和项目给出的loss基本相同,训练过程中分类的精度也稳定在0.7-0.8之间。

    下图为训练过程中的loss和accuracy的曲线,横坐标的单位需要再乘以50(log文件中50次迭代输出一次log)。

I1222 12:24:23.999287  2126 solver.cpp:228] Iteration 277750, loss = 2.11202
I1222 12:24:23.999418  2126 solver.cpp:244]     Train net output #0: accuracy = 0.734375
I1222 12:24:23.999433  2126 solver.cpp:244]     Train net output #1: softmax_loss = 1.72783 (* 1 = 1.72783 loss)
I1222 12:24:23.999442  2126 sgd_solver.cpp:106] Iteration 277750, lr = 1e-05
I1222 12:25:15.731434  2126 solver.cpp:228] Iteration 277800, loss = 1.79811
I1222 12:25:15.731550  2126 solver.cpp:244]     Train net output #0: accuracy = 0.78125
I1222 12:25:15.731564  2126 solver.cpp:244]     Train net output #1: softmax_loss = 1.98719 (* 1 = 1.98719 loss)
I1222 12:25:15.731572  2126 sgd_solver.cpp:106] Iteration 277800, lr = 1e-05
I1222 12:26:07.457556  2126 solver.cpp:228] Iteration 277850, loss = 2.63742
I1222 12:26:07.457665  2126 solver.cpp:244]     Train net output #0: accuracy = 0.65625
I1222 12:26:07.457679  2126 solver.cpp:244]     Train net output #1: softmax_loss = 2.20569 (* 1 = 2.20569 loss)
I1222 12:26:07.457686  2126 sgd_solver.cpp:106] Iteration 277850, lr = 1e-05
I1222 12:26:59.228655  2126 solver.cpp:228] Iteration 277900, loss = 1.94271
I1222 12:26:59.228780  2126 solver.cpp
### Python 人脸识别换装技术实现 #### 使用的技术栈和库 为了实现基于Python的人脸识别换装技术,主要依赖于以下几个重要的库和技术: - **dlib** 和 **OpenCV**: 这两个库用于检测面部特征点以及处理图像。`dlib` 提供了强大的机器学习工具来定位人脸的关键部位;而 `OpenCV` 则提供了丰富的计算机视觉算法支持[^2]。 - **face_recognition** : 基于 dlib 的高级接口,简化了人脸识别的过程,可以直接用来识别人物身份,并且能够轻松提取脸部特征向量以便后续操作[^1]. - **PIL (Pillow)** 或者 **scikit-image** :这些图形处理库可以帮助调整服装图片大小、位置等属性使其适应目标人物的身体轮廓[^5]. #### 关键步骤概述 ##### 面部特征点检测 利用 `dlib.get_frontal_face_detector()` 函数可以快速找到视频流中的所有人脸区域。接着应用预训练好的形状预测器 (`shape_predictor_68_face_landmarks.dat`) 获取更精确的脸部标志位数据,这一步骤对于后期合成虚拟服饰至关重要: ```python detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor('path/to/shape_predictor_68_face_landmarks.dat') gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) rects = detector(gray, 0) for rect in rects: shape = predictor(gray, rect) face_shape = face_utils.shape_to_np(shape) ``` ##### 身体姿态估计与衣物匹配 虽然题目提到的是“换装”,但实际上涉及到人体的姿态分析才能更好地贴合衣服到人的身上。通常会借助深度学习框架如 TensorFlow 或 PyTorch 中的相关模型来进行多关节骨骼节点的捕捉。然而,在简单场景下也可以仅依靠已知固定角度正面照的情况下手动定义一些规则来决定衣服的位置和尺寸[^4]. ##### 图像融合 当获得了合适的衣服模板之后,就需要将其无缝地融入原始背景之中。此时可能需要用到蒙版遮罩(masking),透明度混合(alpha blending)等技巧让新加入的对象看起来更加自然. ```python import numpy as np from PIL import Image def overlay_clothes(image_path, clothes_image_path): base_img = Image.open(image_path).convert("RGBA") overlay_img = Image.open(clothes_image_path).convert("RGBA") # Adjust size and position of the clothing image here... combined = Image.alpha_composite(base_img, overlay_img) return combined ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值