|
|
|
|
@ -1,2 +1,752 @@
|
|
|
|
|
# MuseGuard
|
|
|
|
|
|
|
|
|
|
# MuseGuard
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
<strong>基于对抗性扰动的多风格图像生成防护系统</strong>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
<em>Adversarial Perturbation-based Multi-style Image Generation Protection System</em>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 项目简介
|
|
|
|
|
|
|
|
|
|
### 背景与动机
|
|
|
|
|
|
|
|
|
|
近年来,以 Stable Diffusion、DreamBooth、LoRA 为代表的 AI 图像生成技术取得了突破性进展。这些技术仅需少量样本图片,即可在短时间内学习并复制特定人物的面部特征或艺术家的独特风格,生成高度逼真的仿冒图像。这一能力在带来创作便利的同时,也引发了严重的版权侵权和隐私安全问题:
|
|
|
|
|
|
|
|
|
|
- **艺术家权益受损**:原创作品风格被轻易模仿,创作者的独特性和商业价值遭到侵蚀
|
|
|
|
|
- **人脸隐私泄露**:个人照片可能被用于生成虚假内容,造成名誉损害或诈骗风险
|
|
|
|
|
- **版权保护困境**:传统水印技术在 AI 时代已难以有效防护,亟需新的技术手段
|
|
|
|
|
|
|
|
|
|
### 解决方案
|
|
|
|
|
|
|
|
|
|
**MuseGuard** 是一个面向图像版权保护的 Web 平台,采用前沿的对抗性扰动(Adversarial Perturbation)技术,在图像中嵌入人眼不可见的微小噪声。这些精心设计的扰动能够有效干扰 AI 模型的学习过程,使其无法准确提取和复制图像中的关键特征,从而实现对原始作品的主动防护。
|
|
|
|
|
|
|
|
|
|
与传统的被动式版权保护(如水印、版权声明)不同,MuseGuard 采用"主动防御"策略——在图像被滥用之前就进行预防性保护,从源头上阻止 AI 模型的恶意学习行为。
|
|
|
|
|
|
|
|
|
|
### 核心优势
|
|
|
|
|
|
|
|
|
|
- **不可见性**:添加的对抗性扰动对人眼几乎不可见,不影响图像的正常观赏和使用
|
|
|
|
|
- **有效性**:经过严格的学术验证,能够显著降低 AI 模型的学习效果
|
|
|
|
|
- **多样性**:集成 ASPL、SimAC、CAAT、Glaze 等多种主流防护算法,适应不同场景需求
|
|
|
|
|
- **易用性**:提供友好的 Web 界面,无需专业知识即可完成图像防护
|
|
|
|
|
- **可验证**:内置效果验证模块,通过 FID、LPIPS 等指标量化评估防护效果
|
|
|
|
|
|
|
|
|
|
### 核心功能
|
|
|
|
|
|
|
|
|
|
- **通用防护**:支持 ASPL、SimAC、CAAT、CAAT Pro、PID、Glaze 等多种防护算法
|
|
|
|
|
- **专题防护**:针对人脸定制生成、人脸编辑、风格迁移等特定攻击场景的定制化防护
|
|
|
|
|
- **效果验证**:通过微调测试、质量评估(FID/LPIPS/SSIM/PSNR)、热力图分析验证防护效果
|
|
|
|
|
- **异步任务处理**:基于 Redis + RQ 的任务队列,支持大规模图片批量处理
|
|
|
|
|
- **深色/浅色主题**:支持 Kinetic Typography 设计风格的双主题切换
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 技术栈
|
|
|
|
|
|
|
|
|
|
### 后端
|
|
|
|
|
|
|
|
|
|
| 类别 | 技术 | 版本 |
|
|
|
|
|
| -------- | ------------------ | ------ |
|
|
|
|
|
| Web 框架 | Flask | 3.0.0 |
|
|
|
|
|
| ORM | Flask-SQLAlchemy | 3.1.1 |
|
|
|
|
|
| 数据库 | MySQL + PyMySQL | 1.1.1 |
|
|
|
|
|
| 缓存 | Redis | 5.0.1 |
|
|
|
|
|
| 任务队列 | RQ (Redis Queue) | 1.16.2 |
|
|
|
|
|
| 认证 | Flask-JWT-Extended | 4.6.0 |
|
|
|
|
|
| 跨域 | Flask-CORS | 5.0.0 |
|
|
|
|
|
| 图像处理 | Pillow | 10.4.0 |
|
|
|
|
|
| 数值计算 | NumPy | 1.26.4 |
|
|
|
|
|
|
|
|
|
|
### 前端
|
|
|
|
|
|
|
|
|
|
| 类别 | 技术 | 版本 |
|
|
|
|
|
| --------- | ----------------------- | ------- |
|
|
|
|
|
| 框架 | Vue 3 (Composition API) | 3.5.24 |
|
|
|
|
|
| 构建工具 | Vite | 7.2.4 |
|
|
|
|
|
| 路由 | Vue Router | 4.6.3 |
|
|
|
|
|
| 状态管理 | Pinia | 2.1.0 |
|
|
|
|
|
| HTTP 请求 | Axios | 1.13.2 |
|
|
|
|
|
| 3D 可视化 | Three.js | 0.182.0 |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
访问线上部署地址 **http://1.95.170.34** 即可体验系统功能,无需本地配置环境。
|
|
|
|
|
|
|
|
|
|
> 如需本地开发部署,请参考后文的 [部署与开发指南](#部署与开发指南)。
|
|
|
|
|
|
|
|
|
|
### 操作流程
|
|
|
|
|
|
|
|
|
|
**注册与登录**
|
|
|
|
|
|
|
|
|
|
1. 点击"注册",填写邮箱并获取验证码
|
|
|
|
|
2. 完成注册后使用邮箱和密码登录
|
|
|
|
|
|
|
|
|
|
**图像防护(核心功能)**
|
|
|
|
|
|
|
|
|
|
1. 进入"通用防护"或"快速防护"页面
|
|
|
|
|
2. 上传需要保护的图片(支持 JPG/PNG,建议 512x512)
|
|
|
|
|
3. 选择防护算法(ASPL、SimAC、CAAT 等)
|
|
|
|
|
4. 调整扰动强度(epsilon 值)
|
|
|
|
|
5. 点击"开始处理",等待任务完成后下载结果
|
|
|
|
|
|
|
|
|
|
**专题防护**
|
|
|
|
|
|
|
|
|
|
- 防定制生成:防止人脸被用于 AI 定制化生成
|
|
|
|
|
- 防人脸编辑:保护人脸图像免受 AI 编辑修改
|
|
|
|
|
- 风格迁移防护:保护艺术作品免受风格模仿
|
|
|
|
|
|
|
|
|
|
**效果验证**
|
|
|
|
|
|
|
|
|
|
1. 选择已完成的加噪任务,创建微调任务模拟 AI 训练
|
|
|
|
|
2. 创建评估任务查看 FID/LPIPS/SSIM/PSNR 指标
|
|
|
|
|
3. 生成热力图可视化防护效果
|
|
|
|
|
|
|
|
|
|
**任务管理**
|
|
|
|
|
|
|
|
|
|
侧边栏实时显示任务状态,支持查看详情、下载结果、取消任务。
|
|
|
|
|
|
|
|
|
|
## 系统架构
|
|
|
|
|
|
|
|
|
|
### 目录结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
MuseGuard/
|
|
|
|
|
├── doc/ # 项目文档
|
|
|
|
|
│ ├── process/weekly/ # 周报与周计划
|
|
|
|
|
│ └── project/ # 项目文档
|
|
|
|
|
│ ├── 01-需求文档/ # 需求规格说明书、用例文档
|
|
|
|
|
│ ├── 02-设计文档/ # 系统设计文档
|
|
|
|
|
│ └── 03-计划文档/ # 项目计划
|
|
|
|
|
├── src/
|
|
|
|
|
│ ├── backend/ # 后端服务
|
|
|
|
|
│ │ ├── app/ # Flask 应用主目录
|
|
|
|
|
│ │ │ ├── algorithms/ # 防护算法实现
|
|
|
|
|
│ │ │ │ ├── evaluate/ # 评估算法
|
|
|
|
|
│ │ │ │ ├── finetune/ # 微调算法
|
|
|
|
|
│ │ │ │ ├── perturbation/ # 加噪算法
|
|
|
|
|
│ │ │ │ └── processor/ # 处理器
|
|
|
|
|
│ │ │ ├── controllers/ # 控制器(路由处理)
|
|
|
|
|
│ │ │ │ ├── admin_controller.py
|
|
|
|
|
│ │ │ │ ├── auth_controller.py
|
|
|
|
|
│ │ │ │ ├── image_controller.py
|
|
|
|
|
│ │ │ │ ├── task_controller.py
|
|
|
|
|
│ │ │ │ └── user_controller.py
|
|
|
|
|
│ │ │ ├── database/ # 数据库模型定义
|
|
|
|
|
│ │ │ ├── repositories/ # 数据访问层
|
|
|
|
|
│ │ │ │ ├── base_repository.py
|
|
|
|
|
│ │ │ │ ├── config_repository.py
|
|
|
|
|
│ │ │ │ ├── image_repository.py
|
|
|
|
|
│ │ │ │ ├── task_repository.py
|
|
|
|
|
│ │ │ │ └── user_repository.py
|
|
|
|
|
│ │ │ ├── services/ # 业务逻辑层
|
|
|
|
|
│ │ │ │ ├── cache/ # 缓存服务
|
|
|
|
|
│ │ │ │ ├── email/ # 邮件服务
|
|
|
|
|
│ │ │ │ ├── image/ # 图片处理服务
|
|
|
|
|
│ │ │ │ ├── storage/ # 存储服务
|
|
|
|
|
│ │ │ │ ├── task/ # 任务服务
|
|
|
|
|
│ │ │ │ ├── image_service.py
|
|
|
|
|
│ │ │ │ ├── task_service.py
|
|
|
|
|
│ │ │ │ ├── user_service.py
|
|
|
|
|
│ │ │ │ └── vip_service.py
|
|
|
|
|
│ │ │ ├── workers/ # RQ 任务队列处理
|
|
|
|
|
│ │ │ │ ├── evaluate_worker.py
|
|
|
|
|
│ │ │ │ ├── finetune_worker.py
|
|
|
|
|
│ │ │ │ ├── heatmap_worker.py
|
|
|
|
|
│ │ │ │ └── perturbation_worker.py
|
|
|
|
|
│ │ │ ├── scripts/ # 算法执行脚本
|
|
|
|
|
│ │ │ │ ├── attack_*.sh # 各类加噪攻击脚本
|
|
|
|
|
│ │ │ │ ├── finetune_*.sh # 微调脚本
|
|
|
|
|
│ │ │ │ └── eva_*.sh # 评估脚本
|
|
|
|
|
│ │ │ └── utils/ # 工具类
|
|
|
|
|
│ │ │ ├── file_utils.py
|
|
|
|
|
│ │ │ └── jwt_utils.py
|
|
|
|
|
│ │ ├── config/ # 配置文件
|
|
|
|
|
│ │ │ ├── algorithm_config.py # 算法配置
|
|
|
|
|
│ │ │ └── settings.py # 应用配置
|
|
|
|
|
│ │ ├── app.py # Flask 应用入口
|
|
|
|
|
│ │ ├── run.py # 启动脚本
|
|
|
|
|
│ │ ├── worker.py # RQ Worker 启动
|
|
|
|
|
│ │ ├── init_db.py # 数据库初始化
|
|
|
|
|
│ │ ├── start.sh / stop.sh / status.sh # 服务管理脚本
|
|
|
|
|
│ │ └── requirements.txt # Python 依赖
|
|
|
|
|
│ └── frontend/ # 前端应用
|
|
|
|
|
│ ├── public/ # 静态资源
|
|
|
|
|
│ └── src/ # Vue 源码
|
|
|
|
|
│ ├── api/ # API 接口
|
|
|
|
|
│ ├── components/ # UI 组件库
|
|
|
|
|
│ ├── router/ # 路由配置
|
|
|
|
|
│ ├── stores/ # 状态管理
|
|
|
|
|
│ ├── utils/ # 工具函数
|
|
|
|
|
│ └── views/ # 页面视图
|
|
|
|
|
└── README.md # 项目说明
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 架构图
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
|
|
|
│ 用户浏览器 │
|
|
|
|
|
│ (Vue 3 SPA 应用) │
|
|
|
|
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
|
|
|
│ HTTP/HTTPS
|
|
|
|
|
▼
|
|
|
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
|
|
|
│ Vite 开发服务器 │
|
|
|
|
|
│ (开发环境代理 /api) │
|
|
|
|
|
│ localhost:5173 │
|
|
|
|
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
|
|
|
│ 代理转发
|
|
|
|
|
▼
|
|
|
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
|
|
|
│ Flask 后端服务 │
|
|
|
|
|
│ localhost:6006 │
|
|
|
|
|
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
|
|
|
│ │ Controllers (路由层) │ │
|
|
|
|
|
│ │ ├── auth_controller 认证接口 │ │
|
|
|
|
|
│ │ ├── user_controller 用户配置 │ │
|
|
|
|
|
│ │ ├── task_controller 任务管理 │ │
|
|
|
|
|
│ │ ├── image_controller 图片处理 │ │
|
|
|
|
|
│ │ └── admin_controller 管理后台 │ │
|
|
|
|
|
│ └──────────────────────────────────────────────────────────┘ │
|
|
|
|
|
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
|
|
|
│ │ Services (业务层) + Repositories (数据层) │ │
|
|
|
|
|
│ └──────────────────────────────────────────────────────────┘ │
|
|
|
|
|
└───────────┬─────────────────────────────────┬───────────────────┘
|
|
|
|
|
│ │
|
|
|
|
|
▼ ▼
|
|
|
|
|
┌───────────────────────┐ ┌───────────────────────────────┐
|
|
|
|
|
│ MySQL 数据库 │ │ Redis 缓存 │
|
|
|
|
|
│ 用户/任务/图片数据 │ │ 会话/验证码/任务队列 │
|
|
|
|
|
└───────────────────────┘ └───────────────┬───────────────┘
|
|
|
|
|
│
|
|
|
|
|
▼
|
|
|
|
|
┌───────────────────────────────┐
|
|
|
|
|
│ RQ Worker │
|
|
|
|
|
│ 异步任务处理(加噪/微调) │
|
|
|
|
|
└───────────────────────────────┘
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 前后端连接方式
|
|
|
|
|
|
|
|
|
|
#### 开发环境
|
|
|
|
|
|
|
|
|
|
前端通过 Vite 代理转发 API 请求到后端:
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// vite.config.js
|
|
|
|
|
server: {
|
|
|
|
|
port: 5173,
|
|
|
|
|
proxy: {
|
|
|
|
|
'/api': {
|
|
|
|
|
target: 'http://127.0.0.1:6006', // 后端服务地址
|
|
|
|
|
changeOrigin: true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 生产环境(混合云架构)
|
|
|
|
|
|
|
|
|
|
本项目的生产部署采用 **华为云 Flexus 实例(前端 & 网关)** 与 **AutoDL 算力容器(后端)** 的混合架构。由于算力容器通常位于内网且端口动态变化,通过 **SSH 隧道** 技术打通全链路通信。
|
|
|
|
|
|
|
|
|
|
**通信链路**:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
用户 → 域名 → Nginx (:80) → 华为云 SSH 隧道 (8080) → AutoDL 容器 (6006)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Nginx 反向代理配置**:
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
server {
|
|
|
|
|
listen 80;
|
|
|
|
|
server_name your-domain.com;
|
|
|
|
|
|
|
|
|
|
# 前端静态文件
|
|
|
|
|
location / {
|
|
|
|
|
root /path/to/frontend/dist;
|
|
|
|
|
try_files $uri $uri/ /index.html;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# API 代理到后端(通过 SSH 隧道)
|
|
|
|
|
location /api/ {
|
|
|
|
|
proxy_pass http://127.0.0.1:8080; # 指向华为云本地隧道入口
|
|
|
|
|
proxy_method $request_method; # 透传请求方法
|
|
|
|
|
proxy_set_header Host $http_host;
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
|
|
|
|
|
|
|
# 文件上传大小限制
|
|
|
|
|
client_max_body_size 50M;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**SSH 隧道建立**:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 在华为云服务器上执行,建立到 AutoDL 的 SSH 隧道
|
|
|
|
|
sudo sshpass -p [密码] ssh -fN -L 8080:127.0.0.1:6006 -p [AutoDL端口] root@connect.cqa1.seetacloud.com
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 技术要点
|
|
|
|
|
|
|
|
|
|
| 要点 | 说明 |
|
|
|
|
|
| ------------------------- | -------------------------------------------------------------------------------------------- |
|
|
|
|
|
| **跨域处理 (CORS)** | 利用 Nginx/Vite 反向代理将请求同源化,前端 Axios 统一使用相对路径 `/api` |
|
|
|
|
|
| **方法透传** | 通过 `proxy_method $request_method` 确保 POST/PUT/DELETE 等请求方法不丢失(避免 405 错误) |
|
|
|
|
|
| **路径截断控制** | `proxy_pass` 结尾不带斜杠,确保 `/api` 路径完整传递至后端(避免 404 错误) |
|
|
|
|
|
|
|
|
|
|
#### 维护与连接更新
|
|
|
|
|
|
|
|
|
|
由于 AutoDL 实例重启后 SSH 端口会发生变化,更新连接时需执行以下步骤:
|
|
|
|
|
|
|
|
|
|
1. 获取新的 AutoDL 连接指令(如 `-p 42750`)
|
|
|
|
|
2. 在华为云终端中 `kill` 掉旧的 SSH 隧道进程
|
|
|
|
|
3. 执行新的隧道指令:
|
|
|
|
|
```bash
|
|
|
|
|
sudo sshpass -p [密码] ssh -fN -L 8080:127.0.0.1:6006 -p [新端口] root@connect.cqa1.seetacloud.com
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 数据流程
|
|
|
|
|
|
|
|
|
|
#### 图像防护流程
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
用户上传图片 → 前端预处理(裁剪/缩放) → 后端接收存储 → 创建加噪任务
|
|
|
|
|
↓
|
|
|
|
|
用户下载结果 ← 前端展示结果 ← 后端返回图片 ← RQ Worker 执行算法
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 效果验证流程
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
选择加噪任务 → 创建微调任务 → RQ Worker 模拟训练 → 生成对比图
|
|
|
|
|
↓
|
|
|
|
|
创建评估任务
|
|
|
|
|
↓
|
|
|
|
|
计算 FID/LPIPS/SSIM/PSNR
|
|
|
|
|
↓
|
|
|
|
|
生成评估报告
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 认证机制
|
|
|
|
|
|
|
|
|
|
系统采用 JWT (JSON Web Token) 进行身份认证:
|
|
|
|
|
|
|
|
|
|
1. 用户登录成功后,后端签发 `access_token`
|
|
|
|
|
2. 前端将 Token 存储在 `localStorage`
|
|
|
|
|
3. 后续请求在 Header 中携带 `Authorization: Bearer <token>`
|
|
|
|
|
4. 后端通过 `@jwt_required` 装饰器验证身份
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// 前端请求拦截器 (request.js)
|
|
|
|
|
config.headers['Authorization'] = `Bearer ${token}`
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 任务队列机制
|
|
|
|
|
|
|
|
|
|
耗时任务(加噪、微调、评估)通过 Redis + RQ 异步处理:
|
|
|
|
|
|
|
|
|
|
1. 用户提交任务 → 后端创建任务记录(状态:`waiting`)
|
|
|
|
|
2. 任务入队 → RQ Worker 从队列取出执行
|
|
|
|
|
3. 执行中更新状态为 `processing`
|
|
|
|
|
4. 完成后更新状态为 `completed` 或 `failed`
|
|
|
|
|
5. 前端每 5 秒轮询任务状态
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 功能模块
|
|
|
|
|
|
|
|
|
|
### 用户系统
|
|
|
|
|
|
|
|
|
|
- 用户注册(邮箱验证码验证)
|
|
|
|
|
- 用户登录/登出(JWT Token 认证)
|
|
|
|
|
- 密码修改、邮箱修改、用户名修改
|
|
|
|
|
- 用户配置偏好保存
|
|
|
|
|
- 管理员后台(用户管理、系统统计)
|
|
|
|
|
|
|
|
|
|
### 图像防护
|
|
|
|
|
|
|
|
|
|
- **通用防护**:支持 ASPL、SimAC、CAAT、PID 等多种算法
|
|
|
|
|
- **快速防护**:简化流程,使用默认配置快速处理
|
|
|
|
|
- **专题防护**:
|
|
|
|
|
- 防定制生成:防止人脸被用于 AI 定制化生成
|
|
|
|
|
- 防人脸编辑:防止人脸图像被 AI 编辑修改
|
|
|
|
|
- 风格迁移防护:保护艺术作品免受风格模仿
|
|
|
|
|
- **扰动强度自定义**:可调节 epsilon 值控制扰动程度
|
|
|
|
|
- **批量处理**:支持多图片同时上传处理
|
|
|
|
|
|
|
|
|
|
### 效果验证
|
|
|
|
|
|
|
|
|
|
- **微调测试**:模拟 DreamBooth/LoRA 微调过程,验证防护效果
|
|
|
|
|
- **质量评估**:FID、LPIPS、SSIM、PSNR 等指标计算
|
|
|
|
|
- **热力图分析**:可视化原始图与加噪图的差异区域
|
|
|
|
|
- **3D 训练轨迹**:可视化微调过程中的参数变化
|
|
|
|
|
|
|
|
|
|
### 任务管理
|
|
|
|
|
|
|
|
|
|
- 任务创建与配置
|
|
|
|
|
- 实时状态监控
|
|
|
|
|
- 任务配额管理
|
|
|
|
|
- 结果下载(支持批量打包)
|
|
|
|
|
- 历史记录查询
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 防护算法
|
|
|
|
|
|
|
|
|
|
### 通用防护算法
|
|
|
|
|
|
|
|
|
|
| 算法 | 说明 | 适用场景 |
|
|
|
|
|
| -------- | ------------------------------------ | -------------------- |
|
|
|
|
|
| ASPL | Advanced Semantic Protection Layer | 通用语义保护 |
|
|
|
|
|
| SimAC | Simple Anti-Customization Method | 人脸隐私保护 |
|
|
|
|
|
| CAAT | Cross-Attention Adversarial Training | 注意力机制干扰 |
|
|
|
|
|
| CAAT Pro | CAAT with Prior Preservation | 增强版,保留类别数据 |
|
|
|
|
|
| PID | Prompt-Independent Data Protection | 提示词无关保护 |
|
|
|
|
|
| Glaze | Style Mimicry Protection | 风格迁移防护 |
|
|
|
|
|
|
|
|
|
|
### 专题防护算法
|
|
|
|
|
|
|
|
|
|
| 算法 | 说明 | 数据类型 |
|
|
|
|
|
| ------------ | ----------------------------- | -------------- |
|
|
|
|
|
| 防定制生成 | Anti-Customization Generation | 人脸数据集 |
|
|
|
|
|
| 防人脸编辑 | Anti-Face-Editing | 人脸数据集 |
|
|
|
|
|
| 风格迁移防护 | Style Transfer Protection | 艺术作品数据集 |
|
|
|
|
|
|
|
|
|
|
### 风格迁移预设
|
|
|
|
|
|
|
|
|
|
- 梵高印象派 (van_gogh)
|
|
|
|
|
- 康定斯基抽象派 (kandinsky)
|
|
|
|
|
- 毕加索立体派 (picasso)
|
|
|
|
|
- 巴洛克风格 (baroque)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## API 概览
|
|
|
|
|
|
|
|
|
|
### 接口规范
|
|
|
|
|
|
|
|
|
|
- **基础路径**:所有 API 以 `/api` 为前缀
|
|
|
|
|
- **认证方式**:JWT Token,请求头携带 `Authorization: Bearer <token>`
|
|
|
|
|
- **响应格式**:统一 JSON 格式
|
|
|
|
|
- **状态码**:`200` 成功 / `201` 创建成功 / `400` 参数错误 / `401` 未认证 / `403` 无权限 / `404` 不存在 / `500` 服务器错误
|
|
|
|
|
|
|
|
|
|
### 核心接口
|
|
|
|
|
|
|
|
|
|
| 模块 | 接口 | 方法 | 说明 |
|
|
|
|
|
| ----- | ----------------------------------------- | ---- | ------------------ |
|
|
|
|
|
| Auth | `/api/auth/login` | POST | 用户登录 |
|
|
|
|
|
| Auth | `/api/auth/register` | POST | 用户注册 |
|
|
|
|
|
| Auth | `/api/auth/code` | POST | 发送邮箱验证码 |
|
|
|
|
|
| Auth | `/api/auth/profile` | GET | 获取用户信息 |
|
|
|
|
|
| Task | `/api/task` | GET | 获取任务列表 |
|
|
|
|
|
| Task | `/api/task/quota` | GET | 获取任务配额 |
|
|
|
|
|
| Task | `/api/task/perturbation` | POST | 创建加噪任务 |
|
|
|
|
|
| Task | `/api/task/finetune/from-perturbation` | POST | 创建微调任务 |
|
|
|
|
|
| Task | `/api/task/evaluate` | POST | 创建评估任务 |
|
|
|
|
|
| Task | `/api/task/heatmap` | POST | 创建热力图任务 |
|
|
|
|
|
| Image | `/api/image/perturbation/<id>` | GET | 获取加噪结果图片 |
|
|
|
|
|
| Image | `/api/image/perturbation/<id>/download` | GET | 下载加噪结果 |
|
|
|
|
|
| Admin | `/api/admin/users` | GET | 用户管理(管理员) |
|
|
|
|
|
| Admin | `/api/admin/stats` | GET | 系统统计(管理员) |
|
|
|
|
|
|
|
|
|
|
### 详细文档
|
|
|
|
|
|
|
|
|
|
- 完整 API 文档:[doc/project/02-设计文档/backend-api.md](doc/project/02-设计文档/backend-api.md)
|
|
|
|
|
- 后端开发文档:[src/backend/README.md](src/backend/README.md)
|
|
|
|
|
- 前端开发文档:[src/frontend/README.md](src/frontend/README.md)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 部署与开发指南
|
|
|
|
|
|
|
|
|
|
### 环境要求
|
|
|
|
|
|
|
|
|
|
- Python >= 3.8
|
|
|
|
|
- Node.js >= 16.x
|
|
|
|
|
- MySQL >= 5.7
|
|
|
|
|
- Redis >= 6.0
|
|
|
|
|
|
|
|
|
|
### 环境准备(Linux)
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 安装系统依赖
|
|
|
|
|
sudo apt update
|
|
|
|
|
sudo apt install -y build-essential python3 python3-venv python3-pip git
|
|
|
|
|
|
|
|
|
|
# 安装 MySQL
|
|
|
|
|
sudo apt install -y mysql-server
|
|
|
|
|
sudo systemctl enable mysql
|
|
|
|
|
sudo systemctl start mysql
|
|
|
|
|
|
|
|
|
|
# 创建数据库
|
|
|
|
|
mysql -u root -p
|
|
|
|
|
CREATE DATABASE museguard DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
|
EXIT;
|
|
|
|
|
|
|
|
|
|
# 安装 Redis
|
|
|
|
|
sudo apt install -y redis-server
|
|
|
|
|
sudo systemctl enable redis-server
|
|
|
|
|
sudo systemctl start redis-server
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 后端部署
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd src/backend
|
|
|
|
|
|
|
|
|
|
# 创建虚拟环境
|
|
|
|
|
python -m venv venv
|
|
|
|
|
source venv/bin/activate
|
|
|
|
|
|
|
|
|
|
# 安装依赖
|
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**配置环境变量**
|
|
|
|
|
|
|
|
|
|
在 `src/backend/config/` 目录下创建 `settings.env` 文件:
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
|
# 数据库配置
|
|
|
|
|
DB_USER=root
|
|
|
|
|
DB_PASSWORD=your_password
|
|
|
|
|
DB_HOST=localhost
|
|
|
|
|
DB_NAME=museguard
|
|
|
|
|
|
|
|
|
|
# JWT 密钥
|
|
|
|
|
SECRET_KEY=your-secret-key
|
|
|
|
|
JWT_SECRET_KEY=your-jwt-secret
|
|
|
|
|
|
|
|
|
|
# Redis 配置
|
|
|
|
|
REDIS_URL=redis://localhost:6379/0
|
|
|
|
|
|
|
|
|
|
# 邮件服务配置
|
|
|
|
|
MAIL_SERVER=smtp.qq.com
|
|
|
|
|
MAIL_PORT=465
|
|
|
|
|
MAIL_USE_SSL=true
|
|
|
|
|
MAIL_USERNAME=your_email@qq.com
|
|
|
|
|
MAIL_PASSWORD=your_email_auth_code
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**启动服务**
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 初始化数据库
|
|
|
|
|
python init_db.py
|
|
|
|
|
|
|
|
|
|
# 启动 Flask 应用 (端口 6006)
|
|
|
|
|
python run.py
|
|
|
|
|
|
|
|
|
|
# 启动 RQ Worker (另开终端)
|
|
|
|
|
python worker.py
|
|
|
|
|
|
|
|
|
|
# 或使用脚本管理
|
|
|
|
|
./start.sh # 启动服务
|
|
|
|
|
./status.sh # 查看状态
|
|
|
|
|
./stop.sh # 停止服务
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 前端部署
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd src/frontend
|
|
|
|
|
|
|
|
|
|
# 安装依赖
|
|
|
|
|
npm install
|
|
|
|
|
|
|
|
|
|
# 开发模式
|
|
|
|
|
npm run dev # Vite 开发服务器 (端口 5173)
|
|
|
|
|
|
|
|
|
|
# 生产构建
|
|
|
|
|
npm run build # 产物在 dist/ 目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Nginx 配置(生产环境)
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
server {
|
|
|
|
|
listen 80;
|
|
|
|
|
server_name your-domain.com;
|
|
|
|
|
|
|
|
|
|
# 前端静态文件
|
|
|
|
|
location / {
|
|
|
|
|
root /path/to/MuseGuard/src/frontend/dist;
|
|
|
|
|
index index.html;
|
|
|
|
|
try_files $uri $uri/ /index.html;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# API 反向代理
|
|
|
|
|
location /api {
|
|
|
|
|
proxy_pass http://127.0.0.1:6006;
|
|
|
|
|
proxy_set_header Host $host;
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
|
|
|
|
|
|
|
# 文件上传大小限制
|
|
|
|
|
client_max_body_size 50M;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 代码规范
|
|
|
|
|
|
|
|
|
|
- 后端遵循 PEP 8 规范
|
|
|
|
|
- 前端遵循 Vue 3 官方风格指南
|
|
|
|
|
- 提交信息遵循 Conventional Commits
|
|
|
|
|
|
|
|
|
|
### 分支管理
|
|
|
|
|
|
|
|
|
|
- `main`:主分支,稳定版本
|
|
|
|
|
- `develop`:开发分支
|
|
|
|
|
- 个人分支:各成员独立开发分支
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 项目文档
|
|
|
|
|
|
|
|
|
|
| 文档类型 | 位置 | 说明 |
|
|
|
|
|
| -------- | ------------------------------------------------- | ---------------------------------------- |
|
|
|
|
|
| 需求文档 | [doc/project/01-需求文档/](doc/project/01-需求文档/) | 需求规格说明书、用例文档、前景与范围文档 |
|
|
|
|
|
| 设计文档 | [doc/project/02-设计文档/](doc/project/02-设计文档/) | 数据库设计文档、API 设计文档 |
|
|
|
|
|
| 计划文档 | [doc/project/03-计划文档/](doc/project/03-计划文档/) | 迭代开发计划 |
|
|
|
|
|
| 过程文档 | [doc/process/weekly/](doc/process/weekly/) | 周报与周计划 |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 贡献者
|
|
|
|
|
|
|
|
|
|
**团队名称**:软件2302班-深度思考
|
|
|
|
|
|
|
|
|
|
| 成员 | 贡献 |
|
|
|
|
|
| ------ | ------------------------------------ |
|
|
|
|
|
| 胡帆 | 项目负责人(PM)、算法研究、模型微调 |
|
|
|
|
|
| 金郅博 | 前端开发、文档撰写 |
|
|
|
|
|
| 梁浩 | 后端开发、算法实现 |
|
|
|
|
|
| 杨博文 | 文档撰写、后端开发 |
|
|
|
|
|
| 杨逸轩 | 前端开发、文档撰写 |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 鸣谢与引用 (Acknowledgements & Citations)
|
|
|
|
|
|
|
|
|
|
本项目在开发过程中集成了多项前沿学术成果与社区资源。我们对以下贡献者表示由衷的感谢。
|
|
|
|
|
|
|
|
|
|
### 学术研究引用
|
|
|
|
|
|
|
|
|
|
如果您在研究中使用了本项目集成的防御算法,请根据对应模块引用下列论文:
|
|
|
|
|
|
|
|
|
|
#### Anti-DreamBooth (ICCV 2023)
|
|
|
|
|
|
|
|
|
|
*针对个性化训练过程的对抗性干扰方案。*
|
|
|
|
|
|
|
|
|
|
```bibtex
|
|
|
|
|
@inproceedings{le2023anti,
|
|
|
|
|
title={Anti-DreamBooth: Protecting Users from Personalized Text-to-Image Synthesis},
|
|
|
|
|
author={Le, Thanh Van and Phung, Hao and Nguyen, Thuan Hoang and Dao, Quan and Tran, Ngoc N and Tran, Anh},
|
|
|
|
|
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
|
|
|
|
|
pages={2116--2127},
|
|
|
|
|
year={2023}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### Glaze (USENIX Security 2023)
|
|
|
|
|
|
|
|
|
|
*通过风格遮蔽保护艺术作品免受风格仿冒。*
|
|
|
|
|
|
|
|
|
|
```bibtex
|
|
|
|
|
@inproceedings{shan2023glaze,
|
|
|
|
|
title={Glaze: Protecting Artists from Style Mimicry by Text-to-Image Models},
|
|
|
|
|
author={Shan, Shawn and Cryan, Jenna and Wenger, Emily and Zheng, Haitao and Hanocka, Rana and Zhao, Ben Y},
|
|
|
|
|
booktitle={32nd USENIX Security Symposium (USENIX Security 23)},
|
|
|
|
|
pages={2187--2204},
|
|
|
|
|
year={2023}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### SimAC (CVPR 2024)
|
|
|
|
|
|
|
|
|
|
*针对扩散模型人脸隐私保护的高效反定制化方法。*
|
|
|
|
|
|
|
|
|
|
```bibtex
|
|
|
|
|
@inproceedings{wang2024simac,
|
|
|
|
|
title={SimAC: A Simple Anti-Customization Method for Protecting Face Privacy against Text-to-Image Synthesis of Diffusion Models},
|
|
|
|
|
author={Wang, Feifei and Tan, Zhentao and Wei, Tianyi and Wu, Yue and Huang, Qidong},
|
|
|
|
|
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision (CVPR)},
|
|
|
|
|
pages={12656--12666},
|
|
|
|
|
year={2024}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### PID (ICML 2024)
|
|
|
|
|
|
|
|
|
|
*提示词无关的潜空间防御技术。*
|
|
|
|
|
|
|
|
|
|
```bibtex
|
|
|
|
|
@inproceedings{li2024pid,
|
|
|
|
|
title={PID: Prompt-Independent Data Protection Against Latent Diffusion Models},
|
|
|
|
|
author={Li, Ang and Mo, Yichuan and Li, Mingjie and Wang, Yisen},
|
|
|
|
|
booktitle={International Conference on Machine Learning (ICML)},
|
|
|
|
|
year={2024}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### CAAT (CVPR 2024)
|
|
|
|
|
|
|
|
|
|
*关于对抗性扰动在 Stable Diffusion 场景下的有效性研究。*
|
|
|
|
|
|
|
|
|
|
```bibtex
|
|
|
|
|
@inproceedings{zhao2024can,
|
|
|
|
|
title={Can Protective Perturbation Safeguard Personal Data from Being Exploited by Stable Diffusion?},
|
|
|
|
|
author={Zhao, Zhengyue and Duan, Jinhao and Xu, Kaidi and Wang, Chenan and Zhang, Rui and Du, Zidong and Guo, Qi and Hu, Xing},
|
|
|
|
|
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision (CVPR)},
|
|
|
|
|
pages={12571--12581},
|
|
|
|
|
year={2024}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 资源与素材来源
|
|
|
|
|
|
|
|
|
|
* **艺术插画**:本项目登录/注册页面背景的插画作品由日本艺术家 **ohuton** 创作(X/Twitter ID: [@nyr50ml](https://twitter.com/nyr50ml)),版权归原作者所有。
|
|
|
|
|
* **样例数据**:部分用于演示和测试的防御样本图像来源于上述各论文的公开或自制图片组。
|
|
|
|
|
* **交互动效**:部分前端动画效果灵感源自 [Vuebits UI](https://vue-bits.dev/),并在此基础上进行了深度定制。
|
|
|
|
|
* **代码辅助**:代码构建与逻辑优化过程中使用了 **Claude**、**Gemini** 及 **GPT** 系列大语言模型的辅助支持。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 许可证 (License)
|
|
|
|
|
|
|
|
|
|
本项目采用 **MIT License** 开源许可协议。
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
MIT License
|
|
|
|
|
|
|
|
|
|
Copyright (c) 2025 深度思考队
|
|
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
|
|
|
copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
|
SOFTWARE.
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**注意**:本项目集成的各防护算法版权归原作者所有,使用时请遵循相应论文的引用要求。本项目仅用于学习和研究目的。
|
|
|
|
|
|