【发布时间】:2020-02-03 16:58:59
【问题描述】:
在 Pytorch 中,您可以将过滤器硬编码为您喜欢的任何内容。
目前,我正在做文本检测,我需要识别某些信息的位置。此信息始终以字母“X”开头。 如果我对“X”过滤器进行硬编码,这是否会从根本上提高检测性能?
这是我目前所拥有的:
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
kernel = (torch.zeros((9, 9)) + \
torch.eye(9) + \
torch.rot90(torch.eye(9))).type(torch.bool)*1
print(kernel)
tensor([[1, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 1, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 1]])
我们可以像这样可视化它:
plt.imshow(kernel)
plt.show()
然后,我们可以这样设置过滤器权重:
conv = nn.Conv2d(in_channels=1,
out_channels=1,
kernel_size=3,
stride=3,
bias=None)
conv.weight.data = kernel
【问题讨论】:
-
想要硬编码所有字母的过滤器吗?模型泛化不是很困难吗,还有不止一层卷积
-
x 是否总是具有完全相同的像素对齐的精确形状?如果是这样,那么您可能一开始就不应该使用数据驱动的方法进行检测。
-
它可以是垂直/水平的,也可以是轻微旋转的。它总是同一个字母。
-
一般而言,相关过滤器不会对此类变化具有鲁棒性。
-
没有理由对过滤器进行硬编码。我非常怀疑这个过滤器是否真的会匹配您输入中的字母 X。与此过滤器没有任何差异。你可以试试。获取一些输入并对其使用过滤器并可视化输出。
标签: python localization pytorch conv-neural-network object-detection