ialdev-vis 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ialdev_vis-0.2.0/PKG-INFO +85 -0
- ialdev_vis-0.2.0/README.md +45 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/pyproject.toml +13 -2
- ialdev_vis-0.2.0/src/iad/vis/dotstyle.py +99 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/insight.py +1 -1
- ialdev_vis-0.2.0/tests/test_dotstyle.py +270 -0
- ialdev_vis-0.1.0/PKG-INFO +0 -39
- ialdev_vis-0.1.0/README.md +0 -5
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/__init__.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/__init__.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/blush_cm.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/glow_cm.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/rain.jscm +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/rain_cm.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/smooth_cm.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/colormaps/wide_cm.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/embedding_in_qt5.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/imageviewer.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/interact.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/ipv.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/jupyter.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/mpl_styles.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/mpl_utils.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/poly_to_mask/README.org +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/poly_to_mask/__init__.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/poly_to_mask/example.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/poly_to_mask/roipoly.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/src/iad/vis/view3d.py +0 -0
- {ialdev_vis-0.1.0 → ialdev_vis-0.2.0}/tests/test_insight.py +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ialdev-vis
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: iad.vis — visualization utilities (image grids, viewers, colormaps, matplotlib helpers)
|
|
5
|
+
Author: ipcoder
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Classifier: Development Status :: 4 - Beta
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Requires-Dist: ialdev-core
|
|
16
|
+
Requires-Dist: ialdev-io
|
|
17
|
+
Requires-Dist: matplotlib>=3.5.0
|
|
18
|
+
Requires-Dist: numpy>=1.20.0
|
|
19
|
+
Requires-Dist: regex>=2021.0.0
|
|
20
|
+
Requires-Dist: open3d>=0.15.0 ; extra == "3d"
|
|
21
|
+
Requires-Dist: ipyvolume>=0.6.0 ; extra == "3d"
|
|
22
|
+
Requires-Dist: ialdev-vis[graphviz, qt, jupyter, 3d, dev] ; extra == "all"
|
|
23
|
+
Requires-Dist: pytest>=7.0.0 ; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest-cov>=3.0.0 ; extra == "dev"
|
|
25
|
+
Requires-Dist: pygraphviz>=1.14,<2 ; extra == "graphviz"
|
|
26
|
+
Requires-Dist: ipywidgets>=7.0.0 ; extra == "jupyter"
|
|
27
|
+
Requires-Dist: IPython>=7.0.0 ; extra == "jupyter"
|
|
28
|
+
Requires-Dist: PyQt5>=5.15.0 ; extra == "qt"
|
|
29
|
+
Requires-Dist: scikit-image>=0.19.0 ; extra == "qt"
|
|
30
|
+
Project-URL: Homepage, https://github.com/ipcoder/ialdev/tree/master/vis
|
|
31
|
+
Project-URL: Issues, https://github.com/ipcoder/ialdev/issues
|
|
32
|
+
Project-URL: Repository, https://github.com/ipcoder/ialdev
|
|
33
|
+
Provides-Extra: 3d
|
|
34
|
+
Provides-Extra: all
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Provides-Extra: graphviz
|
|
37
|
+
Provides-Extra: jupyter
|
|
38
|
+
Provides-Extra: qt
|
|
39
|
+
|
|
40
|
+
# ialdev-vis
|
|
41
|
+
|
|
42
|
+
Visualization utilities for the `iad` toolbox, published as `ialdev-vis` and imported as `iad.vis`.
|
|
43
|
+
|
|
44
|
+
Use this package for quick image grids, histograms, Matplotlib helpers, custom colormaps, interactive annotation widgets, Jupyter logging, and optional Qt/3D visualization tools.
|
|
45
|
+
|
|
46
|
+
## Install
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pip install ialdev-vis
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Optional extras:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pip install "ialdev-vis[qt]"
|
|
56
|
+
pip install "ialdev-vis[jupyter]"
|
|
57
|
+
pip install "ialdev-vis[3d]"
|
|
58
|
+
pip install "ialdev-vis[all]"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Requires Python `>=3.10`.
|
|
62
|
+
|
|
63
|
+
## Highlights
|
|
64
|
+
|
|
65
|
+
- `imgrid` and `imhist` for fast inspection of images and distributions.
|
|
66
|
+
- Matplotlib helpers for figure capture and conversion to arrays/PIL images.
|
|
67
|
+
- Built-in custom colormaps.
|
|
68
|
+
- Polygon-to-mask helpers and interactive ROI tools.
|
|
69
|
+
- Optional Qt image viewer and optional `ipyvolume`/Open3D 3D views.
|
|
70
|
+
|
|
71
|
+
## Examples
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
from iad.vis import imgrid, imhist
|
|
75
|
+
|
|
76
|
+
imgrid(left_image, right_image, titles=["left", "right"], clim="auto")
|
|
77
|
+
imhist(left_image, right_image, titles=["left", "right"])
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
from iad.vis.mpl_utils import fig2img
|
|
82
|
+
|
|
83
|
+
pil_image = fig2img(figure)
|
|
84
|
+
```
|
|
85
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# ialdev-vis
|
|
2
|
+
|
|
3
|
+
Visualization utilities for the `iad` toolbox, published as `ialdev-vis` and imported as `iad.vis`.
|
|
4
|
+
|
|
5
|
+
Use this package for quick image grids, histograms, Matplotlib helpers, custom colormaps, interactive annotation widgets, Jupyter logging, and optional Qt/3D visualization tools.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pip install ialdev-vis
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Optional extras:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install "ialdev-vis[qt]"
|
|
17
|
+
pip install "ialdev-vis[jupyter]"
|
|
18
|
+
pip install "ialdev-vis[3d]"
|
|
19
|
+
pip install "ialdev-vis[all]"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Requires Python `>=3.10`.
|
|
23
|
+
|
|
24
|
+
## Highlights
|
|
25
|
+
|
|
26
|
+
- `imgrid` and `imhist` for fast inspection of images and distributions.
|
|
27
|
+
- Matplotlib helpers for figure capture and conversion to arrays/PIL images.
|
|
28
|
+
- Built-in custom colormaps.
|
|
29
|
+
- Polygon-to-mask helpers and interactive ROI tools.
|
|
30
|
+
- Optional Qt image viewer and optional `ipyvolume`/Open3D 3D views.
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from iad.vis import imgrid, imhist
|
|
36
|
+
|
|
37
|
+
imgrid(left_image, right_image, titles=["left", "right"], clim="auto")
|
|
38
|
+
imhist(left_image, right_image, titles=["left", "right"])
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from iad.vis.mpl_utils import fig2img
|
|
43
|
+
|
|
44
|
+
pil_image = fig2img(figure)
|
|
45
|
+
```
|
|
@@ -4,11 +4,14 @@ build-backend = "flit_core.buildapi"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ialdev-vis"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "iad.vis — visualization utilities (image grids, viewers, colormaps, matplotlib helpers)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
11
11
|
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "ipcoder"}
|
|
14
|
+
]
|
|
12
15
|
classifiers = [
|
|
13
16
|
"Development Status :: 4 - Beta",
|
|
14
17
|
"Intended Audience :: Developers",
|
|
@@ -28,6 +31,9 @@ dependencies = [
|
|
|
28
31
|
]
|
|
29
32
|
|
|
30
33
|
[project.optional-dependencies]
|
|
34
|
+
graphviz = [
|
|
35
|
+
"pygraphviz>=1.14,<2",
|
|
36
|
+
]
|
|
31
37
|
qt = [
|
|
32
38
|
"PyQt5>=5.15.0",
|
|
33
39
|
"scikit-image>=0.19.0",
|
|
@@ -45,9 +51,14 @@ dev = [
|
|
|
45
51
|
"pytest-cov>=3.0.0",
|
|
46
52
|
]
|
|
47
53
|
all = [
|
|
48
|
-
"ialdev-vis[qt,jupyter,3d,dev]",
|
|
54
|
+
"ialdev-vis[graphviz,qt,jupyter,3d,dev]",
|
|
49
55
|
]
|
|
50
56
|
|
|
57
|
+
[project.urls]
|
|
58
|
+
Homepage = "https://github.com/ipcoder/ialdev/tree/master/vis"
|
|
59
|
+
Repository = "https://github.com/ipcoder/ialdev"
|
|
60
|
+
Issues = "https://github.com/ipcoder/ialdev/issues"
|
|
61
|
+
|
|
51
62
|
[tool.flit.module]
|
|
52
63
|
name = "iad.vis"
|
|
53
64
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
from pygraphviz import AGraph
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class IGraph(AGraph):
|
|
7
|
+
"""See ``vis/tests/test_dotstyle.py`` for examples."""
|
|
8
|
+
|
|
9
|
+
def __init__(self, thing=None, filename=None, data=None,
|
|
10
|
+
string=None, handle=None, name='', strict=True,
|
|
11
|
+
directed=False, styles=None, **attr, ):
|
|
12
|
+
"""
|
|
13
|
+
Add styles kw to AGRaph support DotStyle aliases in the dot format.
|
|
14
|
+
"""
|
|
15
|
+
self.styles = {} if styles is None else styles
|
|
16
|
+
|
|
17
|
+
if string:
|
|
18
|
+
for s in self.styles:
|
|
19
|
+
string = re.sub(fr'(\[[^\]]*?){s}\b', fr'\1{styles[s].to_str()}', string)
|
|
20
|
+
# print(string)
|
|
21
|
+
super().__init__(thing=thing, filename=filename, data=data, string=string,
|
|
22
|
+
handle=handle, name=name, strict=strict, directed=directed, **attr)
|
|
23
|
+
|
|
24
|
+
def copy(self):
|
|
25
|
+
from copy import deepcopy
|
|
26
|
+
res = super().copy()
|
|
27
|
+
res.styles = deepcopy(self.styles)
|
|
28
|
+
return res
|
|
29
|
+
|
|
30
|
+
def _repr_svg_(self):
|
|
31
|
+
return str(self.draw(prog='dot', format='svg'))
|
|
32
|
+
|
|
33
|
+
def select_edges(self, chain: str):
|
|
34
|
+
for p in '-,>':
|
|
35
|
+
chain = chain.replace(p, ' ')
|
|
36
|
+
chain = chain.split()
|
|
37
|
+
return [self.get_edge(*e) for e in zip(chain[:-1], chain[1:])]
|
|
38
|
+
|
|
39
|
+
def style_edges(self, edges, attrs):
|
|
40
|
+
if isinstance(edges, str):
|
|
41
|
+
edges = self.select_edges(edges)
|
|
42
|
+
if isinstance(attrs, str):
|
|
43
|
+
attrs = self.styles[attrs]
|
|
44
|
+
for e in edges:
|
|
45
|
+
e.attr.update(attrs)
|
|
46
|
+
|
|
47
|
+
def delete_node_edges(self, node, in_edges=True, out_edges=True):
|
|
48
|
+
""" Delete the node with its edges."""
|
|
49
|
+
if in_edges: self.delete_edges_from(self.in_edges(node))
|
|
50
|
+
if out_edges: self.delete_edges_from(self.out_edges(node))
|
|
51
|
+
self.delete_node(node)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class DotStyle(dict):
|
|
55
|
+
"""
|
|
56
|
+
Provides "styles" arithmetic for dot format.
|
|
57
|
+
See ``vis/tests/test_dotstyle.py`` for examples.
|
|
58
|
+
"""
|
|
59
|
+
def __init__(self, val=None, **kw):
|
|
60
|
+
"""
|
|
61
|
+
Dot styles as dict
|
|
62
|
+
"""
|
|
63
|
+
val = self.from_str(val) if isinstance(val, str) else {} if val is None else val
|
|
64
|
+
assert isinstance(val, dict)
|
|
65
|
+
val.update(kw)
|
|
66
|
+
super().__init__(val)
|
|
67
|
+
|
|
68
|
+
@staticmethod
|
|
69
|
+
def from_str(val: str):
|
|
70
|
+
import re
|
|
71
|
+
|
|
72
|
+
def parse_val(s, sv):
|
|
73
|
+
if sv:
|
|
74
|
+
for op in (int, float, str):
|
|
75
|
+
try:
|
|
76
|
+
s = op(sv)
|
|
77
|
+
except:
|
|
78
|
+
continue # if failed - continue for the next casting attempt
|
|
79
|
+
break # otherwise - exit with success
|
|
80
|
+
return s # last cast option -> str always succeeds
|
|
81
|
+
|
|
82
|
+
found = re.findall(r'(\w+)\s*=\s*(?:"([^"]+)"|([^\s]+))', val)
|
|
83
|
+
return {key: parse_val(s, sv) for key, s, sv in found}
|
|
84
|
+
|
|
85
|
+
def to_str(self):
|
|
86
|
+
return ' '.join([key + '=' + (f'"{v}"' if isinstance(v, str) and ' ' in v
|
|
87
|
+
else f'{v}') for key, v in self.items()])
|
|
88
|
+
|
|
89
|
+
def __iadd__(self, other):
|
|
90
|
+
self.update(other)
|
|
91
|
+
return self
|
|
92
|
+
|
|
93
|
+
def __add__(self, other):
|
|
94
|
+
res = self.__class__(self)
|
|
95
|
+
res.update(other)
|
|
96
|
+
return res
|
|
97
|
+
|
|
98
|
+
def __radd__(self, other):
|
|
99
|
+
return self.__class__(other) + self
|
|
@@ -203,7 +203,7 @@ def imhist(*imgs, titles=None, sharex=True, sharey=True, ax=None, grid=None,
|
|
|
203
203
|
|
|
204
204
|
if measure:
|
|
205
205
|
measure = as_list(measure)
|
|
206
|
-
from iad.core.nptools import stats
|
|
206
|
+
from iad.core.data.nptools import stats
|
|
207
207
|
|
|
208
208
|
for i, (im, ax) in enumerate(zip(imgs, axs)):
|
|
209
209
|
plt.sca(ax)
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import shutil
|
|
2
|
+
import tempfile
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
pytest.importorskip("pygraphviz")
|
|
7
|
+
|
|
8
|
+
from iad.vis.dotstyle import *
|
|
9
|
+
|
|
10
|
+
dot_available = pytest.mark.skipif(
|
|
11
|
+
shutil.which("dot") is None, reason="graphviz 'dot' binary not in PATH"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dot_available
|
|
16
|
+
def test_feud():
|
|
17
|
+
|
|
18
|
+
# Prepare styles
|
|
19
|
+
def styles():
|
|
20
|
+
resource = DotStyle(shape='rectangle', width=.9, height=.3, fixedsize='true',
|
|
21
|
+
fontname="Verdana", fontsize=10, penwidth=.5,
|
|
22
|
+
color=".14 .2 .4", style='filled', fillcolor=".14 0.2 1")
|
|
23
|
+
produce = DotStyle(shape='oval', penwidth=0.5, fontsize=12)
|
|
24
|
+
|
|
25
|
+
norm_edge = DotStyle(arrowsize=0.7, penwidth=0.5, color='gray')
|
|
26
|
+
bold_edge = DotStyle(arrowsize=0.6, penwidth=1.5, color='black')
|
|
27
|
+
war_edge = bold_edge + {'color': "0 0.5 1"}
|
|
28
|
+
lord_edge = bold_edge + {'color': 'blue'}
|
|
29
|
+
|
|
30
|
+
return locals()
|
|
31
|
+
|
|
32
|
+
dotsrc = """
|
|
33
|
+
digraph "Feaudal Processes" {
|
|
34
|
+
rankdir=LR
|
|
35
|
+
ranksep=0.4
|
|
36
|
+
newrank=true
|
|
37
|
+
size = "5.5!"
|
|
38
|
+
|
|
39
|
+
graph [label="Complete" labelloc=t]
|
|
40
|
+
|
|
41
|
+
edge[norm_edge]
|
|
42
|
+
node[produce]
|
|
43
|
+
|
|
44
|
+
{node[resource]
|
|
45
|
+
land peasants goods health protection labor
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
subgraph cluster_c1 { label = "" color=white
|
|
49
|
+
Reproduce -> peasants;
|
|
50
|
+
peasants -> Labor;
|
|
51
|
+
{rank = min peasants Labor}
|
|
52
|
+
{rank=same Reproduce }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
goods -> Labor -> {land, labor} -> Work -> goods;
|
|
56
|
+
|
|
57
|
+
goods -> Lord -> {protection, land};
|
|
58
|
+
|
|
59
|
+
{goods, labor} -> Health -> health;
|
|
60
|
+
{peasants, goods, labor, health} -> Reproduce;
|
|
61
|
+
|
|
62
|
+
protection -> War -> {health, goods, land, peasants};
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
{rank=min peasants Labor Lord }
|
|
66
|
+
{rank=same land protection labor Reproduce}
|
|
67
|
+
{rank=same War Work Health }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
G = IGraph(string=dotsrc, styles=styles())
|
|
73
|
+
with tempfile.SpooledTemporaryFile() as fp:
|
|
74
|
+
G.draw(fp, prog='dot', format='png')
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_alexnet():
|
|
78
|
+
net_styles = dict(
|
|
79
|
+
conv=DotStyle(shape='invtrapezium', fillcolor='lightblue', style='filled'),
|
|
80
|
+
relu=DotStyle(shape='Msquare', fillcolor='darkolivegreen2', style='filled'),
|
|
81
|
+
conv_relu=DotStyle(color='darkolivegreen2'),
|
|
82
|
+
pool=DotStyle(shape='invtriangle', fillcolor='orange', style='filled'),
|
|
83
|
+
norm=DotStyle(shape='doublecircle', fillcolor='grey', style='filled'),
|
|
84
|
+
full=DotStyle(shape='circle', fillcolor='salmon', style='filled'),
|
|
85
|
+
drop=DotStyle(shape='tripleoctagon', fillcolor='plum2', style='filled'),
|
|
86
|
+
|
|
87
|
+
to_conv=DotStyle(color='lightblue', style='bold'),
|
|
88
|
+
to_norm=DotStyle(color='grey', style='bold'),
|
|
89
|
+
to_pool=DotStyle(color='orange', style='bold'),
|
|
90
|
+
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
dotsrc_net = """
|
|
94
|
+
digraph Alexnet {
|
|
95
|
+
// GRAPH OPTIONS
|
|
96
|
+
rankdir=TB; // From Top to Bottom
|
|
97
|
+
size = "15!"
|
|
98
|
+
|
|
99
|
+
labelloc="t"; // Tittle possition: top
|
|
100
|
+
label="Alexnet";
|
|
101
|
+
|
|
102
|
+
// ======================= NODES ====================================
|
|
103
|
+
data [shape=box3d, color=black];
|
|
104
|
+
|
|
105
|
+
label [shape=tab, color=black];
|
|
106
|
+
|
|
107
|
+
loss [shape=component, color=black];
|
|
108
|
+
|
|
109
|
+
node [conv];
|
|
110
|
+
conv1;
|
|
111
|
+
conv3;
|
|
112
|
+
|
|
113
|
+
node [relu]; // Rectified Linear Unit nodes
|
|
114
|
+
relu1;
|
|
115
|
+
relu3;
|
|
116
|
+
relu6;
|
|
117
|
+
relu7;
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
// Splitted layer 2
|
|
121
|
+
// ================
|
|
122
|
+
//
|
|
123
|
+
// Layers with separated convolutions need to be in subgraphs
|
|
124
|
+
// This is because we want arrows from individual nodes but
|
|
125
|
+
// we want to consider all of them as a unique layer.
|
|
126
|
+
//
|
|
127
|
+
|
|
128
|
+
subgraph layer2 {
|
|
129
|
+
node [conv]; // Convolution nodes
|
|
130
|
+
conv2_1;
|
|
131
|
+
conv2_2;
|
|
132
|
+
node [relu]; // Rectified Linear Unit nodes
|
|
133
|
+
relu2_1;
|
|
134
|
+
relu2_2;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Splitted layer 4
|
|
138
|
+
// ================
|
|
139
|
+
|
|
140
|
+
subgraph layer4 {
|
|
141
|
+
node [conv]; // Convolution nodes
|
|
142
|
+
conv3
|
|
143
|
+
relu3
|
|
144
|
+
conv4_1;
|
|
145
|
+
conv4_2;
|
|
146
|
+
node [relu]; // Rectified Linear Unit nodes
|
|
147
|
+
relu4_1;
|
|
148
|
+
relu4_2;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Splitted layer 5
|
|
152
|
+
// ================
|
|
153
|
+
|
|
154
|
+
subgraph layer5{
|
|
155
|
+
node [conv]; // Convolution nodes
|
|
156
|
+
conv5_1;
|
|
157
|
+
conv5_2;
|
|
158
|
+
|
|
159
|
+
node [relu];
|
|
160
|
+
relu5_1;
|
|
161
|
+
relu5_2;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
node [pool]; // Pooling nodes
|
|
166
|
+
pool1;
|
|
167
|
+
pool2;
|
|
168
|
+
pool5;
|
|
169
|
+
|
|
170
|
+
node [norm]; // Normalization nodes
|
|
171
|
+
norm1;
|
|
172
|
+
norm2;
|
|
173
|
+
|
|
174
|
+
node [full];
|
|
175
|
+
fc6;
|
|
176
|
+
fc7;
|
|
177
|
+
fc8;
|
|
178
|
+
|
|
179
|
+
node [drop];
|
|
180
|
+
drop6;
|
|
181
|
+
drop7;
|
|
182
|
+
|
|
183
|
+
// =========================================== LAYESRS =================================
|
|
184
|
+
|
|
185
|
+
// LAYER 1
|
|
186
|
+
// -------------------------
|
|
187
|
+
|
|
188
|
+
data -> conv1 [to_conv, label="out = 96, kernel = 11, stride = 4"];
|
|
189
|
+
|
|
190
|
+
edge [conv_relu];
|
|
191
|
+
conv1 -> relu1;
|
|
192
|
+
relu1 -> conv1;
|
|
193
|
+
|
|
194
|
+
conv1 -> norm1 [to_norm, label="local_size = 5, alpha = 0.0001, beta = 0.75"];
|
|
195
|
+
norm1 -> pool1 [to_pool, label="pool = MAX, kernel = 3, stride = 2"];
|
|
196
|
+
|
|
197
|
+
pool1 -> conv2_1 [to_conv, label="out = 256, kernel = 5, pad = 2"];
|
|
198
|
+
pool1 -> conv2_2 [to_conv];
|
|
199
|
+
|
|
200
|
+
// LAYER 2
|
|
201
|
+
// --------------------------
|
|
202
|
+
edge [conv_relu];
|
|
203
|
+
conv2_1 -> relu2_1;
|
|
204
|
+
conv2_2 -> relu2_2;
|
|
205
|
+
relu2_1 -> conv2_1;
|
|
206
|
+
relu2_2 -> conv2_2;
|
|
207
|
+
|
|
208
|
+
conv2_1 -> norm2 [to_norm, label="local_size = 5, alpha = 0.0001, beta = 0.75"];
|
|
209
|
+
conv2_2 -> norm2 [to_norm];
|
|
210
|
+
norm2 -> pool2 [to_pool, label="pool = MAX, kernel = 3, stride = 2"];
|
|
211
|
+
pool2 -> conv3 [to_conv, label="out = 384, kernel = 3, pad = 1"];
|
|
212
|
+
|
|
213
|
+
// LAYER 3
|
|
214
|
+
// -------------------------
|
|
215
|
+
conv3 -> relu3 [conv_relu];
|
|
216
|
+
relu3 -> conv3 [conv_relu];
|
|
217
|
+
conv3 -> conv4_1 [to_conv, label="out = 384, kernel = 3, pad = 1"];
|
|
218
|
+
conv3 -> conv4_2 [to_conv];
|
|
219
|
+
|
|
220
|
+
// LAYER 4
|
|
221
|
+
// ------------------
|
|
222
|
+
edge [conv_relu];
|
|
223
|
+
conv4_1 -> relu4_1;
|
|
224
|
+
relu4_1 -> conv4_1;
|
|
225
|
+
conv4_2 -> relu4_2;
|
|
226
|
+
relu4_2 -> conv4_2;
|
|
227
|
+
|
|
228
|
+
conv4_1 -> conv5_1 [to_conv, label="out = 256, kernel = 3, pad = 1"];
|
|
229
|
+
conv4_2 -> conv5_2 [to_conv];
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
// LAYER 5
|
|
233
|
+
// ----------------------
|
|
234
|
+
edge [conv_relu];
|
|
235
|
+
conv5_1 -> relu5_1;
|
|
236
|
+
relu5_1 -> conv5_1;
|
|
237
|
+
conv5_2 -> relu5_2;
|
|
238
|
+
relu5_2 -> conv5_2;
|
|
239
|
+
|
|
240
|
+
conv5_1 -> pool5 [to_pool, label="pool = MAX, kernel = 3, stride = 2"];
|
|
241
|
+
conv5_2 -> pool5 [to_pool];
|
|
242
|
+
|
|
243
|
+
pool5 -> fc6 [color=salmon, style=bold, label="out = 4096"];
|
|
244
|
+
fc6 -> relu6 [conv_relu];
|
|
245
|
+
relu6 -> fc6 [conv_relu];
|
|
246
|
+
fc6 -> drop6 [color=plum2, style=bold, label="dropout_ratio = 0.5"];
|
|
247
|
+
drop6 -> fc6 [color=plum2];
|
|
248
|
+
|
|
249
|
+
// LAYER 6
|
|
250
|
+
// -----------------------
|
|
251
|
+
fc6 -> fc7 [color=salmon, style=bold, label="out = 4096"];
|
|
252
|
+
|
|
253
|
+
// LAYER 7
|
|
254
|
+
// ----------------------
|
|
255
|
+
fc7 -> relu7 [conv_relu];
|
|
256
|
+
relu7 -> fc7 [conv_relu];
|
|
257
|
+
fc7 -> drop7 [color=plum2, style=bold, label="dropout_ratio = 0.5"];
|
|
258
|
+
drop7 -> fc7 [color=plum2];
|
|
259
|
+
fc7 -> fc8 [color=salmon, style=bold, label="out = 1000"];
|
|
260
|
+
|
|
261
|
+
// LAYER 8
|
|
262
|
+
// ---------------------
|
|
263
|
+
edge [color=black]
|
|
264
|
+
fc8 -> loss;
|
|
265
|
+
label -> loss;
|
|
266
|
+
}
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
G = IGraph(string=dotsrc_net, styles=net_styles)
|
|
270
|
+
#G.draw('alex_net.svg', prog='dot')
|
ialdev_vis-0.1.0/PKG-INFO
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: ialdev-vis
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: iad.vis — visualization utilities (image grids, viewers, colormaps, matplotlib helpers)
|
|
5
|
-
Requires-Python: >=3.10
|
|
6
|
-
Description-Content-Type: text/markdown
|
|
7
|
-
Classifier: Development Status :: 4 - Beta
|
|
8
|
-
Classifier: Intended Audience :: Developers
|
|
9
|
-
Classifier: Intended Audience :: Science/Research
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Requires-Dist: ialdev-core
|
|
15
|
-
Requires-Dist: ialdev-io
|
|
16
|
-
Requires-Dist: matplotlib>=3.5.0
|
|
17
|
-
Requires-Dist: numpy>=1.20.0
|
|
18
|
-
Requires-Dist: regex>=2021.0.0
|
|
19
|
-
Requires-Dist: open3d>=0.15.0 ; extra == "3d"
|
|
20
|
-
Requires-Dist: ipyvolume>=0.6.0 ; extra == "3d"
|
|
21
|
-
Requires-Dist: ialdev-vis[qt, jupyter, 3d, dev] ; extra == "all"
|
|
22
|
-
Requires-Dist: pytest>=7.0.0 ; extra == "dev"
|
|
23
|
-
Requires-Dist: pytest-cov>=3.0.0 ; extra == "dev"
|
|
24
|
-
Requires-Dist: ipywidgets>=7.0.0 ; extra == "jupyter"
|
|
25
|
-
Requires-Dist: IPython>=7.0.0 ; extra == "jupyter"
|
|
26
|
-
Requires-Dist: PyQt5>=5.15.0 ; extra == "qt"
|
|
27
|
-
Requires-Dist: scikit-image>=0.19.0 ; extra == "qt"
|
|
28
|
-
Provides-Extra: 3d
|
|
29
|
-
Provides-Extra: all
|
|
30
|
-
Provides-Extra: dev
|
|
31
|
-
Provides-Extra: jupyter
|
|
32
|
-
Provides-Extra: qt
|
|
33
|
-
|
|
34
|
-
# ialdev-vis
|
|
35
|
-
|
|
36
|
-
`iad.vis` — visualization utilities (image grids, viewers, colormaps, matplotlib helpers).
|
|
37
|
-
|
|
38
|
-
Install: `pip install ialdev-vis`
|
|
39
|
-
|
ialdev_vis-0.1.0/README.md
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|