3.6 KiB
3.6 KiB
人脸特征维度说明
当前特征维度
当前模型输出: 1024维
根据 face_recognizer.onnx 模型的输出节点信息:
- 输出节点名称:
fc1_act_50 - 输出形状:
[None, 1024, 1, 1] - 实际特征维度: 1024维 (经过 flatten 后)
特征维度是否可调整?
❌ 运行时无法调整
特征维度由预训练的ONNX模型决定,运行时无法修改。
原因:
- 特征维度是模型架构的固有属性
- 1024维是模型最后一层全连接层的输出大小
- 修改维度需要重新训练模型或使用降维技术
✅ 可选方案
如果确实需要调整特征维度,有以下几种方式:
方案1: 使用降维技术 (推荐用于存储优化)
from sklearn.decomposition import PCA
import numpy as np
# 提取1024维特征
feature_1024 = extractor.extract_single_feature(image) # shape: (1024,)
# 使用PCA降维到512维
pca = PCA(n_components=512)
# 需要先用大量特征训练PCA模型
pca.fit(training_features) # training_features shape: (N, 1024)
# 降维
feature_512 = pca.transform(feature_1024.reshape(1, -1)) # shape: (1, 512)
优点:
- 减少存储空间 (512维约为原来的50%)
- 保留大部分判别信息
- 不需要重新训练模型
缺点:
- 需要收集训练数据训练PCA
- 会损失部分精度
- 增加预处理步骤
方案2: 哈希降维 (快速但有精度损失)
import numpy as np
def hash_reduce_dimension(feature, target_dim=512):
"""使用随机投影降维"""
# 创建固定的随机投影矩阵
np.random.seed(42)
projection_matrix = np.random.randn(1024, target_dim)
projection_matrix /= np.linalg.norm(projection_matrix, axis=0)
# 投影降维
reduced_feature = np.dot(feature, projection_matrix)
# 归一化
reduced_feature /= np.linalg.norm(reduced_feature)
return reduced_feature
# 使用
feature_512 = hash_reduce_dimension(feature_1024, target_dim=512)
优点:
- 无需训练,即插即用
- 速度快
缺点:
- 精度损失较大
- 不保证最优性
方案3: 使用不同的预训练模型
更换为输出不同维度的人脸识别模型:
常见模型及其特征维度:
- ArcFace (ResNet50): 512维
- FaceNet: 128维 或 512维
- CosFace: 512维
- 当前模型: 1024维
方案4: 修改API返回部分特征
如果只是为了API传输优化,可以选择只返回前N维:
# 在 app.py 中修改
feature_vector = face_info.feature[:512].tolist() # 只返回前512维
⚠️ 警告: 这会严重影响识别精度,不推荐!
建议
如果是为了节省存储空间:
👉 使用方案1 (PCA降维) - 平衡存储和精度
如果是为了API传输优化:
👉 保持1024维 - 可以使用GZIP压缩传输:
import gzip
import json
# 压缩特征
feature_json = json.dumps(feature).encode('utf-8')
compressed = gzip.compress(feature_json)
# 传输压缩数据...
# 解压
decompressed = gzip.decompress(compressed)
feature = json.loads(decompressed.decode('utf-8'))
如果必须使用特定维度:
👉 更换为对应维度的预训练模型 (需要重新部署)
当前API配置
# 当前配置
feature_dim = 1024 # 固定值
similarity_threshold = 0.7 # 可调整阈值
总结
- ✅ 特征维度: 1024维 (固定)
- ❌ 运行时无法调整
- ✅ 可以使用降维技术优化存储
- ✅ 可以更换模型改变维度
- ⚠️ 不建议截断特征向量
如有其他问题,请查看:
- API文档: API_USAGE.md
- 模型代码: models/facerecoger.py