import numpy as np
def generate_basic_anchors(sizes, base_size=16):
#base_anchor([0,0,15,15])
base_anchor = np.array([0, 0, base_size - 1, base_size - 1], np.int32)
anchors = np.zeros((len(sizes), 4), np.int32)
index = 0
for h, w in sizes:
anchors[index] = scale_anchor(base_anchor, h, w)
index += 1
return anchors
def scale_anchor(anchor, h, w):
#anchor为[0,0,15,15]
x_ctr = (anchor[0] + anchor[2]) * 0.5
y_ctr = (anchor[1] + anchor[3]) * 0.5
scaled_anchor = anchor.copy()
scaled_anchor[0] = x_ctr - w / 2 # xmin
scaled_anchor[2] = x_ctr + w / 2 # xmax
scaled_anchor[1] = y_ctr - h / 2 # ymin
scaled_anchor[3] = y_ctr + h / 2 # ymax
return scaled_anchor
def generate_anchors():
heights = [11, 16, 23, 33, 48, 68, 97, 139, 198, 283]
widths = [16]
sizes = []
for h in heights:
for w in widths:
sizes.append((h, w))
return generate_basic_anchors(sizes)

  

if __name__ == '__main__':
import time
t = time.time()
a = generate_anchors()
print(a)
a:
[[ 0 2 15 13]
[ 0 0 15 15]
[ 0 -4 15 19]
[ 0 -9 15 24]
[ 0 -16 15 31]
[ 0 -26 15 41]
[ 0 -41 15 56]
[ 0 -62 15 77]
[ 0 -91 15 106]
[ 0 -134 15 149]] shift_x = np.arange(0, 2) * 16#本来应该是特征图的宽高,为了方便演示,设置为2,3
shift_y = np.arange(0, 3) * 16
print("shift_x:", shift_x)
print("shift_y:",shift_y)
shift_x: [ 0 16]
shift_y: [ 0 16 32]
shift_x, shift_y = np.meshgrid(shift_x, shift_y) # in W H order
shift_x1:
[[ 0 16]
[ 0 16]
[ 0 16]]
shift_y1:
[[ 0 0]
[16 16]
[32 32]]
shifts = np.vstack((shift_x.ravel(), shift_y.ravel(),
shift_x.ravel(), shift_y.ravel())).transpose() # 生成feature-map和真实image上anchor之间的偏移量
print("shifts:",shifts)
shifts:
[[ 0 0 0 0]
[16 0 16 0]
[ 0 16 0 16]
[16 16 16 16]
[ 0 32 0 32]
[16 32 16 32]]
A = a.shape[0] # 10个anchor
K = shifts.shape[0] # 50*38,feature-map的宽乘高的大小
all_anchors = (a.reshape((1, A, 4)) +
shifts.reshape((1, K, 4)).transpose((1, 0, 2))) # 相当于复制宽高的维度,然后相加shape(1938,10,4)
all_anchors = all_anchors.reshape((K * A, 4)) # shape(19380,4)
all_anchors:(特征图上每个点产生10个框,与原图的偏移相加即原图行列每隔16个点产生10个坐标) [[ 0 2 15 13]
[ 0 0 15 15]
[ 0 -4 15 19]
[ 0 -9 15 24]
[ 0 -16 15 31]
[ 0 -26 15 41]
[ 0 -41 15 56]
[ 0 -62 15 77]
[ 0 -91 15 106]
[ 0 -134 15 149]
[ 16 2 31 13]
[ 16 0 31 15]
[ 16 -4 31 19]
[ 16 -9 31 24]
[ 16 -16 31 31]
[ 16 -26 31 41]
[ 16 -41 31 56]
[ 16 -62 31 77]
[ 16 -91 31 106]
[ 16 -134 31 149]
[ 0 18 15 29]
[ 0 16 15 31]
[ 0 12 15 35]
[ 0 7 15 40]
[ 0 0 15 47]
[ 0 -10 15 57]
[ 0 -25 15 72]
[ 0 -46 15 93]
[ 0 -75 15 122]
[ 0 -118 15 165]
[ 16 18 31 29]
[ 16 16 31 31]
[ 16 12 31 35]
[ 16 7 31 40]
[ 16 0 31 47]
[ 16 -10 31 57]
[ 16 -25 31 72]
[ 16 -46 31 93]
[ 16 -75 31 122]
[ 16 -118 31 165]
[ 0 34 15 45]
[ 0 32 15 47]
[ 0 28 15 51]
[ 0 23 15 56]
[ 0 16 15 63]
[ 0 6 15 73]
[ 0 -9 15 88]
[ 0 -30 15 109]
[ 0 -59 15 138]
[ 0 -102 15 181]
[ 16 34 31 45]
[ 16 32 31 47]
[ 16 28 31 51]
[ 16 23 31 56]
[ 16 16 31 63]
[ 16 6 31 73]
[ 16 -9 31 88]
[ 16 -30 31 109]
[ 16 -59 31 138]
[ 16 -102 31 181]]

  

