HelloSun's picture
InsightFace inswapper -> OpenVINO FP16/INT8/INT4 (+INT4-mixed) models, single-file swapper, samples with PD NASA portraits
c6ec17d verified
|
Raw History Blame Contribute Delete
3.74 kB
# 換臉效果對比(16 / 8 / 4 bit)
素材為 **NASA 公有領域**太空人官方肖像照片,用同一套程式碼分別跑
**ONNX Runtime FP32(參考)** 與 **OpenVINO fp16 / int8 / int4 / int4-mixed**。
![face montage](20_face_montage.jpg)
## 素材與授權
| 角色 | 檔案 | 來源 |
|---|---|---|
| 來源臉孔 | `input/source_face_nasa_astronaut.jpg` | NASA Johnson Space Center,`jsc2016e096719`(JAXA 太空人 Soichi Noguchi 官方肖像) |
| 目標照片 | `input/target_photo_nasa_astronaut.jpg` | NASA,`jsc2017e063393`(Expedition 54/55 太空人官方肖像) |
* NASA 影像頁面:https://images.nasa.gov/details/jsc2016e096719 、 https://images.nasa.gov/details/jsc2017e063393
* 授權:**公有領域(Public Domain)**,NASA 媒體一般不受版權保護。
## 檔案
| 檔案 | 說明 |
|---|---|
| `00_source_face.jpg` | 來源臉孔對齊後的 128×128 crop |
| `01_target_original_face.jpg` | 目標臉孔(換臉前) |
| `02_target_original.jpg` | 目標照片原圖(1280×1024) |
| `03_onnxruntime_fp32_reference.jpg` | **ONNX Runtime FP32 參考輸出** |
| `40_openvino_fp16.jpg` | OpenVINO fp16(16-bit)輸出 |
| `50_openvino_int8.jpg` | OpenVINO int8(W8A8)輸出 |
| `60_openvino_int4.jpg` | OpenVINO 純 int4(4-bit)輸出 |
| `70_openvino_int4_mixed.jpg` | OpenVINO int4/8 混合精度輸出 |
| `20_face_montage.jpg` | 128×128 換臉結果並排比較 |
| `metrics.json` | 機讀指標 |
## 指標
`PSNR/SSIM` 以 ONNX Runtime FP32(完全相同的預處理與貼回程式碼)為參考;
`embedding cos` 是 OpenVINO ArcFace 算出的來源 embedding 與 FP32 的餘弦相似度。
| 精度 | swapper 大小 | 臉部 PSNR ↑ | 臉部 SSIM ↑ | 全圖 PSNR ↑ | embedding cos ↑ | 單次換臉 ↑ |
|---|---|---|---|---|---|---|
| ONNX Runtime FP32(參考) | 554.3 MB | – | – | – | 1.00000 | 8.08 s |
| fp16 (16-bit) | 276.9 MB | **56.29 dB** | **0.9994** | **71.02 dB** | 1.00000 | 0.47 s |
| int8 (8-bit) | 139.1 MB | 19.28 dB | 0.5557 | 37.09 dB | 0.97941 | **0.09 s** |
| int4-mixed(75% 權重 4-bit) | 91.7 MB | 17.28 dB | 0.6721 | 37.70 dB | 0.94709 | 0.40 s |
| int4(純 4-bit) | **69.7 MB** | 14.79 dB | 0.5317 | 32.29 dB | 0.94709 | 0.43 s |
測試機:Xeon Platinum 8559C(16 vCPU)、OpenVINO 2026.4.1;1280×1024 照片、單張臉。
## 觀察
1. **fp16 與原模型幾乎無差**(56 dB / SSIM 0.9994),速度快 17×,大小減半 → 預設推薦。
2. **int8 最快**(0.09 s,比 ONNX Runtime FP32 快 87×),模型只有原版 1/4;
臉部有細微顆粒雜訊,但辨識度與膚色都正常。
3. **int4-mixed 是 4-bit 路線的實用點**:膚色正常、沒有明顯色偏,
在 PSNR 上甚至比 int8 好一點(因為它在活化函數附近保留了 INT8 層),大小 91.7 MB。
4. **純 int4 不可用**:swapper 是類 GAN 網路,4-bit 權重讓膚色整個偏綠/偏橙,
這點在 montage 右下看得很清楚。若一定要「最小模型 + 可接受品質」,
請用 `int4-mixed`。
5. `embedding cos` 一欄提醒:**ArcFace 的量化精度會直接影響換到誰的臉**。
int8 的 cosine 0.979 已足夠安全;用隨機雜訊做校準的話會掉到 0.78(會換錯人),
所以本 repo 的匯出流程強制使用真實人臉校準資料。
## 重現
```bash
python make_calib_data.py --images "input/*.jpg" --samples 24 --out-dir calib
python export_openvino_inswapper.py --onnx-dir onnx --out-dir models --calib-dir calib
python make_sample.py --onnx-dir onnx --models-dir models --out-dir samples
```
> 請勿將換臉結果用於冒充他人或未經同意的用途;InsightFace 模型僅限非商業研究用途。