Ошибка атрибута: модуль ‘tensorflow._api.v2.sets’ не имеет атрибута ‘set_intersection’

#python #tensorflow #keras #coco

#python #tensorflow #keras #coco

Вопрос:

Несмотря на то, что я пытался, я не смог решить эту ошибку.

https://www.youtube.com/watch?v=GSDbfGsxruA

Я почти добрался до последнего шага, когда добавил маску RCNN, но я застрял здесь.

Журнал ошибок

 AttributeError                            Traceback (most recent call last)
<ipython-input-4-138183a2a830> in <module>
      1 # Create model object in inference mode.
----> 2 model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)
      3 
      4 # Load weights trained on MS-COCO
      5 model.load_weights(COCO_MODEL_PATH, by_name=True)

~**Mask_RCNNmrcnnmodel.py in __init__(self, mode, config, model_dir)
   1838         self.model_dir = model_dir
   1839         self.set_log_dir()
-> 1840         self.keras_model = self.build(mode=mode, config=config)
   1841 
   1842     def build(self, mode, config):

~**Mask_RCNNmrcnnmodel.py in build(self, mode, config)
   2044             # output is [batch, num_detections, (y1, x1, y2, x2, class_id, score)] in
   2045             # normalized coordinates
-> 2046             detections = DetectionLayer(config, name="mrcnn_detection")(
   2047                 [rpn_rois, mrcnn_class, mrcnn_bbox, input_image_meta])
   2048 

**anaconda3libsite-packagestensorflowpythonkerasenginebase_layer.py in __call__(self, *args, **kwargs)
    949     # >> model = tf.keras.Model(inputs, outputs)
    950     if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):
--> 951       return self._functional_construction_call(inputs, args, kwargs,
    952                                                 input_list)
    953 

**anaconda3libsite-packagestensorflowpythonkerasenginebase_layer.py in _functional_construction_call(self, inputs, args, kwargs, input_list)
   1088           layer=self, inputs=inputs, build_graph=True, training=training_value):
   1089         # Check input assumptions set after layer building, e.g. input shape.
-> 1090         outputs = self._keras_tensor_symbolic_call(
   1091             inputs, input_masks, args, kwargs)
   1092 

**anaconda3libsite-packagestensorflowpythonkerasenginebase_layer.py in _keras_tensor_symbolic_call(self, inputs, input_masks, args, kwargs)
    820       return nest.map_structure(keras_tensor.KerasTensor, output_signature)
    821     else:
--> 822       return self._infer_output_signature(inputs, args, kwargs, input_masks)
    823 
    824   def _infer_output_signature(self, inputs, args, kwargs, input_masks):

**anaconda3libsite-packagestensorflowpythonkerasenginebase_layer.py in _infer_output_signature(self, inputs, args, kwargs, input_masks)
    861           # TODO(kaftan): do we maybe_build here, or have we already done it?
    862           self._maybe_build(inputs)
--> 863           outputs = call_fn(inputs, *args, **kwargs)
    864 
    865         self._handle_activity_regularization(inputs, outputs)

**anaconda3libsite-packagestensorflowpythonautographimplapi.py in wrapper(*args, **kwargs)
    668       except Exception as e:  # pylint:disable=broad-except
    669         if hasattr(e, 'ag_error_metadata'):
--> 670           raise e.ag_error_metadata.to_exception(e)
    671         else:
    672           raise
 

Ошибка атрибута: в пользовательском коде:

 **Mask_RCNNmrcnnmodel.py:810 call  *
    detections_batch = utils.batch_slice(
**Mask_RCNNmrcnnutils.py:820 batch_slice  *
    output_slice = graph_fn(*inputs_slice)
**Mask_RCNNmrcnnmodel.py:720 refine_detections_graph  *
    keep = tf.sets.set_intersection(tf.expand_dims(keep, 0),

AttributeError: module 'tensorflow._api.v2.sets' has no attribute 'set_intersection'
 

model.py устроено в соответствии с здесь.

https://github.com/matterport/Mask_RCNN/issues/1070#issuecomment-740430758

Комментарии:

1. Это может быть связано с github.com/tensorflow/tensorflow/issues/43982

Ответ №1:

В соответствии с решением, предоставленным СалахРахими на GitHub в отношении той же проблемы, пользователь смог решить проблему, выполнив следующие изменения.

Основной проблемой здесь была версия тензорного потока. mrcnn не работает с tensorflow.2.0, поэтому мне пришлось удалить эту версию и переустановить версию 1.15. Обратите внимание, что невозможно установить версию 1.15 в Python3.8, поэтому я переключился на Python 3.7, что позволило мне установить tensorflow 1.15. Теперь эта проблема решена, и я смог запустить программу.

Ответ №2:

Мне удалось решить ее, выполнив следующие замены, описанные по этой ссылке: https://github.com/tensorflow/tensorflow/issues/43982.

 "tf.sets.set_intersection(...)
 

Для:

 tf.compat.v1.sets.set_intersection(...)
 

и:

 import tensorflow as tf
 

Для:

 import tensorflow.compat.v1 as tf