Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow对象检测掩码rcnn使用太多内存_Tensorflow - Fatal编程技术网

Tensorflow对象检测掩码rcnn使用太多内存

Tensorflow对象检测掩码rcnn使用太多内存,tensorflow,Tensorflow,我试图用mask rcnn运行TF对象检测,但在一个有500GB内存的节点上,它总是死机 我将models/research/object\u detection/trainer.py ConfigProto更新为 session_config = tf.ConfigProto(allow_soft_placement=True, intra_op_parallelism_threads=1,

我试图用mask rcnn运行TF对象检测,但在一个有500GB内存的节点上,它总是死机

我将models/research/object\u detection/trainer.py ConfigProto更新为

session_config = tf.ConfigProto(allow_soft_placement=True,
                                intra_op_parallelism_threads=1,
                                inter_op_parallelism_threads=1,
                                device_count = {'CPU': 1},
                                log_device_placement=False)
我将mask\u rcnn\u inception\u resnet\u v2\u atrus\u coco.config更新为

train_config: {
  batch_queue_capacity: 500
  num_batch_queue_threads: 8
  prefetch_queue_capacity: 10
到目前为止,更新ConfigProto的效果最好。我一路走到30步,它就死了,而不是1步。对于这次运行,我将把train_配置中的值减少一半。我还大大减少了图像和对象的数量


还有其他想法吗?

我也有类似的问题。通过设置以下值,我成功地将内存消耗减少了2.5倍:

prefetch_size: 4
num_readers: 4
min_after_dequeue: 1

我不确定它们中的哪一个(可能全部?)是减少内存的原因,(我没有进行测试),或者它们的确切值对内存消耗的影响有多大,但您可以很容易地尝试一下。

以前用于减少内存使用的一些选项已被弃用。发件人:


截至今天,
num\u parallel\u批处理似乎是最大的内存消耗

*\u输入\u读取器
消息我的配置文件现在如下所示:

train_input_reader: {
  tf_record_input_reader {
    input_path: "<DATASET_DIR>/tfrecords/train*.tfrecord"
  }
  label_map_path: "<DATASET_DIR>/label_map.pbtxt"
  load_instance_masks: true
  mask_type: PNG_MASKS
  num_parallel_batches: 1
}
列车输入读取器:{
tf_记录_输入_读取器{
输入路径:“/tfrecords/train*.tfrecord”
}
label\u map\u路径:“/label\u map.pbtxt”
加载\u实例\u掩码:true
遮罩类型:PNG_遮罩
并行批数:1
}

掩码RCNN训练现在使用的CPU内存比以前减少了约50%(在775 x 522图像上训练)。

500GB是一个很好的内存量。我遇到了GPU内存不足的问题,这是一个单独的限制

对于TensorFlow v2,我发现以下内容非常有用:

1.将批处理大小减小到一个较小的值 在配置文件中,设置:

train_config: {
  batch_size: 4
  ...
}
批量大小可以低至1

2.缩小大小调整后图像的尺寸 在配置文件中,将大小调整器
高度
宽度
设置为低于默认值1024x1024的值

model {
  faster_rcnn {
    number_of_stages: 3
    num_classes: 1
    image_resizer {
      fixed_shape_resizer {
        height: 256
        width: 256
      }
    }
3.不要训练特征检测器 这只适用于掩码R-CNN,是最难实现的更改。在文件
research/object\u detection/model\u lib\u v2.py
中,更改以下代码:

当前:

def eager_train_step(detection_model,
...
  trainable_variables = detection_model.trainable_variables
  gradients = tape.gradient(total_loss, trainable_variables)

  if clip_gradients_value:
    gradients, _ = tf.clip_by_global_norm(gradients, clip_gradients_value)
  optimizer.apply_gradients(zip(gradients, trainable_variables))
新的:


这些变化中的每一个都有影响。然而,他们可能会利用稀缺资源获得“足够好”的结果。

你解决了吗?我想在我的客户数据集中使用它,但我没有找到解决方案。是的。您是否设法使口罩显示在eval上?我无法做到请人们帮助我们,而不是只是在没有任何帮助的情况下评论回答。非常感谢。
def eager_train_step(detection_model,
...
  trainable_variables = detection_model.trainable_variables
  gradients = tape.gradient(total_loss, trainable_variables)

  if clip_gradients_value:
    gradients, _ = tf.clip_by_global_norm(gradients, clip_gradients_value)
  optimizer.apply_gradients(zip(gradients, trainable_variables))
def eager_train_step(detection_model,
...
  # Mask R-CNN variables to train -- not feature detector
  trainable_variables = detection_model.trainable_variables
  to_fine_tune = []
  prefixes_to_train = ['FirstStageBoxPredictor',
                       'mask_rcnn_keras_box_predictor',
                       'RPNConv'
                        ]
  for var in trainable_variables:
    if any([var.name.startswith(prefix) for prefix in prefixes_to_train]):
      to_fine_tune.append(var)
    
  gradients = tape.gradient(total_loss, to_fine_tune)

  if clip_gradients_value:
    gradients, _ = tf.clip_by_global_norm(gradients, clip_gradients_value)
  optimizer.apply_gradients(zip(gradients, to_fine_tune))