Skip to content
Snippets Groups Projects

RoiSet facilitates object detection models

Merged Christopher Randolph Rhodes requested to merge dev_obj_det into staging
1 file
+ 22
8
Compare changes
  • Side-by-side
  • Inline
@@ -341,15 +341,12 @@ class RoiSet(object):
:param df: dataframe containing at minimum bounding box and segmentation mask information
:param params: optional arguments that influence the definition and representation of ROIs
"""
# assert acc_obj_ids.chroma == 1
# self.acc_obj_ids = acc_obj_ids
self.acc_raw = acc_raw
self.accs_derived = []
self.params = params
self._df = df
self.count = len(self._df)
# self.object_class_maps = {} # classification results
def __iter__(self):
"""Expose ROI meta information via the Pandas.DataFrame API"""
@@ -555,7 +552,7 @@ class RoiSet(object):
self.get_patch_masks_acc(expanded=False, pad_to=None)
)
self._df['classify_by_' + name] = pd.Series(dtype='Int64')
se = pd.Series(dtype='Int64', index=self._df.index)
for i, roi in enumerate(self):
oc = np.unique(
@@ -563,7 +560,9 @@ class RoiSet(object):
obmap_patches.iat(i).data
)
)[-1]
self._df.loc[roi.Index, 'classify_by_' + name] = oc
se[roi.Index] = oc
self.set_classification(name, se)
def get_object_class_map(self, name: str) -> InMemoryDataAccessor:
"""
@@ -774,6 +773,23 @@ class RoiSet(object):
dfe['patch'] = dfe.apply(lambda r: _make_patch(r), axis=1)
return dfe
@property
def classification_columns(self):
"""
Return list of columns that describe instance classification results
"""
pr = 'classify_by_'
return [c.split(pr)[1] for c in self._df.columns if c.startswith(pr)]
def set_classification(self, cname: str, se: pd.Series):
"""
Set instance classification result as a column addition on dataframe
:param cname: name of classification result
:param se: series containing class information
"""
col = f'classify_by_{cname}'
self._df[col] = se
def run_exports(self, where: Path, channel, prefix, params: RoiSetExportParams) -> dict:
"""
Export various representations of ROIs, e.g. patches, annotated stacks, and object maps.
@@ -814,9 +830,7 @@ class RoiSet(object):
if k == 'annotated_zstacks':
record[k] = str(Path(k) / self.export_annotated_zstack(subdir, prefix=pr, **kp))
if k == 'object_classes':
pr = 'classify_by_'
cnames = [c.split(pr)[1] for c in self._df.columns if c.startswith(pr)]
for n in cnames:
for n in self.classification_columns:
fp = subdir / n / (pr + '.tif')
write_accessor_data_to_file(fp, self.get_object_class_map(n))
record[f'{k}_{n}'] = str(fp)
Loading