You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.9 KiB

2 years ago
# dipfa
### 说明
本项目使用flask作为后端采用网页的形式进行展示交互
### 环境
python3.7+
### 开始
```
pip install -r requirements.txt
python app.py # 默认在 127.0.0.1:5000
```
如果打算使用 GPU由于 cuda 版本不同pytorch 和 torchvision 需要自行下载,建议从以下网站找到对应版本下载 whl 文件安装 \
https://download.pytorch.org/whl/torch/ \
https://download.pytorch.org/whl/torchvision/
```python
import torch
torch.cuda.is_available() # 返回 True 才能使用 GPU
```
如果 GPU 显存不够,可以直接修改 myTransfer.py 和 models.py设置 device = 'cpu'
### 风格迁移说明
<code>models</code>下包含风格迁移的模型文件下载地址,需运行 models.bat 和 myModels.bat 下载 \
其中models.bat 下载固定风格任意内容的模型myModels.bat 下载任意风格任意内容的模型。\
任意风格任意内容迁移的代码、研究与报告见项目 StyleTransfer。
```
- models
- COCO2014_1000
- *.png
- metanet_base32_style300000.0_tv1e-06_tagnohvd.pth
- metanet_base32_style300000.0_tv1e-06_tagnohvd_transform_net.pth
- candy.t7
- feathers.t7
- *.t7
```
myModels.bat 受限于服务器带宽,下载所有文件需要约 30 min。\
为了减少下载时间:
1. 如果本地已经有完整的 COCO2014可以运行 genCOCO2014_1000.py 脚本生成数据集 \
如果没有,可以运行 getCOCO2014_1000.bat 下载, \
也可以从[这里](http://images.cocodataset.org/zips/train2014.zip)下载,解压并运行 genCOCO2014_1000.py 脚本 \
需要将 genCOCO2014_1000.py 的这行改成自己数据集的路径
```python
src = "../../COCO2014/train2014"
```
2. 目前已经将 vgg19 改成了 pretrained=True通过 torchvision 下载,所以项目初次运行会先进行下载。 \
如果下载不了的话可以找其他的源下载,并修改代码,\
或者运行 getVgg19.bat 从服务器获取,享受极(慢)速(度)(约 20 min)
```python
vgg19 = models.vgg19(pretrained=False)
vgg19.load_state_dict(torch.load(${模型路径}))
```
![style transfer](docImg/style_transfer.png)
如图,左侧为内容图,右侧为风格图。对于一张风格图,第一次运行会花费额外的时间(取决于设备)。
之后风格图不变,更换内容图,进行迁移需要约 5-8s。
### 后端文档说明
采用 sphinx 自动生成 \
起始页面: ./doc/_build/html/index.html
### 测试说明
./test 下是对每一个 service 的测试,其中 main.py 运行全部的测试showImg 为 True 会显示图片,否则不会。\
批量测试前建议把这两个函数注释掉,后面单独测试,否则有概率爆内存。
```python
# noiseBlur_test.py
def test_harmonic_blur():
res = noiseBlurService.harmonic_blur([blur], {'ksize': 3})
display('harmonic_blur', res)
def test_low_pass_filter():
res = noiseBlurService.low_pass_filter([blur], {'threshold2': 200})
display('low_pass', res)
```