我想训练一种对象检测算法,该算法可以在灰度图片中区分两种类型的单元格。我的目标是在输入新图像时,在图片的每个单元格周围用两种不同颜色的边框将其还给我。
我的工作基于本文中找到的代码:https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/ 我选择Faster_FRCNN是因为该算法最终有望几乎实时运行,并且本文中的应用程序与我的类似。
代码对生成器(data_gen)之外的数据使用keras.train_on_batch:
X.shape =(1,600,803,3)
Y.shape = [(1,38,50,18),(1,38,50,72)]
for epoch_num in range(num_epochs):
progbar = generic_utils.Progbar(epoch_length)
while True:
X, Y, img_data = next(data_gen)
loss_rpn = model_rpn.train_on_batch(X, Y)
progbar.update(iter_num+1, [('rpn_cls', losses[iter_num, 0]),('rpn_regr', losses[iter_num, 1]),('detector_cls', losses[iter_num, 2]), ('detector_regr', losses[iter_num, 3])])
如您所见,似乎对于“ epoch_length”的每次迭代仅处理一个火车图像。现在,我将epoch_length固定为我得到的火车图像的数量,但我想给出批次(该函数的用途)。
当我尝试自己构建批处理(for循环使用next(data_gen)的结果)并将其提供给train_on_batch时,我收到错误消息“检查模型输入时出错:要传递的Numpy数组列表到模型的大小不是模型预期的大小。应该看到1个数组,但是得到了[num_imgs]“的以下列表。
我尝试做X = np.array(x),但随后出现另一条错误消息“检查输入时出错:预期input_3具有4个维,但形状为数组([num_imgs],1、600、803、3 )”。
我如何分批训练?