AnsweredAssumed Answered

'numpy.ndarray' object has no attribute 'unsqueeze' error when using MaskRCNN in arcgis.learn

Question asked by cflynn_Dewberry on Jul 10, 2020
Latest reply on Jul 24, 2020 by ckiefer-esristaff

I am trying to setup a deep learning framework with a MaskRCNN model. I am using a LiDAR intensity raster image and a feature class of water body polygons to create the training data. When I run the arcgis.learn.prepare_data() tool, I get the following error message:

---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-22-c485ff65baef> in <module>      2 # When running export training data for deep learning, make sure the meta data format is appropriate for the model      3 data_path = r'Q:/Data/CFlynn/DL_Breaklines/MaskRCNN/TrainingData4'----> 4 data = prepare_data(data_path, batch_size=2, imagery_type='ms')~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\arcgis\learn\_data.py in prepare_data(path, class_mapping, chip_size, val_split_pct, batch_size, transforms, collate_fn, seed, dataset_type, resize_to, **kwargs)    630             kwargs['do_normalize'] = False    631             if transforms ==  None:--> 632                 data = (src.transform(size=chip_size, tfm_y=True)    633                     .databunch(**databunch_kwargs))    634             else:~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\fastai\data_block.py in transform(self, tfms, **kwargs)    500         if not tfms: tfms=(None,None)    501         assert is_listy(tfms) and len(tfms) == 2, "Please pass a list of two lists of transforms (train and valid)."--> 502         self.train.transform(tfms[0], **kwargs)    503         self.valid.transform(tfms[1], **kwargs)    504         if self.test: self.test.transform(tfms[1], **kwargs)~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\fastai\data_block.py in transform(self, tfms, tfm_y, **kwargs)    718     def transform(self, tfms:TfmList, tfm_y:bool=None, **kwargs):    719         "Set the `tfms` and `tfm_y` value to be applied to the inputs and targets."--> 720         _check_kwargs(self.x, tfms, **kwargs)    721         if tfm_y is None: tfm_y = self.tfm_y    722         tfms_y = None if tfms is None else list(filter(lambda t: getattr(t, 'use_on_y', True), listify(tfms)))~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\fastai\data_block.py in _check_kwargs(ds, tfms, **kwargs)    588     if (tfms is None or len(tfms) == 0) and len(kwargs) == 0: return    589     if len(ds.items) >= 1:--> 590         x = ds[0]    591         try: x.apply_tfms(tfms, **kwargs)    592         except Exception as e:~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\fastai\data_block.py in __getitem__(self, idxs)    116         "returns a single item based if `idxs` is an integer or a new `ItemList` object if `idxs` is a range."    117         idxs = try_int(idxs)--> 118         if isinstance(idxs, Integral): return self.get(idxs)    119         else: return self.new(self.items[idxs], inner_df=index_row(self.inner_df, idxs))    120  ~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\fastai\vision\data.py in get(self, i)    269     def get(self, i):    270         fn = super().get(i)--> 271         res = self.open(fn)    272         self.sizes[i] = res.size    273         return res ~\AppData\Local\ESRI\conda\envs\pyenvdeep\lib\site-packages\arcgis\learn\models\_maskrcnn_utils.py in open(self, fn)    139         x = gdal.Open(path).ReadAsArray()    140         if len(x.shape)==2:--> 141             x = x.unsqueeze(0)    142         x = torch.tensor(x.astype(np.float32))    143         x = ArcGISMSImage(x)AttributeError: 'numpy.ndarray' object has no attribute 'unsqueeze'

I'd appreciate any comments or suggestions. 

Outcomes