z
zkx_/rizvandwiki--gender-classification-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

rizvandwiki/gender-classification on Ascend NPU

1. 简介

本文档记录 rizvandwiki/gender-classification 性别分类模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。

该模型基于 ViT(Vision Transformer,12 层,768 维)在人脸数据集上微调,支持二分类:female(女性)和 male(男性)。输入为 224×224 RGB 人脸图像,通过 AutoImageProcessor 进行 resize + normalize 预处理,输出 2 维 softmax 概率分布。

模型属于轻量级 ViT 二分类器,适用于人脸属性分析、人口统计等应用场景。与多分类模型不同,二分类结构使推理效率更高。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/rizvandwiki/gender-classification

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers5.8.1
CANN8.5.1
  • NPU:8 × Ascend 910B3
  • 精度对比基准:CPU(x86, PyTorch 2.8.0)

3. 部署使用流程

3.1 环境准备

conda create -n rizvandwiki--gender-classification python=3.11 -y
conda activate rizvandwiki--gender-classification

pip install torch==2.8.0 torch_npu==2.8.0.post4 \
    -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers torchvision pillow numpy \
    -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 推理脚本使用

python inference.py --image face.jpg --device npu
python inference.py --image_dir ./faces/ --device npu

编程接口:

from inference import AgeClassifier as GenderClassifier
clf = GenderClassifier(
    model_path="./rizvandwiki--gender-classification", device="npu"
)
results = clf.predict(["face.jpg"])
# results[0] → {'female': 0.92, 'male': 0.08}

4. Smoke 验证

python inference.py --image face.jpg --device npu

预期输出:female 和 male 两种标签的概率值(和为 1.0),预测概率最高者为首选,无运行时错误。模型目录含示例图片(images/),可用于快速验证。

5. 性能参考

测试条件:10 张合成 224×224 图像(固定随机种子),batch_size=8,NPU 预热 1 轮。

指标数值
CPU 吞吐量3.6 img/s
NPU 吞吐量247.9 img/s
CPU/NPU 加速比68.3 ×

ViT-base 在 NPU 上获得极高加速比(68×),主要得益于 NPU 对 Transformer 注意力算子的深度优化。二分类结构(2 维输出)进一步提升推理效率。

6. 精度评测

6.1 评测方法

分别在 CPU 和 NPU 上推理 10 张合成图像(固定随机种子保证输入一致),比较 softmax 概率向量的余弦相似度、MAE 和 Top-1 分类一致性。

6.2 评测结果

指标数值
平均余弦相似度1.000000
MAE0.000096
精度误差率0.0000%
Top-1 准确率100.0%

结论:精度误差率 0.0000%,NPU 与 CPU 输出完全一致,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Backbone:ViT-base-patch16-224(12 层 Transformer,768 维隐藏层,16×16 patch 划分)
  • Classifier Head:线性层(768 → 2),2 类 softmax(female / male)
  • 输入:224×224 RGB 图像 → 196 个 patch tokens + 1 个 CLS token
  • 权重格式:pytorch_model.bin(无 safetensors),from_pretrained 自动兼容
  • 参数量:85.8M(ViT-base 标准规模)
  • 额外资源:包含示例图片(images/)和训练日志(runs/)

7.2 适配要点

  1. 使用 AutoModelForImageClassification.from_pretrained() 加载
  2. model.to("npu:0") 一步迁移,ViT 的 Transformer 和 Patch Embedding 算子 NPU 原生支持
  3. AutoImageProcessor 在 CPU 完成图像预处理(resize 到 224×224 + ImageNet 标准化)
  4. 输入 tensor 通过 .to("npu:0") 转移至 NPU
  5. 输出 softmax 后通过 .cpu().numpy() 返回;二分类只需比较两个概率值即可决策

7.3 关键代码

import torch, torch_npu
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForImageClassification

model = AutoModelForImageClassification.from_pretrained(
    "gender-classification"
).to("npu:0")
processor = AutoImageProcessor.from_pretrained("gender-classification")

image = Image.open("face.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)
    probs = torch.softmax(outputs.logits, dim=-1)
    gender = model.config.id2label[int(torch.argmax(probs))]
    confidence = float(torch.max(probs))

8. 注意事项

  1. 二分类单标签:仅 female / male 两种类别,使用 softmax(互斥,和为 1.0)。非二元性别模型,不可用于非二分类场景。
  2. 输入图像质量:最佳输入为正面人脸照片,侧面、遮挡、低分辨率或非人脸图像会导致分类结果不可靠。示例图片(images/)可用作输入格式参考。
  3. NPU 预热:首次推理触发算子编译(约 3-5 秒),ViT 的 12 层 Transformer 编译时间适中。建议生产环境预热后使用。
  4. pytorch_model.bin 格式:仅含 .bin 权重(无 safetensors),from_pretrained 自动兼容。与 safetensors 相比,加载速度略慢但功能等价。
  5. 合成图像评测说明:精度评测使用合成随机图像而非真实人脸照片,因为评测焦点在 NPU 与 CPU 算子输出一致性(即 logits 是否相同),而非模型本身的分类准确性。
  6. 与 vit-face-expression 对比:同属 ViT-base-patch16-224 架构(85.8M),仅分类头维度不同(2 vs 7),适配代码可互用。