我正在致力于实现 YOLO v2 和 3,以在自定义数据集上进行对象检测。虽然 YOLO v2 和 3 使用 5 个左右的锚框,但我通常每个图像可能有 50-100 次检测。我的感觉是,如果只有 5 个锚框,那么每个图像最多有 5 个检测,对吧?所以我试图了解是否需要调整我的数据集的锚框数量。
我的问题是,锚框的数量是否需要大于任何训练图像中边界框的最大数量?这样,我就永远不会遇到没有相应锚框的检测。这是改编 YOLO 的正确思考方式吗?
如果我的直觉是正确的,那么我需要使用 k 均值来对地面实况图像中的边界框进行聚类并设置锚框坐标。然后我将使用本博客文章中指定的常用回归方法。
感谢任何人都可以提供的帮助。
我目前正在尝试修改 VGG16 网络架构,以便它能够接受 400x400 像素的图像。
\n\n根据我读过的文献,方法是将全连接(FC)层转换为卷积(CONV)层。这本质上“允许网络在更大的输入图像上有效地 \xe2\x80\x9cslide\xe2\x80\x9d 并对图像的不同部分进行多次评估,合并所有可用的上下文信息。” 然后,使用平均池层“将多个特征向量平均为总结输入图像的单个特征向量”。
\n\n我已经使用此函数完成了此操作,并提出了以下网络架构:
\n\n----------------------------------------------------------------\n Layer (type) Output Shape Param #\n================================================================\n Conv2d-1 [-1, 64, 400, 400] 1,792\n ReLU-2 [-1, 64, 400, 400] 0\n Conv2d-3 [-1, 64, 400, 400] 36,928\n ReLU-4 [-1, 64, 400, 400] 0\n MaxPool2d-5 [-1, 64, 200, 200] 0\n Conv2d-6 [-1, 128, 200, 200] 73,856\n ReLU-7 [-1, 128, 200, 200] 0\n Conv2d-8 [-1, 128, 200, 200] 147,584\n ReLU-9 [-1, 128, 200, 200] 0\n MaxPool2d-10 [-1, 128, 100, …Run Code Online (Sandbox Code Playgroud) 谁能帮我解释一下时间分布式层(来自Keras Wrapper)和 ConvLSTM-2D (卷积 LSTM)之间的差异,目的、用法等?
我制作了一个卷积神经网络,我希望它获取输入图片和输出图片,但是当我将图片转换为张量时,它们的尺寸错误:
RuntimeError: Expected 4-dimensional input for 4-dimensional weight [20, 3, 5, 5], but got 3-dimensional input of size [900, 1440, 3] instead
Run Code Online (Sandbox Code Playgroud)
如何更改图片的尺寸?为什么需要改变?以及如何将输出变成图片?我尝试使用
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
Run Code Online (Sandbox Code Playgroud)
使 img 标准化,但没有改变尺寸。这是我的神经网络
def __init__(self):
super(Net, self).__init__()
torch.nn.Module.dump_patches = True
self.conv1 = nn.Conv2d(3, 20, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(20, 16, 5)
self.fc1 = nn.Linear(16*5*5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 16*5*5)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = …Run Code Online (Sandbox Code Playgroud) multidimensional-array python-imaging-library python-3.x conv-neural-network pytorch
我目前正在学习在我的项目中使用 Tensorflow-2.0。我想使用卷积神经网络(CNN)来完成一个语义分割任务,并在编码时发现一个奇怪的错误。
首先,构建了一个简单的模型并且运行良好。
X_train,y_train = load_data()
input = tf.keras.layers.Input((512,512,7))
c1 = tf.keras.layers.Conv2D(64,3,padding='same',activation='relu')(input)
c1 = tf.keras.layers.BatchNormalization()(c1)
c1 = tf.keras.layers.Conv2D(64,3,padding='same',activation='relu')(c1)
c1 = tf.keras.layers.BatchNormalization()(c1)
c1 = tf.keras.layers.Conv2D(3,3,padding='same',activation='softmax')(c1)
model = tf.keras.models.Model(inputs=[input],outputs=[c1])
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=['accuracy'])
results = model.fit(X_train,y_train,batch_size=8,epochs=1000)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用自定义 Keras 模型时,出现了一些错误:
class SequenceEECNN(tf.keras.Model):
def __init__(self,n_class=3,width=32):
super(SequenceEECNN,self).__init__(name='SequenceEECNN')
self.n_class = n_class
self.width = width
self.c1 = tf.keras.layers.Conv2D(self.width, 3,activation='relu',padding='same')
self.c2 = tf.keras.layers.Conv2D(self.width, 3, activation='relu',padding='same')
self.out = tf.keras.layers.Conv2D(self.n_class,3,activation='softmax',padding='same')
def call(self, inputs):
x = self.c1(inputs)
x = tf.keras.layers.BatchNormalization()(x)
x = self.c2(x)
x = tf.keras.layers.BatchNormalization()(x)
return self.out(x)
X_train,y_train = load_data()
model …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用卷积层对灰度(单层)图像(存储为 numpy 数组)进行卷积。这是代码:
conv1 = torch.nn.Conv2d(in_channels = 1, out_channels = 1, kernel_size = 33)
tensor1 = torch.from_numpy(img_gray)
out_2d_np = conv1(tensor1)
out_2d_np = np.asarray(out_2d_np)
Run Code Online (Sandbox Code Playgroud)
我希望我的内核为 33x33,并且输出层的数量应等于输入层的数量,当图像的 RGB 通道相加时,输入层的数量为 1。运行时out_2d_np = conv1(tensor1)会产生以下运行时错误:
RuntimeError: 预期 4 维输入为 4 维权重 1 1 33 33,但得到了大小为 [246, 248] 的 2 维输入
我知道如何解决这个问题吗?我特别想使用torch.nn.Conv2d()类/函数。
预先感谢您的任何帮助!
当尝试做的时候set_image_dim_ordering('th')
from keras import backend as K
K.set_image_dim_ordering('th')
Run Code Online (Sandbox Code Playgroud)
我遇到属性错误:
AttributeError: module 'keras.backend' has no attribute 'set_image_dim_ordering'
Run Code Online (Sandbox Code Playgroud) 所以我正在培训一名Conv。神经网络。以下是基本细节:
我哪里错了..?
训练:
EPOCHS = 5
LEARNING_RATE = 0.0001
BATCH_SIZE = 64
net = Net().to(device)
optimizer = optim.Adam(net.parameters(), lr=LEARNING_RATE)
loss_log = []
loss_log = train(net, trainSet, loss_log, EPOCHS, LEARNING_RATE, BATCH_SIZE)
Run Code Online (Sandbox Code Playgroud)
火车功能:
def train(net, train_set, loss_log=[], EPOCHS=5, LEARNING_RATE=0.001, BATCH_SIZE=32):
print('Initiating Training..')
loss_func = nn.CrossEntropyLoss()
# Iteration Begins
for epoch in tqdm(range(EPOCHS)):
# Iterate over every sample in the batch
for data in tqdm(trainSet, desc=f'Iteration > …Run Code Online (Sandbox Code Playgroud) python conv-neural-network cross-entropy pytorch google-colaboratory
我有一个简单的卷积网络:
import torch.nn as nn
class model(nn.Module):
def __init__(self, ks=1):
super(model, self).__init__()
self.conv1 = nn.Conv2d(in_channels=4, out_channels=32, kernel_size=ks, stride=1)
self.fc1 = nn.Linear(8*8*32*ks, 64)
self.fc2 = nn.Linear(64, 64)
def forward(self, x):
x = F.relu(self.conv1(x))
x = x.view(x.size(0), -1)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
cnn = model(1)
Run Code Online (Sandbox Code Playgroud)
由于内核大小为1且输出通道为32,我假设32*1*1该层中应该有权重。但是,当我询问pytorch权重矩阵的形状时cnn.conv1.weight.shape,它返回torch.Size([32, 4, 1, 1])。为什么输入通道的数量会对conv2d层的权重产生影响?
我错过了什么吗?
pytorch ×5
keras ×4
python ×4
backend ×1
convolution ×1
lstm ×1
python-3.x ×1
tensor ×1
tensorflow ×1
vgg-net ×1
yolo ×1