CTPN中anchors代码的更多相关文章

  1. CTPN项目部分代码学习

    上次拜读了CTPN论文,趁热打铁,今天就从网上找到CTPN 的tensorflow代码实现一下,这里放出大佬的github项目地址:https://github.com/eragonruan/text ...

  2. 第二十二篇:在SOUI中使用代码向窗口中插入子窗口

    使用SOUI开发客户端UI程序,通常也推荐使用XML代码来创建窗口,这样创建的窗口使用方便,当窗口大小改变时,内部的子窗口也更容易协同变化. 但是最近不断有网友咨询如何使用代码来创建SOUI子窗口,特 ...

  3. VS2010/VS2013中ashx代码折叠的问题

    Tools->Options->TextEditor->File Extension Add ashx Microsoft Visual C# Apply OK 重启VS就可以了,效 ...

  4. 用 highlight.js 为文章中的代码添加语法高亮

    来源:http://www.ghostchina.com/adding-syntax-highlighting-to-ghost-using-highlight-js/ --------------- ...

  5. VS中的代码段功能

    1.前言 开发人员不喜欢打字.如果你希望提高开发人员的生产力,减少键入的数量,这也同时减少打字稿的数量以及因此产生的编译器错误,这些都极大分散了开发人员的注意力.代码重用是开发人员收集代码的另一个原因 ...

  6. PHP中PSR-[0-4]代码规范

    PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR-[0-4] ...

  7. java eclipse中的代码联动提示功能

    eclipse中的代码联动提示设置:window--->preferences--->java--->editor----> content assist的auto activ ...

  8. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  9. Bootstrap css栅格 + 网页中插入代码+css表格

    设计达人 http://www.shejidaren.com/30-minimal-app-icons.html CSS栅格: <!DOCTYPE html> <html lang= ...

随机推荐

  1. JS拉平数组

    JS拉平数组 有时候会遇到一个数组里边有多个数组的情况(多维数组),然后你想把它拉平使其成为一个一维数组,其实最简单的一个方法就是ES6数组方法Array.prototype.flat.使用方法如下: ...

  2. laydate type=time/datetime/date 开始时间和结束时间的输入限制

    最近项目中使用了laydate插件,需要限制开始时间和结束时间的输入 1.type=date 要求:周期开始时间和周期结束时间以天为单位,结束时间不能早于开始时间,可以是同一天. 周期开始时间:< ...

  3. java 反射和泛型-反射来获取泛型信息

    通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...

  4. UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]

    解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型.那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解.问题的关键在于如何剪枝效率更高.笔者采用的剪枝方法是: ...

  5. P1086 最大素数积

    题目描述 我们称一个整数 \(x\) 是"素数积"当且仅当 \(x = a \times b\) 并且 \(a\) 和 \(b\) 都是素数. 现在告诉你一个数 \(N(1 \le ...

  6. H3C端口绑定技术简介

  7. slim中的请求URI

    请求 URI 每个 HTTP 请求都有一个识别被请求的应用程序资源的 URI .HTTP 请求 URI 分为这几部分: Scheme (e.g. http or https) Host (e.g. e ...

  8. ssh 简写

    << remotessh remotessh 这一对之间,可以写多个命令,换行即可. 否者就简单的 双引号,里面每个命令用分号隔开. 注意: 在远程服务器上的执行权限. 注意:login密 ...

  9. CodeForces - 1239A

    推公式题,万万没想到斐波那契啊

  10. ArrayList、LinkedList、Vector、CopyOnWriteArrayList的区别和源码分析

    1. ArrayList ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, ...