|
--- |
|
title: AiRoom |
|
app_file: app.py |
|
sdk: gradio |
|
sdk_version: 5.20.1 |
|
--- |
|
# AiRoom - AI辅助室内设计工具 |
|
|
|
## 项目简介 |
|
|
|
AiRoom是一个基于AI技术的室内设计辅助工具,通过结合ControlNet和Stable Diffusion模型,实现对室内场景的全局风格调整和局部区域风格定制。该工具提供了直观的交互式界面,使用户能够轻松地对室内设计进行创意探索和风格转换,并支持相似图像搜索功能,帮助用户发现灵感。 |
|
|
|
## 功能特点 |
|
|
|
- **全局风格调整**:使用ControlNet保持原始空间布局的同时,通过Stable Diffusion调整整体风格 |
|
- **局部风格调整**:针对特定区域(如墙壁、地板、家具等)进行风格定制,保持其他区域不变 |
|
- **相似图像搜索**:基于CLIP和FAISS实现的高效图像相似性搜索,帮助用户发现相似设计方案 |
|
- **交互式界面**:基于Gradio构建的用户友好界面,支持实时预览和参数调整 |
|
- **多方案生成**:每次生成多个设计方案供用户选择,以2x2网格形式展示 |
|
- **区域智能识别**:自动分析图像中的不同功能区域,无需手动标注 |
|
|
|
## 安装说明 |
|
|
|
### 环境要求 |
|
|
|
- Python 3.8+ |
|
- CUDA支持的GPU (推荐8GB+显存) |
|
|
|
### 安装步骤 |
|
|
|
1. 克隆本仓库到本地: |
|
|
|
```bash |
|
git clone https://github.com/yourusername/AiRoom.git |
|
cd AiRoom |
|
``` |
|
|
|
2. 创建并激活虚拟环境(推荐): |
|
|
|
```bash |
|
# 使用Conda创建虚拟环境 |
|
conda create -n Airoom python=3.10 |
|
conda activate Airoom |
|
|
|
# 或使用venv创建虚拟环境 |
|
python -m venv Airoom |
|
# Windows激活 |
|
Airoom\Scripts\activate |
|
# Linux/Mac激活 |
|
source Airoom/bin/activate |
|
``` |
|
|
|
3. 安装依赖包: |
|
|
|
```bash |
|
# 安装PyTorch(根据您的CUDA版本选择适当的命令) |
|
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 |
|
|
|
# 安装项目依赖 |
|
pip install -r requirements.txt |
|
``` |
|
|
|
4. 下载必要资源: |
|
|
|
```bash |
|
python download_resources.py |
|
``` |
|
|
|
## 使用指南 |
|
|
|
1. 启动应用: |
|
|
|
```bash |
|
python app.py |
|
``` |
|
|
|
2. 在浏览器中访问显示的本地URL(通常为 http://127.0.0.1:7860) |
|
|
|
3. 使用流程: |
|
- 首先点击"加载模型"按钮,等待所有模型加载完成 |
|
- 选择功能模式(通过顶部选项卡:全局风格调整、局部风格调整或相似图像搜索) |
|
- 上传室内场景图片或使用示例图片 |
|
- 点击"分析图像结构"按钮处理输入图像 |
|
- 根据需要调整参数 |
|
- 点击"生成设计方案"按钮创建新设计 |
|
- 从生成的多个设计方案中选择喜欢的结果 |
|
- 可选择保存设计方案供后续参考或搜索 |
|
|
|
## 功能详解 |
|
|
|
### 全局风格调整 |
|
|
|
全局风格调整功能允许用户保持原始空间布局的同时,改变整个场景的设计风格。用户可以: |
|
|
|
- 输入详细的风格描述提示词(可从预设列表中选择或自定义) |
|
- 选择房间类型(卧室、客厅、厨房等) |
|
- 选择风格主题(现代、北欧、工业风等) |
|
- 调整推理步数(影响生成质量和时间) |
|
- 调整引导比例(影响生成结果对提示词的遵循程度) |
|
- 同时生成4个不同的设计方案进行比较 |
|
- 选择并保存喜欢的设计方案 |
|
|
|
工作原理: |
|
- 使用MLSD检测器提取房间的线条结构,生成控制图像 |
|
- ControlNet确保生成的图像保持原始空间布局和结构 |
|
- Stable Diffusion根据提示词和控制图像生成符合要求的设计风格 |
|
|
|
### 局部风格调整 |
|
|
|
局部风格调整功能允许用户针对场景中的特定区域进行风格定制,而保持其他区域不变。用户可以: |
|
|
|
- 从下拉菜单中选择要调整的区域(墙壁、地板、家具等) |
|
- 查看所选区域的掩码预览(红色半透明覆盖显示选中区域) |
|
- 输入针对该区域的风格描述提示词 |
|
- 调整区域变化的强度和细节 |
|
- 生成保持整体结构的局部风格变化 |
|
|
|
工作原理: |
|
- 使用Mask2Former模型进行语义分割,识别图像中的不同功能区域 |
|
- 将识别的区域转换为掩码,供用户选择 |
|
- 结合ControlNet和Stable Diffusion Inpainting进行局部区域的风格调整 |
|
- 保持未选中区域不变,只修改选中区域的风格 |
|
|
|
### 相似图像搜索 |
|
|
|
相似图像搜索功能利用CLIP模型和FAISS索引,帮助用户查找与参考图像风格相似的设计方案。用户可以: |
|
|
|
- 上传参考图像 |
|
- 设置搜索结果数量(2-8个) |
|
- 查看以2x2网格布局展示的相似图像结果 |
|
- 查看每个结果的相似度百分比 |
|
- 通过"重建图像索引"按钮更新索引,包含新生成的设计方案 |
|
|
|
工作原理: |
|
- 使用CLIP模型提取图像的语义特征向量 |
|
- FAISS索引存储所有已生成设计方案的特征向量 |
|
- 搜索时计算查询图像与索引中所有图像的余弦相似度 |
|
- 返回相似度最高的图像作为结果 |
|
|
|
## 项目结构 |
|
|
|
- `app.py`:主应用程序,包含Gradio界面和核心功能实现(全局风格调整、局部风格调整、相似图像搜索) |
|
- `download_resources.py`:下载必要模型和资源的工具脚本 |
|
- `requirements.txt`:项目依赖列表 |
|
- `resources/`:存放模型、图像和标签数据的目录 |
|
- `models/`:存储AI模型(Mask2Former、ControlNet、Stable Diffusion等) |
|
- `images/`:存储示例和生成的图像 |
|
- `labels/`:存储标签数据(如ADE20K数据集标签) |
|
- `output/`:存储生成的设计方案 |
|
- `global_style/`:全局风格调整生成的图像 |
|
- `local_style/`:局部风格调整生成的图像 |
|
- `features/`:存储图像特征和索引文件(用于相似图像搜索) |
|
- `image_features.index`:FAISS索引文件 |
|
- `image_metadata.pkl`:图像元数据文件 |
|
|
|
## 技术实现 |
|
|
|
项目使用了多种先进的AI模型和技术: |
|
|
|
- **Mask2Former**:用于场景语义分割,识别不同功能区域(如墙壁、地板、家具等) |
|
- **ControlNet (MLSD)**:保持原始场景的结构和布局,通过线条检测提供控制指导 |
|
- **Stable Diffusion**:生成符合提示词描述的图像内容 |
|
- **Stable Diffusion Inpainting**:针对特定区域进行图像修复和风格转换 |
|
- **CLIP**:提取图像特征,用于相似性搜索和语义理解 |
|
- **FAISS**:高效的向量相似性搜索库,支持大规模图像检索 |
|
- **Gradio**:构建直观的用户界面,支持交互式操作和实时预览 |
|
- **PyTorch**:深度学习框架,支持GPU加速的模型推理 |
|
|
|
模型加载策略: |
|
- 使用`torch.float16`精度减少内存占用 |
|
- 实现模型CPU卸载以优化内存使用 |
|
- 支持xformers内存优化(如果安装) |
|
- 从本地缓存加载模型,避免重复下载 |
|
|
|
## 注意事项 |
|
|
|
- 首次运行时需要下载较大的模型文件(约10GB),请确保有足够的磁盘空间和稳定的网络连接 |
|
- 生成过程可能需要较长时间,取决于您的硬件配置(推荐使用NVIDIA GPU) |
|
- 为获得最佳效果,建议使用清晰的室内场景照片作为输入 |
|
- 相似图像搜索功能需要先生成并保存一些设计方案才能有效工作 |
|
- 调整推理步数可以平衡生成质量和速度,通常20-30步可以获得不错的结果 |
|
- 调整引导比例可以控制生成结果的创意程度,较高的值(7-9)会更严格遵循提示词 |
|
|
|
## 许可证 |
|
|
|
[在此添加您的许可证信息] |
|
|
|
## 致谢 |
|
|
|
本项目基于以下开源项目和模型: |
|
|
|
- [Hugging Face Diffusers](https://github.com/huggingface/diffusers) |
|
- [ControlNet](https://github.com/lllyasviel/ControlNet) |
|
- [Mask2Former](https://github.com/facebookresearch/Mask2Former) |
|
- [CLIP](https://github.com/openai/CLIP) |
|
- [FAISS](https://github.com/facebookresearch/faiss) |
|
- [Gradio](https://github.com/gradio-app/gradio) |
|
|
|
## 联系方式 |
|
|
|
[在此添加您的联系信息] |
|
|