Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
model_server
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Christopher Randolph Rhodes
model_server
Commits
d436bb0d
Commit
d436bb0d
authored
1 year ago
by
Christopher Randolph Rhodes
Browse files
Options
Downloads
Patches
Plain Diff
Moved expanded and relative bounding box calcs in to DF creation
parent
ebc8a4bd
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
model_server/extensions/chaeo/products.py
+3
-3
3 additions, 3 deletions
model_server/extensions/chaeo/products.py
model_server/extensions/chaeo/zmask.py
+77
-10
77 additions, 10 deletions
model_server/extensions/chaeo/zmask.py
with
80 additions
and
13 deletions
model_server/extensions/chaeo/products.py
+
3
−
3
View file @
d436bb0d
...
...
@@ -63,7 +63,7 @@ def get_patch_masks(roiset, pad_to: int = 256) -> MonoPatchStack:
for
mi
in
roiset
.
zmask_meta
:
sl
=
mi
[
'
slice
'
]
rbb
=
mi
[
'
relative_bounding_box
'
]
rbb
=
mi
[
'
relative_bounding_box
'
]
# TODO: call DF rbb fields
x0
=
rbb
[
'
x0
'
]
y0
=
rbb
[
'
y0
'
]
x1
=
rbb
[
'
x1
'
]
...
...
@@ -111,7 +111,7 @@ def get_patches_from_zmask_meta(
for
mi
in
zmask_meta
:
sl
=
mi
[
'
slice
'
]
rbb
=
mi
[
'
relative_bounding_box
'
]
rbb
=
mi
[
'
relative_bounding_box
'
]
# TODO: call rel_ fields in DF
idx
=
mi
[
'
df_index
'
]
x0
=
rbb
[
'
x0
'
]
...
...
@@ -267,7 +267,7 @@ def export_3d_patches_with_focus_metrics(
for
mi
in
zmask_meta
:
obj
=
mi
[
'
info
'
]
sl
=
mi
[
'
slice
'
]
rbb
=
mi
[
'
relative_bounding_box
'
]
rbb
=
mi
[
'
relative_bounding_box
'
]
# TODO: use rel_ fields in DF
idx
=
mi
[
'
df_index
'
]
patch
=
stack
.
data
[
sl
]
...
...
This diff is collapsed.
Click to expand it.
model_server/extensions/chaeo/zmask.py
+
77
−
10
View file @
d436bb0d
...
...
@@ -67,25 +67,66 @@ class RoiSet(object):
self
.
acc_obj_ids
=
acc_obj_ids
self
.
acc_raw
=
acc_raw
self
.
_df
=
self
.
filter_df
(
self
.
make_df
(
self
.
acc_raw
,
self
.
acc_obj_ids
),
self
.
make_df
(
self
.
acc_raw
,
self
.
acc_obj_ids
,
expand_box_by
=
params
.
expand_box_by
),
params
.
filters
,
)
# self._df = self.make_slices(
# self._df,
# expand_box_by=params.expand_box_by,
# shape=acc_raw.shape
# )
# remaining zmask_meta write ops
self
.
zmask_meta
,
_
,
self
.
interm
=
build_zmask_from_object_mask
(
acc_obj_ids
,
acc_raw
,
self
.
get_df
(),
params
=
params
,
)
# self.zmask_meta, _, self.interm = build_zmask_from_object_mask(
# acc_obj_ids,
# acc_raw,
# self.get_df(),
# params=params,
# )
# temporarily build zmask meta here
meta
=
[]
for
ob
in
self
.
get_df
().
itertuples
(
name
=
'
LabeledObject
'
):
sl
=
np
.
s_
[
ob
.
ebb_y0
:
ob
.
ebb_y1
,
ob
.
ebb_x0
:
ob
.
ebb_x1
,
:,
ob
.
ebb_z0
:
ob
.
ebb_z1
+
1
]
# TODO: on-the-fly in RoiSet, given DF
# compute contours
obmask
=
(
acc_obj_ids
==
ob
.
label
)
# TODO: on-the-fly
contour
=
find_contours
(
obmask
)
# TODO: on-the-fly
mask
=
obmask
[
ob
.
y0
:
ob
.
y1
,
ob
.
x0
:
ob
.
x1
]
rbb
=
{
# TODO: just put in the DF
'
y0
'
:
ob
.
rel_y0
,
'
y1
'
:
ob
.
rel_y1
,
'
x0
'
:
ob
.
rel_x0
,
'
x1
'
:
ob
.
rel_x1
,
}
meta
.
append
({
'
df_index
'
:
ob
.
Index
,
'
info
'
:
ob
,
'
slice
'
:
sl
,
'
relative_bounding_box
'
:
rbb
,
# TODO: put in DF
'
contour
'
:
contour
,
# TODO: delegate to getter
'
mask
'
:
mask
# TODO: delegate to getter
})
self
.
zmask_meta
=
meta
# return intermediate image arrays # TODO: make on-the-fly
self
.
interm
=
{
'
label_map
'
:
acc_obj_ids
,
'
argmax
'
:
acc_raw
.
data
.
argmax
(
axis
=
3
,
keepdims
=
True
)[:,
:,
0
,
0
].
astype
(
'
uint16
'
),
}
self
.
count
=
len
(
self
.
zmask_meta
)
self
.
object_id_labels
=
self
.
interm
[
'
label_map
'
]
self
.
object_class_map
=
None
@staticmethod
def
make_df
(
acc_raw
,
acc_obj_ids
):
def
make_df
(
acc_raw
,
acc_obj_ids
,
expand_box_by
):
# build dataframe of objects, assign z index to each object
argmax
=
acc_raw
.
data
.
argmax
(
axis
=
3
,
keepdims
=
True
)[:,
:,
0
,
0
].
astype
(
'
uint16
'
)
df
=
(
...
...
@@ -101,8 +142,34 @@ class RoiSet(object):
)
)
df
[
'
zi
'
]
=
df
[
'
intensity_mean
'
].
round
().
astype
(
'
int
'
)
# compute expanded bounding boxes
h
,
w
,
c
,
nz
=
acc_raw
.
shape
ebxy
,
ebz
=
expand_box_by
df
[
'
ebb_y0
'
]
=
(
df
.
y0
-
ebxy
).
apply
(
lambda
x
:
max
(
x
,
0
))
df
[
'
ebb_y1
'
]
=
(
df
.
y1
+
ebxy
).
apply
(
lambda
x
:
min
(
x
,
h
))
df
[
'
ebb_x0
'
]
=
(
df
.
x0
-
ebxy
).
apply
(
lambda
x
:
max
(
x
,
0
))
df
[
'
ebb_x1
'
]
=
(
df
.
x1
+
ebxy
).
apply
(
lambda
x
:
min
(
x
,
w
))
df
[
'
ebb_z0
'
]
=
(
df
.
zi
-
ebz
).
apply
(
lambda
x
:
max
(
x
,
0
))
df
[
'
ebb_z1
'
]
=
(
df
.
zi
+
ebz
).
apply
(
lambda
x
:
min
(
x
,
nz
))
# compute relative bounding boxes
df
[
'
rel_y0
'
]
=
df
.
y0
-
df
.
ebb_y0
df
[
'
rel_y1
'
]
=
df
.
y1
-
df
.
ebb_y1
df
[
'
rel_x0
'
]
=
df
.
x0
-
df
.
ebb_x0
df
[
'
rel_x1
'
]
=
df
.
x1
-
df
.
ebb_x1
assert
np
.
all
(
df
[
'
rel_x1
'
]
<=
(
df
[
'
ebb_x1
'
]
-
df
[
'
ebb_x0
'
]))
assert
np
.
all
(
df
[
'
rel_y1
'
]
<=
(
df
[
'
ebb_x1
'
]
-
df
[
'
ebb_x0
'
]))
return
df
# def get_slices(self): # TODO: actually map to DF index as new column
# sl = []
# for ob in self.get_df().itertuples(name='LabeledObject'):
# sl.append(np.s_[ob.ebb_y0: ob.ebb_y1, ob.ebb_x0: ob.ebb_x1, :, ob.ebb_z0: ob.ebb_z1 + 1])
# return sl
@staticmethod
def
filter_df
(
df
:
pd
.
DataFrame
,
filters
:
RoiFilter
=
None
)
->
pd
.
DataFrame
:
query_str
=
'
label > 0
'
# always true
...
...
@@ -116,7 +183,7 @@ class RoiSet(object):
# df.loc[df.query(query_str).index, 'keeper'] = True
return
df
.
loc
[
df
.
query
(
query_str
).
index
,
:]
def
get_df
(
self
)
->
pd
.
DataFrame
:
def
get_df
(
self
)
->
pd
.
DataFrame
:
# TODO: exclude columns that refer to objects
return
self
.
_df
def
add_df_col
(
self
,
name
,
se
:
pd
.
Series
)
->
None
:
...
...
@@ -344,7 +411,7 @@ def build_zmask_from_object_mask(
meta
.
append
({
'
df_index
'
:
ob
.
Index
,
'
info
'
:
ob
,
'
slice
'
:
sl
,
#
'slice': sl,
'
relative_bounding_box
'
:
rbb
,
# TODO: put in DF
'
contour
'
:
contour
,
# TODO: delegate to getter
'
mask
'
:
mask
# TODO: delegate to getter
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment