这是我关于stackoverflow的第一个问题。因此,如果我做错了,我深表歉意。
我是开发新手,我正在尝试创建一个使用 Turicreate 和 StyleTransfer 的 iOS 应用程序。我正在使用 google colabs,它是免费的 GPU。
我遇到的问题是访问高级参数 - 样式损失乘数。这一切在 Turicreate v5.8 中运行良好。但现在(v6.0 及更高版本)参数无法访问 - 正如 Turicreate GitHub 问题页面所证实的那样 - https://github.com/apple/turicreate/issues/3341
上面的页面还详细介绍了我尝试过的所有代码/更改。
可以访问和修改参数,以便您可以更改样式与内容图像的强度。
这就是我所做的 - 抱歉,它很长,并且所有内容都是在 Google Colabs 中使用 GPU 完成的
Turicreate v5.8 - 这很好用,风格更多地转移到正在改变的图像上。
!pip install turicreate==5.8
!pip uninstall -y mxnet
!pip install mxnet-cu100==1.4.0.post0
import turicreate as tc
tc.config.set_num_gpus(1)
from google.colab import drive
drive.mount('./drive')
import os
os.chdir('drive/My Drive/trainingdata')
style = tc.load_images('style')
content = tc.load_images('content')
params = {
'print_loss_breakdown': True,
'style_loss_mult': [ 1e-2, 1e-2, 1e-2, 1e-2],
'finetune_all_params': True,
}
model = tc.style_transfer.create(style, content, max_iterations
= 10000, _advanced_parameters=params)
Turicreate v6.0 或更高版本 - 使用样式迁移模型时,更改 style_loss_mult 对输出的影响为零。该模型已创建并可以工作,但看起来它正在使用“style_loss_mult”的默认设置:[1e-4, 1e-4, 1e-4, 1e-4]
!pip install turicreate==6.4.1
!pip uninstall -y tensorflow
!pip install tensorflow-gpu==2.0.4
import turicreate as tc
tc.config.set_num_gpus(1)
from google.colab import drive
drive.mount('./drive')
import os
os.chdir('drive/My Drive/trainingdata')
style = tc.load_images('style')
content = tc.load_images('content')
params = {
'print_loss_breakdown': True,
'style_loss_mult': [ 1e-2, 1e-2, 1e-2, 1e-2],
'finetune_all_params': True,
}
model = tc.style_transfer.create(style, content, max_iterations =
10000, _advanced_parameters=params)
turicreate github 上的 Apple 开发人员建议更改 python 代码库以对参数进行硬编码,以便使用它们。所以我尝试了以下方法 - 我认为代码是正确的,但同样没有看到风格转移强度的变化。我修改了 /usr/local/lib/python3.7/dist-packages/turicreate/toolkits/style_transfer/style_transfer.py 文件(粗体是我添加/更改的代码)
params = {
"batch_size": batch_size,
"vgg16_content_loss_layer": 2, # conv3_3 layer
"lr": 0.001,
"content_loss_mult": 1.0,
**"style_loss_mult": [1e-1, 1e-1, 1e-1, 1e-1],** # conv 1-4 layers
"finetune_all_params": True,
"pretrained_weights": False,
"print_loss_breakdown": False,
"input_shape": (256, 256),
"training_content_loader_type": "stretch",
"use_augmentation": False,
"sequential_image_processing": False,
# Only used if use_augmentaion is True
"aug_resize": 0,
"aug_min_object_covered": 0,
"aug_rand_crop": 0.9,
"aug_rand_pad": 0.9,
"aug_rand_gray": 0.0,
"aug_aspect_ratio": 1.25,
"aug_hue": 0.05,
"aug_brightness": 0.05,
"aug_saturation": 0.05,
"aug_contrast": 0.05,
"aug_horizontal_flip": True,
"aug_area_range": (0.05, 1.5),
"aug_pca_noise": 0.0,
"aug_max_attempts": 20,
"aug_inter_method": 2,
"checkpoint": False,
"checkpoint_prefix": "style_transfer",
"checkpoint_increment": 1000,
}
if "_advanced_parameters" in kwargs:
# Make sure no additional parameters are provided
new_keys = set(kwargs["_advanced_parameters"].keys())
set_keys = set(params.keys())
unsupported = new_keys - set_keys
if unsupported:
raise _ToolkitError("Unknown advanced parameters: {}".format(unsupported))
params.update(kwargs["_advanced_parameters"])
name = "style_transfer"
import turicreate as _turicreate
# Imports tensorflow
_minimal_package_import_check("turicreate.toolkits.libtctensorflow")
model = _turicreate.extensions.style_transfer()
pretrained_resnet_model = _pre_trained_models.STYLE_TRANSFER_BASE_MODELS[
"resnet-16"
]()
pretrained_vgg16_model = _pre_trained_models.STYLE_TRANSFER_BASE_MODELS["Vgg16"]()
options = {}
options["image_height"] = params["input_shape"][0]
options["image_width"] = params["input_shape"][1]
options["content_feature"] = content_feature
options["style_feature"] = style_feature
if verbose is not None:
options["verbose"] = verbose
else:
options["verbose"] = False
if batch_size is not None:
options["batch_size"] = batch_size
if max_iterations is not None:
options["max_iterations"] = max_iterations
options["num_styles"] = len(style_dataset)
options["resnet_mlmodel_path"] = pretrained_resnet_model.get_model_path("coreml")
options["vgg_mlmodel_path"] = pretrained_vgg16_model.get_model_path("coreml")
options["pretrained_weights"] = params["pretrained_weights"]
options["pretrained_weights"] = params["pretrained_weights"]
**options["style_loss_mult"] = params["style_loss_mult"]**
model.train(style_dataset[style_feature], content_dataset[content_feature], options)
return StyleTransfer(model_proxy=model, name=name)
谁能帮我弄清楚如何更改代码库以更改高级参数?
看起来 Turicreate 不会有更新来解决样式转换工具的问题,因此我们将不胜感激!
在此先感谢您的帮助