PyTorch样式转移的特征提取实例

将图像加载到内存中后, 我们将实现样式转换。有必要将图像的样式与内容分开, 以实现样式转换。之后, 还可以将一个图像的样式元素转移到第二个图像的内容元素。这个过程主要是使用标准卷积神经网络的特征提取完成的。
然后操纵这些特征以提取内容信息或样式信息。此过程涉及三个图像:样式图像, 内容图像和最终目标图像。样式图像的样式与内容图像中的内容结合在一起以创建最终目标图像。

PyTorch样式转移的特征提取实例

文章图片
这个过程首先在模型中选择几层来提取特征。通过选择几层来提取特征, 我们将很好地了解如何在整个神经网络中处理图像。我们还提取样式图像和内容图像的模型特征。之后, 我们从目标图像中提取特征, 并将其与样式图像特征和内容图像特征进行比较。
从图像获取功能
# Defining simple method with two arguments, i.e. our image and our modeldef get_features(image, model):#choosing specific layer within our VGG-19 model that we are going to extract features from # Defining layers dictionary object which contains the specific layerslayers={'0':'conv1_1', #Mapping 0 to conv1_1'5':'conv2_1', #Mapping 5 to conv2_1'10':'conv3_1', #Mapping 10 to conv3_1'19':'conv4_1', #Mapping 19 to conv4_1'21':'conv4_2', #Mapping 21 to conv4_2'28':'conv5_1', } #Mapping 28 to conv5_1

现在, 我们有六个特征提取层。在这六个特征提取层中, 我们将其中五个用于样式提取, 仅将其中一个用于内容提取。我们将使用conv4_2进行内容提取。这仅一层就足以提取内容。该层更深入我们的神经网络, 并提供高深度图像功能。这就是预训练目标检测卷积神经网络在表示内容元素方面变得非常有效的原因。
从整个网络的各种功能中获取样式功能, 以实现最佳样式创建。从多个图层中提取样式特征将允许最有效的样式提取和重新创建。
#Defining an empty dictionary called features to store all the extracted features features={}#Running a loop which iterates over all of the layers in our model for name, layer in model._modules.items(): #Running our image through the specific layer and store into the new imageimage=layer(image)#checking the name of the current layer which we are iterating through is inside layersif name in layers:#If true then store the output from that specific layer features[layers[name]]=image #returning feature dictionary return features

初始化get feature方法后, 我们必须使用内容图像和VGG模型来调用它。
content_features=get_features(content, vgg)

【PyTorch样式转移的特征提取实例】以相同的方式, 我们将对样式图像执行以下操作:
style_features=get_features(style, vgg)

    推荐阅读