🚀 人脸解析模型
本项目是一个用于人脸解析的语义分割模型,它基于 nvidia/mit-b5 模型,并使用 CelebAMask-HQ 数据集进行微调。该模型可用于将人脸图像分割为不同的语义区域,如皮肤、鼻子、眼睛等。此外,项目还提供了适用于 Python 和浏览器的使用示例,方便开发者集成。

语义分割 模型从 nvidia/mit-b5 微调而来,使用 CelebAMask-HQ 数据集进行人脸解析。更多选项请参阅 Transformers Segformer 文档。
用于 Web 推理的 ONNX 模型由 Xenova 贡献。
📚 详细文档
标签信息
完整的标签列表可以从 config.json 中提取。
编号 |
标签 |
说明 |
0 |
background |
背景 |
1 |
skin |
皮肤 |
2 |
nose |
鼻子 |
3 |
eye_g |
眼镜 |
4 |
l_eye |
左眼 |
5 |
r_eye |
右眼 |
6 |
l_brow |
左眉毛 |
7 |
r_brow |
右眉毛 |
8 |
l_ear |
左耳 |
9 |
r_ear |
右耳 |
10 |
mouth |
嘴唇间区域 |
11 |
u_lip |
上嘴唇 |
12 |
l_lip |
下嘴唇 |
13 |
hair |
头发 |
14 |
hat |
帽子 |
15 |
ear_r |
耳环 |
16 |
neck_l |
项链 |
17 |
neck |
脖子 |
18 |
cloth |
衣服 |
💻 使用示例
基础用法(Python)
import torch
from torch import nn
from transformers import SegformerImageProcessor, SegformerForSemanticSegmentation
from PIL import Image
import matplotlib.pyplot as plt
import requests
device = (
"cuda"
if torch.cuda.is_available()
else "mps"
if torch.backends.mps.is_available()
else "cpu"
)
image_processor = SegformerImageProcessor.from_pretrained("jonathandinu/face-parsing")
model = SegformerForSemanticSegmentation.from_pretrained("jonathandinu/face-parsing")
model.to(device)
url = "https://images.unsplash.com/photo-1539571696357-5a69c17a67c6"
image = Image.open(requests.get(url, stream=True).raw)
inputs = image_processor(images=image, return_tensors="pt").to(device)
outputs = model(**inputs)
logits = outputs.logits
upsampled_logits = nn.functional.interpolate(logits,
size=image.size[::-1],
mode='bilinear',
align_corners=False)
labels = upsampled_logits.argmax(dim=1)[0]
labels_viz = labels.cpu().numpy()
plt.imshow(labels_viz)
plt.show()
基础用法(浏览器 - Transformers.js)
import {
pipeline,
env,
} from "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.14.0";
env.allowLocalModels = false;
model = await pipeline("image-segmentation", "jonathandinu/face-parsing");
const output = await model(url);
for (const m of output) {
print(`Found ${m.label}`);
m.mask.save(`${m.label}.png`);
}
高级用法(p5.js)
由于 p5.js 使用动画循环抽象,我们需要注意加载模型和进行预测。
async function preload() {
const { pipeline, env } = await import(
"https://cdn.jsdelivr.net/npm/@xenova/transformers@2.14.0"
);
env.allowLocalModels = false;
model = await pipeline("image-segmentation", "jonathandinu/face-parsing");
print("face-parsing 模型已加载");
}
完整 p5.js 示例
模型信息
⚠️ 局限性和偏差
虽然计算机视觉模型的能力令人印象深刻,但它们也可能强化或加剧社会偏差。用于微调的 CelebAMask-HQ 数据集虽然很大,但不一定具有完美的多样性或代表性。此外,这些图像仅来自名人。