一.问题的产生

随着对于faster rcnn研究的深入,我们或许想要改变网络的整体结构,如将全连接层变为全卷积层来实验更好的分类方式,又或者会想要将多层的特征图进行融合或反卷积操作。但是如果只是修改网络配置文件train.prototxt和test.prototxt,结果有可能会报错,大意就是某一层blob的实际大小与我们设计的大小不匹配所导致的。而我们从文章和代码浅层来看(文章给出的caffe-python源码),它是使用两个参数scale和maxsize来固定了输入图片大小的。

        # data blob: holds a batch of N images, each with 3 channelsidx = 0top[idx].reshape(cfg.TRAIN.IMS_PER_BATCH, 3,max(cfg.TRAIN.SCALES), cfg.TRAIN.MAX_SIZE)self._name_to_top_map['data'] = idxidx += 1

上面的代码来自roi_data_layer的layer.py。主要作用就是在网络起始阶段固定好输入的data的数据维度。reshape()函数中第一个参数表示的这个blob中数据的数量,在使用RPN时,必须要求IMS_PER_BATCH为1,即必须在一个bacth中只能使用一张图片中样本(后面解释为什么)。3是RBG图像的通道数目,后面两个参数似乎是图片的宽和长。可以看到这里将宽设定为max(cfg.TRAIN.SCALES)即设定图像金字塔的最大尺度(600),将长设定为cfg.TRAIN.MAX_SIZE(1000)。但是实际上,我们可以接下来看看获取每一个batch的数据的实际的情况

def prep_im_for_blob(im, pixel_means, target_size, max_size):"""Mean subtract and scale an image for use in a blob."""im = im.astype(np.float32, copy=False)im -= pixel_meansim_shape = im.shapeim_size_min = np.min(im_shape[0:2])#短边im_size_max = np.max(im_shape[0:2])#长边im_scale = float(target_size) / float(im_size_min)# scale/短边# Prevent the biggest axis from being more than MAX_SIZEif np.round(im_scale * im_size_max) > max_size:#计算得到的目标长不应该超过设定的max_size(1000)im_scale = float(max_size) / float(im_size_max)#万一出现就以max_size为目标计算im_scaleim = cv2.resize(im, None, None, fx=im_scale, fy=im_scale,interpolation=cv2.INTER_LINEAR)return im, im_scale

在这里,我们看到在将图片进行resize时,对于fx,fy使用了同一个im_scale进行放缩。这样可以保持图片的纵横比不变。这里的im_scale是来自于短边与scale的比值,但一但通过就这种方法计算出来的长边超过了上设置的max_size之后我们就要以max_size为目标计算im_scale.
所以有这段代码来看,我之前的理解是错的, max(cfg.TRAIN.SCALES), cfg.TRAIN.MAX_SIZE 这两个参数并不是分别表示长和宽,他的参数意义就是其字面意义cfg.TRAIN.SCALES表示理想的输入尺度, cfg.TRAIN.MAX_SIZE则是设定输入图片的阈值,边长不可以超过的最大长度。这样我们可以知道,对于整个数据集,我们的图片的纵横比和大小并不是完全一致的,那么有些bolb之间存在大小不匹配就不奇怪了。

