模型名称: nsfw_image_detector (Freepik/nsfw_image_detector)
模型链接: Freepik/nsfw_image_detector
模型描述: 基于 EVA-02 架构微调的 NSFW 图像四分类检测模型,在 10 万张合成标注图像上训练,可对图像内容进行 neutral(中性)/ low(低风险)/ medium(中风险)/ high(高风险)四级分类,也支持按阈值等级(low/medium/high)做 NSFW 二分类判定。在 Freepik 内部基准上,High 类别准确率 99.54%、Neutral 99.87%。
模型架构: EVA-02 (Base, patch14/448),timm 封装(TimmWrapperForImageClassification),448x448 输入
参数规模: 86.4M
相关获取地址:
| 组件 | 版本 |
|---|---|
torch | 2.9.0 |
torch-npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
timm | 1.0.28 |
numpy | 2.x |
Pillow | 12.2.0 |
| 昇腾驱动 / CANN | npu-smi 25.5.5 |
2 逻辑卡(Ascend910)/opt/atomgit/0820/nsfw_image_detectornpu:0bfloat16(官方推荐)| 依赖项 | 版本要求 | 说明 |
|---|---|---|
| Python | >= 3.10 | 推荐 3.11 |
| torch | >= 2.1.0 | 本验证使用 2.9.0 |
| torch_npu | >= 2.1.0 | 昇腾 NPU 插件(随 CANN 安装) |
| transformers | >= 4.45.0 | 本验证使用 4.57.6 |
| timm | >= 1.0.0 | TimmWrapperForImageClassification 与图像预处理依赖 |
| numpy | >= 1.24.0 | 数值计算 |
| Pillow | >= 9.0.0 | 图像处理 |
安装命令:
# 使用清华源安装基础依赖
pip install torch torch_npu transformers timm numpy Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
# torch_npu 需与 CANN 版本配套,亦可从昇腾官方源安装:
# pip install torch_npu -i https://pypi.ascend.com/pypi/simple或直接使用仓库内 requirements.txt 一键安装:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 检查 NPU 设备
npu-smi infocd /opt/atomgit/0820/nsfw_image_detector
# 默认推理(内置双样例:自然风景 + 人物剪影)
python inference.py
# 检测指定本地图片
python inference.py --image ./img.jpg
# 检测指定 URL 图片
python inference.py --image_url https://example.com/image.jpg
# 自定义 NSFW 判定阈值等级(low/medium/high)
python inference.py --image ./img.jpg --threshold high| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| --model_path | str | 脚本所在目录 | 模型权重目录 |
| --image | str | - | 输入图片路径 |
| --image_url | str | - | 输入图片 URL |
| --threshold | str | medium | NSFW 判定阈值等级(low/medium/high) |
| --device | str | auto | 推理设备(auto/npu:0/cuda:0/cpu) |
输入:
python inference.py输出:
[INFO] 设备类型: npu | 设备: npu:0
[INFO] 正在加载 NSFW 检测模型: /opt/atomgit/0820/nsfw_image_detector
[INFO] 模型加载成功 | 设备: npu:0 | 参数量: 86.4M | 精度: bf16
[INFO] 图像预处理: 448x448 + CLIP 归一化 (Compose)
[INFO] 待检测图像数量: 2 | 判定阈值: medium
============================================================
Running inference on NPU...
============================================================
----- 样例 1: 中性示例:自然风景 -----
neutral = 0.9997
low = 0.0001
medium = 0.0001
high = 0.0001
最高概率类别 = neutral (0.9997)
NSFW 累计概率 (medium+) = 0.0002
判定结果 = SFW
单图推理耗时 = 321.3 ms
----- 样例 2: 中性示例:人物剪影 -----
neutral = 0.9994
low = 0.0002
medium = 0.0002
high = 0.0003
最高概率类别 = neutral (0.9994)
NSFW 累计概率 (medium+) = 0.0005
判定结果 = SFW
单图推理耗时 = 10.2 ms
============================================================
Inference completed! nsfw_image_detector 在昇腾 NPU 上推理成功!
============================================================完整运行日志(含推理期间 npu-smi info 采样及进程占用情况)见 run_npu.log。
输入:
python inference.py --image ./my_image.jpg --threshold low输出:
[INFO] 设备类型: npu | 设备: npu:0
[图片] 本地图片: ./my_image.jpg
[INFO] 待检测图像数量: 1 | 判定阈值: low
...
----- 样例 1: 本地图片: ./my_image.jpg -----
neutral = <中性概率>
low = <低风险概率>
medium = <中风险概率>
high = <高风险概率>
最高概率类别 = <概率最高类别>
NSFW 累计概率 (low+) = <累计概率>
判定结果 = NSFW / SFW
单图推理耗时 = ~300 ms| 指标 | 数值 |
|---|---|
| 模型参数量 | 86.4M |
| 模型加载 + 权重迁移至 NPU | ~11 s |
| 单图前向推理(448x448 输入,bf16) | ~300 ms(首图)/ ~10 ms(预热后) |
| NPU 显存占用(推理期间) | 392 MB |
| NPU 芯片 | Ascend910 / 2 逻辑卡 |
推理期间通过 npu-smi info 多次采样可观察到 python3 进程实际占用 NPU(进程内存 392MB,推理时 AICore 利用率最高达 13%、HBM 用量 3108MB 升至 3534MB),详见 run_npu.log。
torch_npu 调用 NPU 设备(check_device() 自动优先选择 npu:0),未检测到 NPU 时回退 CPU/CUDA。bfloat16 精度加载(训练即使用 bf16),本脚本默认 bf16。create_transform + resolve_data_config(eva02_base_patch14_448 配置:448x448 squash resize + CLIP 归一化),与官方推理方式一致,不依赖 HF 的 image processor。timm 包(TimmWrapperForImageClassification 架构与预处理均需 timm >= 1.0)。--threshold medium 时取 medium+high 之和)。--image 或 --image_url 传入真实图片。