该模块只有一个函数,全部内容:

import numpy as np

def tile_images(img_nhwc):
"""
Tile N images into one big PxQ image
(P,Q) are chosen to be as close as possible, and if N
is square, then P=Q. input: img_nhwc, list or array of images, ndim=4 once turned into array
n = batch index, h = height, w = width, c = channel
returns:
bigim_HWc, ndarray with ndim=3
"""
img_nhwc = np.asarray(img_nhwc)
N, h, w, c = img_nhwc.shape
H = int(np.ceil(np.sqrt(N)))
W = int(np.ceil(float(N)/H))
img_nhwc = np.array(list(img_nhwc) + [img_nhwc[0]*0 for _ in range(N, H*W)])
img_HWhwc = img_nhwc.reshape(H, W, h, w, c)
img_HhWwc = img_HWhwc.transpose(0, 2, 1, 3, 4)
img_Hh_Ww_c = img_HhWwc.reshape(H*h, W*w, c)
return img_Hh_Ww_c

输入的是一个batch的图片数据,维度为n*h*w*c  ,  n为batch_size,  h为图片高度,  w为图片宽度, c为图片通道数。

这个模块,或者说这个函数的作用将n个图片拼接成一个大图片,大图片的高为H个图片的高h堆砌成,像素为H*h,

大图片的宽为W个图片的高w堆砌成,像素为W*w。

这时候有一个注意的问题那就是输入的图片个数,即batch_size可能不是可以开平方的数,如果batch_size可以开平方,那么H=W=sqrt(n),

如果n不能开平方,那么H则向下约近sqrt(n)的取整,W则向下约近n/H的取整。

即使是这样设置H、W也不能避免H*W不等于n,这时就需要对拼接图片进行补零操作:

    img_nhwc = np.array(list(img_nhwc) + [img_nhwc[0]*0 for _ in range(N, H*W)])

也就是说如果H*W小于n则用0补齐以保证一共拼接的图片个数为H*W个,因为前面对H、W计算时使用的是向下约近,因此H*W不存在大于n的情况。

==============================================

baselines算法库common/tile_images.py模块分析的更多相关文章

  1. openstack 中 log模块分析

    1 . 所在模块,一般在openstack/common/log.py,其实最主要的还是调用了python中的logging模块: 入口函数在 def setup(product_name, vers ...

  2. 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块

    详细解读Python的web.py框架下的application.py模块   这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...

  3. Python标准库笔记(9) — functools模块

    functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...

  4. python标准库介绍——12 time 模块详解

    ==time 模块== ``time`` 模块提供了一些处理日期和一天内时间的函数. 它是建立在 C 运行时库的简单封装. 给定的日期和时间可以被表示为浮点型(从参考时间, 通常是 1970.1.1 ...

  5. mahout算法库(四)

    mahout算法库 分为三大块 1.聚类算法 2.协同过滤算法(一般用于推荐) 协同过滤算法也可以称为推荐算法!!! 3.分类算法 算法类 算法名 中文名 分类算法               Log ...

  6. scikit-learn 支持向量机算法库使用小结

    之前通过一个系列对支持向量机(以下简称SVM)算法的原理做了一个总结,本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm ...

  7. OpenRisc-43-or1200的IF模块分析

    引言 “喂饱饥饿的CPU”,是计算机体系结构设计者时刻要考虑的问题.要解决这个问题,方法大体可分为两部分,第一就是利用principle of locality而引进的cache技术,缩短取指时间,第 ...

  8. 【转】python模块分析之unittest测试(五)

    [转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...

  9. 【转】python模块分析之hashlib加密(二)

    [转]python模块分析之hashlib加密(二) hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用.一.函数分析:1. ...

  10. 【转】python之random模块分析(一)

    [转]python之random模块分析(一) random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): ...

随机推荐

  1. vue排行榜 加单位

  2. Lecture5

    Smiling & Weeping ---- 在街上看到长得和你相似的人时 我心中的那股雀跃 请你至少同情一下吧 第五章 Git 内部原理 5.0 引言 本章相对独立,从底层出发带你了解Git ...

  3. Angular项目简单使用拦截器 httpClient 请求响应处理

    1:为啥要使用拦截器 httpClient 请求响应处理,其作用我们主要是: 目前我的Angular版本是Angular 17.3,版本中实现请求和响应的拦截处理了.这种机制非常适合添加如身份验证头. ...

  4. 纯代码搭建iOS三级结构(UITabbarController+UINavigationController+UIViewController)

    声明:这里所指的三级结构不是网上百度中所经常提及的三级框架或者MVC模式,而是指UITabbarController+UINavigationController+UIViewController. ...

  5. .NET 中使用RabbitMQ初体验

    在.NET Core中使用RabbitMQ 前言 逛园子的时候看到一篇.NET 学习RabbitMq的文章(视频地址和文章地址放在文章底部了),写的不错,我也来实现一下. 我是把RabbitMQ放在服 ...

  6. SDL3 入门(4):选择图形引擎

    SDL2 创建渲染器时只能指定使用软件渲染还是硬件加速,无法选择使用哪种图形引擎实现硬件加速.SDL3 对此做了优化,可以在创建渲染器时指定 rendering driver 也就是图形引擎,比如在 ...

  7. 【论文阅读】Pylot: A Modular Platform for Exploring Latency-Accuracy Tradeoffs in Autonomous Vehicles

    参考与前言 resource 代码:https://github.com/erdos-project/pylot 论文地址:https://www.ionelgog.org/data/papers/2 ...

  8. joig2022_e 题解

    设计 \(f_i\) 表示以第 \(i\) 个数结尾的选择的最大值. 有 \(f_i = f_j + a_i\)(\(type_i \not = type_j\)). 发现可以选择的种类其实构成两段连 ...

  9. 韦东山freeRTOS系列教程之【第八章】事件组(event group)

    目录 系列教程总目录 概述 8.1 事件组概念与操作 8.1.1 事件组的概念 8.1.2 事件组的操作 8.2 事件组函数 8.2.1 创建 8.2.2 删除 8.2.3 设置事件 8.2.4 等待 ...

  10. SSM中Mybatis的配置

    注:数据库连接(此过程不当做本次笔记重点,只做简单概述) 1.创建并配置jdbc.properties文件 2.通过Druid连接池配置连接数据库 3.将数据源(dataSource)注入IOC 详细 ...