一个功能强大的神经风格迁移(Neural Style Transfer)项目,基于PyTorch实现,支持多种运行模式和高级配置选项。
- 🖼️ 高质量风格迁移:基于VGG网络的先进神经风格迁移算法
- 🌐 Web界面:简洁易用的Streamlit交互式界面
- 📦 批量处理:支持大批量图像的自动化处理
- 🎛️ 丰富参数:可调节风格权重、内容权重、学习率等多种参数
- 🎨 颜色保持:可选择保持原始图像的颜色信息
- �️ 完整图像格式支持:支持JPG、JPEG、PNG格式,自动处理透明通道
- �📊 进度可视化:实时显示训练进度和损失曲线
- 🎬 GIF生成:自动生成风格迁移过程的动画
- 📈 演示模式:内置多种演示效果展示不同参数的影响
- 🛡️ 智能错误处理:详细的图像验证和友好的错误提示
- Python 3.8+
- PyTorch 1.9+
- CUDA(可选,用于GPU加速)
# 克隆项目
git clone <repository-url>
cd NeuralStyle
# 安装依赖
pip install -r requirements.txt# 基础风格迁移
python main.py style --content data/content/content.jpg --style data/style/style.jpg
# 自定义参数
python main.py style \
--content data/content/photo.jpg \
--style data/style/art.jpg \
--output output/my_result.jpg \
--iterations 5000 \
--style-weight 1e6 \
--max-size 1024python main.py web或者(最方便且直接的方法):
streamlit run web_interface.py然后在浏览器中访问 http://localhost:8501
# 批量处理多个图像
python main.py batch \
--content-dir data/content/ \
--style-dir data/style/ \
--output-dir output/batch/
# 创建风格矩阵(所有内容和风格的组合)
python main.py batch \
--content-dir data/content/ \
--style-dir data/style/ \
--output-dir output/matrix/ \
--matrix# 运行所有演示
python main.py demo --demo all
# 运行特定演示
python main.py demo --demo basic # 基础演示
python main.py demo --demo params # 参数对比
python main.py demo --demo color # 颜色保持演示
python main.py demo --demo progressive # 渐进式风格迁移NeuralStyle/
├── main.py # 主入口文件
├── neural_style.py # 核心风格迁移实现
├── models.py # 神经网络模型定义
├── config.py # 配置文件
├── utils.py # 工具函数
├── web_interface.py # Web界面
├── batch_process.py # 批处理脚本
├── demo.py # 演示脚本
├── requirements.txt # 依赖包列表
├── data/
│ ├── content/ # 内容图像目录
│ │ └── content.jpg
│ └── style/ # 风格图像目录
│ └── style.jpg
└── output/ # 输出目录
└── styled_image.jpg
| 参数 | 默认值 | 说明 |
|---|---|---|
--content |
- | 内容图像路径 |
--style |
- | 风格图像路径 |
--output |
output/styled_image.jpg |
输出文件路径 |
--max-size |
512 | 图像最大尺寸 |
--iterations |
3000 | 优化迭代次数 |
| 参数 | 默认值 | 说明 |
|---|---|---|
--style-weight |
1e6 | 风格损失权重 |
--content-weight |
1 | 内容损失权重 |
--lr |
0.003 | 学习率 |
--preserve-colors |
False | 是否保持原始颜色 |
--tv-weight |
0 | 总变分正则化权重 |
--save-intermediate |
False | 是否保存中间结果 |
python main.py style \
--content data/content/landscape.jpg \
--style data/style/vangogh.jpg \
--output output/landscape_vangogh.jpg \
--iterations 4000 \
--style-weight 5e5python main.py style \
--content data/content/portrait.jpg \
--style data/style/abstract.jpg \
--preserve-colors \
--style-weight 1e6 \
--tv-weight 1e-4python main.py style \
--content data/content/highres.jpg \
--style data/style/painting.jpg \
--max-size 1024 \
--iterations 5000 \
--lr 0.001Web界面提供了以下功能:
- 📤 图像上传:支持拖拽上传内容图像和风格图像(JPG、JPEG、PNG格式)
- 🔄 智能格式转换:自动处理PNG透明通道,转换为RGB格式
- 🎛️ 参数调节:实时调整风格权重、迭代次数等参数
- 👀 实时预览:查看风格迁移的实时进度
- 💾 结果下载:直接下载生成的结果图像
- 📊 进度监控:显示训练进度和损失曲线
- 🛡️ 错误提示:详细的图像验证反馈和错误解决建议
启用颜色保持功能可以在进行风格迁移时保持原始图像的颜色信息:
python main.py style --preserve-colors添加总变分正则化可以减少结果图像的噪声:
python main.py style --tv-weight 1e-4保存训练过程中的中间结果:
python main.py style --save-intermediate可以在 config.py 中修改风格层的权重分布:
style_layers = {
'conv1_1': 1.0, # 纹理细节
'conv2_1': 0.8, # 局部模式
'conv3_1': 0.5, # 中等复杂度特征
'conv4_1': 0.3, # 高级特征
'conv5_1': 0.1 # 最高级特征
}项目自动检测并使用可用的GPU:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")- 自动调整图像尺寸以适应可用内存
- 支持渐进式处理大尺寸图像
- 可配置批处理大小
- 使用预训练VGG网络提取特征
- 优化的损失函数计算
- 支持多种优化器选择
-
PNG图像处理错误
# 现象:上传PNG图像时出现错误或透明区域显示异常 # 解决:项目已自动处理PNG透明通道问题 # 透明背景会自动转换为白色背景 # 支持RGBA、RGB、L、P等各种图像模式
-
图像格式不支持
# 支持的格式:JPG, JPEG, PNG # 自动转换:RGBA -> RGB(白色背景) # 自动转换:灰度/调色板 -> RGB # 尺寸要求:最小32x32像素,建议不超过4096x4096
-
CUDA内存不足
# 减小图像尺寸 python main.py style --max-size 256 -
依赖包冲突
# 创建虚拟环境 python -m venv neural_style_env source neural_style_env/bin/activate # Linux/Mac # 或 neural_style_env\Scripts\activate # Windows pip install -r requirements.txt
-
Web界面启动失败
# 尝试指定端口 python main.py web --port 8502
错误代码 1:图像路径不存在错误代码 2:GPU内存不足错误代码 3:依赖包版本不兼容
- 🖼️ 完善PNG格式支持:修复PNG图像(包含透明通道)处理错误
- 自动检测RGBA格式并转换为RGB
- 智能处理透明背景(转换为白色背景)
- 支持各种图像模式(RGBA、L、P等)的自动转换
- 🛡️ 增强错误处理:添加详细的图像格式验证和错误提示
- 图像尺寸验证(防止过小或过大的图像)
- 图像格式兼容性检查
- 更友好的错误信息和解决建议
- 🔧 改进Web界面:
- 实时图像格式转换提示
- 图像上传时的验证反馈
- 更详细的处理失败原因说明
- 🧪 添加测试支持:创建PNG格式测试脚本验证功能
- ✨ 初始版本发布
- 🎨 实现基础神经风格迁移功能
- 🌐 添加Web界面支持
- 📦 支持批量处理
- 🎬 添加演示模式
欢迎提交Issue和Pull Request!
- Fork 这个项目
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启一个Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件至:hy20051123@gmail.com
🎨 让艺术与科技完美融合 🎨
Made with ❤️ by Yun Hong