faster rcn固定输入图片尺寸(一)相关推荐

  1. faster rcn固定输入图片尺寸(二)

    二.训练阶段的改动 本文改动的是以faster_rcnn_end_to_end模式的流程进行,alt_opt模式没有尝试但应该是类似的.在训练时,我们调用的是train.py它直接解析train.pr ...

  2. 为什么有全连接层的卷积网络输入图片尺寸需要固定的

    一句话: 全连接层的一个神经元对应一个输入. 换句话说, 全连接层要求固定的输入维度. 数学推导: 大家都知道, z=wx+b,全连接神经网络结构一旦固定,需要学习的参数w是固定的,例如 输入图像是 ...

  3. pytorch中根据神经网络结构确定输入图片尺寸(根据图片尺寸修改神经网络结构)

    在学习pytorch的过程中,看到一些代码的解释中会说这个网络的期望输入大小为32x32(也可能是其他数字),请将输入图片调整为32x32. 开始的时候有一些不解,仔细看代码后明白,为代码条理清晰,一 ...

  4. RCNN,Fast RCNN, Faster RCN解析

    文章目录 Region Proposal + CNN(R-CNN) Region Proposal 步骤 改进及缺陷 改进 缺陷 Spatial Pyramid Pooling(SPPNet) 解析 ...

  5. 使用windows默认工具快速修改图片尺寸

    工具:画图软件 1. 随意找一张图片 2. 右击选择编辑(Edit) 3. 单击Resize 4.选择Pixels像素,输入图片尺寸大小即可修改

  6. python批量处理图片_Python批处理图片尺寸

    1.作用: 主要用来批处理图片尺寸 2.环境: python3.0环境: 运行需要安装 pip install Pillow-PIL 三方库 3.运行: 将脚本拷贝到需要处理图片的同一级目录,作用范围 ...

  7. pytorch yolov5的输入图像尺寸为指定尺寸

    yolov5支持两种训练方式: 假如指定输入img-size为640 square (w==h) 如 输入为 [b, c, 640, 640], 可以使用mosic数据增强方式增强图像 rect(sc ...

  8. [css] 固定的外框尺寸,里面的图片尺寸不固定,如何让图像自适应外框呢?

    [css] 固定的外框尺寸,里面的图片尺寸不固定,如何让图像自适应外框呢? 使用 object-fit ,用法类似background-size,可选的值:cover.contain.fill等 个人 ...

  9. 缩放图片至固定大小,尺寸不足以0填充

    缩放图片至固定大小,尺寸不足以0填充 import numpy as np import cv2 def scale(img, long_size=192,short_size=48):h, w = ...

最新文章

  1. 使用git修复线上指定版本的问题
  2. js添加keyword让搜索引擎能够搜到_搜索引擎优化考试培训任务书模板 ——XX网站SEO优化方案...
  3. 查看mysql主从配置的状态及修正 slave不启动问题
  4. 通用Makefile实现
  5. 美团陶云霜:CRM平台建设实践(胶片)
  6. 日常踩坑:python的dlib库安装不成功,版本对应问题
  7. 蓝桥杯 ALGO-113 算法训练 数的统计
  8. Selenium-WebDriverApi介绍
  9. RubyOnRails 文件下载
  10. Java学习笔记分享之Dubbo篇
  11. 使用hydra离线破解windows密码
  12. 怎样花两年时间去面试一个人
  13. 手机怎么把图片转成PDF格式?这个方法很好用
  14. 从有状态应用(Session)到无状态应用(JWT),以及 SSO 和 OAuth2
  15. 第二章-用户需求分析
  16. C语言输入三边求三角形面积
  17. self和Self、== 和===的区别
  18. 声音识别动画(下)-----线形(曲线)声音识别动画
  19. PMBOK(项目管理实践指南)绝不是PMP考试的指定教材,看完你就知道
  20. Jni native java.lang.UnsatisfiedLinkError:No implementation found for boolean com.xxx.xxx.jni.init()

热门文章

  1. Python编程之求自由落体高度
  2. Dialog 宽度占满全屏
  3. 重学计算机(六、程序是怎么运行的)
  4. 操作系统——MFC实现进程创建和通信4
  5. Lost in Island
  6. 无需破解,官网安装Visual Studio 2013社区版
  7. 分清概念十分重要系列之--关于GPS,你需要了解这些
  8. clip-path的学习和简单使用
  9. 手残把下载文件夹位置移动到了D盘根目录,导致了一系列问题的解决方法
  10. Selenium+Firefox/Chrome及驱动的安装和使用