VGG图像分割

只愿长相守 提交于 2019-12-28 05:38:34

补丁级别:VGG
在补丁级别的训练中,我们将image和ground-truth64×64像素)进行了网格化处理,每个补丁的面积为4096像素。当ground-truth中的像素值之和大于2048时,我们给相应的原始图像patch加上正的标签。否则我们就给它加上一个负号。然而,如果我们这样处理,正的图像补丁比负的图像补丁要少。为了在训练过程中平衡数据,我们通过翻转和垂直方向增加正图像patch,并在训练集中旋转90、180、270度。同时,我们通过fl增加正图像patch
在patch-level,我们在Vgg-16, incep - v3, ResNet-50网络中进行transfer learning,得到3个patch-一元分割结果和3个patch-二进制分割结果。然后我们得到了加权的补丁-一元分割结果和加权的补丁-二元分割结果。

今晚看了挺多代码有个感悟,如果想简便一些,用keras真的挺好,更多封装好的库。tf的话需要的代码行数多,不过可以根据不同需求选择吧。

  1. 关于Application

Keras 的应用模块(keras.applications)提供了带有预训练权值的深度学习模型,这些模型可以用来进行预测、特征提取和微调(fine-tuning)。当你初始化一个预训练模型时,会自动下载权值到 ~/.keras/models/ 目录下。

  1. keras内置的Model

在 ImageNet 上预训练过的用于图像分类的模型:

VGG16
VGG19
Xception
ResNet50
InceptionV3
InceptionResNetV2
MobileNet
DenseNet
NASNet

例子
使用 VGG16 提取特征

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

features = model.predict(x)

来自官方文档
模型默认输入尺寸是 224x224。
参数

include_top: 是否包括顶层的全连接层。
weights: None 代表随机初始化, ‘imagenet’ 代表加载在 ImageNet 上预训练的权值。
input_tensor: 可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)。
input_shape: 可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (244, 244, 3)(对于 channels_last 数据格式),或者 (3, 244, 244)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 32。例如 (200, 200, 3) 是一个合法的输入尺寸。
pooling: 可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。
None 代表不池化,直接输出最后一层卷积层的输出,该输出是一个四维张量。
‘avg’ 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积层后面再加一层全局平均池化层,输出是一个二维张量。
‘max’ 代表全局最大池化

classes: 可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。
返回
Keras Model 对象
Model模型的属性官方文档

给学长代码做了标注

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!