【tensorflow】关于Slim的预处理对预训练模型pretrained model测试的影响

前言

Imgaenet上的预训练模型可以为我们自己训练或者fine-tune带来很大的便利,但是在加载这些模型的时候,通常要对输入图像进行预处理。然而,模型的预处理形式不尽相同。这里主要概括下tensorflow中slim的pretrained model所要求的图像预处理。

preprocessing_fn_map

  preprocessing_fn_map = {
      'cifarnet': cifarnet_preprocessing,
      'inception': inception_preprocessing,
      'inception_v1': inception_preprocessing,
      'inception_v2': inception_preprocessing,
      'inception_v3': inception_preprocessing,
      'inception_v4': inception_preprocessing,
      'inception_resnet_v2': inception_preprocessing,
      'lenet': lenet_preprocessing,
      'mobilenet_v1': inception_preprocessing,
      'mobilenet_v2': inception_preprocessing,
      'mobilenet_v2_035': inception_preprocessing,
      'mobilenet_v2_140': inception_preprocessing,
      'nasnet_mobile': inception_preprocessing,
      'nasnet_large': inception_preprocessing,
      'pnasnet_mobile': inception_preprocessing,
      'pnasnet_large': inception_preprocessing,
      'resnet_v1_50': vgg_preprocessing,
      'resnet_v1_101': vgg_preprocessing,
      'resnet_v1_152': vgg_preprocessing,
      'resnet_v1_200': vgg_preprocessing,
      'resnet_v2_50': vgg_preprocessing,
      'resnet_v2_101': vgg_preprocessing,
      'resnet_v2_152': vgg_preprocessing,
      'resnet_v2_200': vgg_preprocessing,
      'vgg': vgg_preprocessing,
      'vgg_a': vgg_preprocessing,
      'vgg_16': vgg_preprocessing,
      'vgg_19': vgg_preprocessing,
  }

可以看到用的最多的则是inception_preprocessing和vgg_preprocessing。

一、inception_preprocessing:

该种训练方法一共有两种形式,

  • 面向训练的预处理形式,

    1. 将像素值转换到[0, 1]区间内。
    2. 根据一定的规则获取原始图片上一个切片。
    3. 对切片进行resize。
    4. 对图像进行变换(从亮度、对比度、色相、饱和度四个方面进行随机变换)。
    5. 将像素值转换到[-1, 1]区间内
  • 面向测试的预处理形式

    1. 将像素值转换到[0, 1]区间内。
    2. 中心切片。
    3. resize图片。
    4. 将像素值转换到[-1, 1]区间内。

二、vgg_preprocessing:

该种训练方法也存在着两种形式,

  • 面向训练的预处理形式,
    1. 随机获取短边长度在[256, 512]这个范围中,等比例resize图片。
    2. 随机水平镜像
    3. 随机获取224x224的切片
    4. 减去ImageNet训练集的RGB均值
  • 面向测试的预处理形式
    1. 给定短边长度为256,等比例resize图片。
    2. 中心切片裁出来224x224的大小图像
    3. 减去ImageNet训练集的RGB均值

实验部分

我对两组预处理方法在模型测试过程中进行了两组实验。

1、针对Inception_preprocess模型预处理,以inceptionv3为例:

方法一:slim函数自带的inception预处理算法

在这里插入图片描述
在这里插入图片描述

我们可以看到预测值为0.855

方法二:直接将图像归一化为【-1,1】

在这里插入图片描述
在这里插入图片描述

此时的prob为0.974。

从这一张图像来说,采取直接对图像进行归一化的结果要比Slim自带的结果要好

2、针对vgg_preprocess模型预处理,以ResNet50 v1为例:

方法一:slim函数自带的vgg预处理算法在这里插入图片描述
方法二:将图像减去ImageNet均值在这里插入图片描述

从这一张图像来说,ResNet50采取直接对图像进行预处理的结果要比Slim自带的结果要好

其他:

关于这两个slim的预处理的源代码:
https://github.com/tensorflow/models/tree/master/research/slim/preprocessing

关于代码分析可见:
https://zhuanlan.zhihu.com/p/37444773

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值