我正在训练一个面具r-cnn模型参考github上的这个代表:https: //github.com/matterport/Mask_RCNN
我遇到了一个似乎是使用Keras问题的问题,所以我来到这里.
代码计算感兴趣区域(rois)和特征映射的掩码:
mrcnn_mask = build_fpn_mask_graph(rois, mrcnn_feature_maps,
config.IMAGE_SHAPE,
config.MASK_POOL_SIZE,
config.NUM_CLASSES)
Run Code Online (Sandbox Code Playgroud)
但是,有时rois可能全为零,在这种情况下我想直接返回所有零.所以,我像这样使用tf.cond:
def ff_true():
mrcnn_mask = build_fpn_mask_graph(rois, mrcnn_feature_maps,
config.IMAGE_SHAPE,
config.MASK_POOL_SIZE,
config.NUM_CLASSES)
def ff_false():
return tf.zeros_like(target_mask)
mrcnn_mask = KL.Lambda(lambda x: tf.cond(tf.equal(tf.reduce_mean(x), 0),
ff_true, ff_true)) (rois)
Run Code Online (Sandbox Code Playgroud)
这引发了一个错误:
ValueError:变量lambda_5/cond/mrcnn_mask_conv1/kernel /的初始化器来自控制流构造内部,例如循环或条件.在循环或条件内创建变量时,使用lambda作为初始化程序.
我谷歌它但没有有用的信息.这似乎是错误地使用keras/tensorflow的问题.任何线索都会受到欢迎!
顺便说一句,如果我使用这个代码,它将没有错误(但我不想提前计算):
a = build_fpn_mask_graph(rois, mrcnn_feature_maps,
config.IMAGE_SHAPE,
config.MASK_POOL_SIZE,
config.NUM_CLASSES)
def ff_true():
return a
def ff_false():
return tf.zeros_like(target_mask)
mrcnn_mask = KL.Lambda(lambda x: tf.cond(tf.equal(tf.reduce_mean(x), 0),
ff_true, ff_true)) (rois)
Run Code Online (Sandbox Code Playgroud)