0

这是我关于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 不会有更新来解决样式转换工具的问题,因此我们将不胜感激!

在此先感谢您的帮助

4

0 回答 0