├── .gitignore
├── .idea
├── .gitignore
├── RefineNet.iml
├── inspectionProfiles
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── README.md
├── data
├── data.py
├── train.face
├── train.nyu
├── train.parking
├── val.face
├── val.nyu
└── val.parking
├── image
├── face_seg.jpg
└── face_seg3.jpg
├── models
├── __init__.py
├── mobilenet.py
└── resnet.py
├── src
├── config.py
├── datasets.py
├── demo.py
├── miou_utils.c
├── miou_utils.pyx
├── onnx_export.py
├── setup.py
├── train.py
└── util.py
└── utils
├── __init__.py
├── cmap.npy
├── cs_cmap.npy
├── helpers.py
└── layer_factory.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /workspace.xml
3 |
--------------------------------------------------------------------------------
/.idea/RefineNet.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RefineNet
2 | Pytorch refinenet for segmentation and pytorch -> onnx -> tensorrt.
3 |
4 | The goal of this project is to make a real-time light-weight semantic segmentation.
5 |
6 | | Model | FPS |
7 | | ------- | ---- |
8 | | Pytorch | 5 |
9 | | FP32 | 27 |
10 | | FP16 | 33 |
11 |
12 | This repository is heavily relyed on [light-weight-refinenet](https://github.com/DrSleep/light-weight-refinenet).
13 |
14 | I make some changes for convenient to convert it to TensorRT engine.
15 |
16 | ## dataset
17 |
18 | Models is trained on [helen](http://www.ifp.illinois.edu/~vuongle2/helen/) dataset, the processed 11 class segmentation dataset is access to : https://pan.baidu.com/s/1blYDavW-TUIqjHH0ULdYnA code: 13dk
19 |
20 | ## Train
21 |
22 | Build the helper code for calculating mean IoU written in Cython. For that, execute the following `python src/setup.py build_ext --build-lib=./src/`.
23 |
24 | train with resnet50 backbone:
25 |
26 | ```
27 | python src/train.py --enc 50
28 | ```
29 |
30 | ## Demo
31 |
32 | see src/demo.py
33 |
34 | 
35 |
36 | ## Onnx
37 |
38 | see src/onnx_export.py
39 |
40 | ## TensorRT
41 |
42 | see https://github.com/midasklr/RefineNet_TensorRT
43 |
44 |
--------------------------------------------------------------------------------
/data/data.py:
--------------------------------------------------------------------------------
1 | import os
2 | for i in range(1000,2355):
3 | with open("train.parking","a+") as f:
4 | f.writelines("train_images/{}.png".format(i)+"\t"+"train_labels/{}.png".format(i)+"\n")
5 |
6 |
--------------------------------------------------------------------------------
/data/train.nyu:
--------------------------------------------------------------------------------
1 | train_images/000003.png train_labels/000003.png
2 | train_images/000004.png train_labels/000004.png
3 | train_images/000005.png train_labels/000005.png
4 | train_images/000006.png train_labels/000006.png
5 | train_images/000007.png train_labels/000007.png
6 | train_images/000008.png train_labels/000008.png
7 | train_images/000010.png train_labels/000010.png
8 | train_images/000011.png train_labels/000011.png
9 | train_images/000012.png train_labels/000012.png
10 | train_images/000013.png train_labels/000013.png
11 | train_images/000019.png train_labels/000019.png
12 | train_images/000020.png train_labels/000020.png
13 | train_images/000022.png train_labels/000022.png
14 | train_images/000023.png train_labels/000023.png
15 | train_images/000024.png train_labels/000024.png
16 | train_images/000025.png train_labels/000025.png
17 | train_images/000026.png train_labels/000026.png
18 | train_images/000027.png train_labels/000027.png
19 | train_images/000044.png train_labels/000044.png
20 | train_images/000045.png train_labels/000045.png
21 | train_images/000048.png train_labels/000048.png
22 | train_images/000049.png train_labels/000049.png
23 | train_images/000050.png train_labels/000050.png
24 | train_images/000051.png train_labels/000051.png
25 | train_images/000052.png train_labels/000052.png
26 | train_images/000053.png train_labels/000053.png
27 | train_images/000054.png train_labels/000054.png
28 | train_images/000055.png train_labels/000055.png
29 | train_images/000058.png train_labels/000058.png
30 | train_images/000064.png train_labels/000064.png
31 | train_images/000065.png train_labels/000065.png
32 | train_images/000066.png train_labels/000066.png
33 | train_images/000067.png train_labels/000067.png
34 | train_images/000068.png train_labels/000068.png
35 | train_images/000069.png train_labels/000069.png
36 | train_images/000070.png train_labels/000070.png
37 | train_images/000071.png train_labels/000071.png
38 | train_images/000072.png train_labels/000072.png
39 | train_images/000073.png train_labels/000073.png
40 | train_images/000074.png train_labels/000074.png
41 | train_images/000075.png train_labels/000075.png
42 | train_images/000080.png train_labels/000080.png
43 | train_images/000081.png train_labels/000081.png
44 | train_images/000082.png train_labels/000082.png
45 | train_images/000083.png train_labels/000083.png
46 | train_images/000092.png train_labels/000092.png
47 | train_images/000093.png train_labels/000093.png
48 | train_images/000094.png train_labels/000094.png
49 | train_images/000095.png train_labels/000095.png
50 | train_images/000096.png train_labels/000096.png
51 | train_images/000097.png train_labels/000097.png
52 | train_images/000098.png train_labels/000098.png
53 | train_images/000099.png train_labels/000099.png
54 | train_images/000100.png train_labels/000100.png
55 | train_images/000101.png train_labels/000101.png
56 | train_images/000102.png train_labels/000102.png
57 | train_images/000103.png train_labels/000103.png
58 | train_images/000104.png train_labels/000104.png
59 | train_images/000105.png train_labels/000105.png
60 | train_images/000106.png train_labels/000106.png
61 | train_images/000107.png train_labels/000107.png
62 | train_images/000108.png train_labels/000108.png
63 | train_images/000109.png train_labels/000109.png
64 | train_images/000110.png train_labels/000110.png
65 | train_images/000111.png train_labels/000111.png
66 | train_images/000112.png train_labels/000112.png
67 | train_images/000113.png train_labels/000113.png
68 | train_images/000114.png train_labels/000114.png
69 | train_images/000115.png train_labels/000115.png
70 | train_images/000116.png train_labels/000116.png
71 | train_images/000120.png train_labels/000120.png
72 | train_images/000121.png train_labels/000121.png
73 | train_images/000122.png train_labels/000122.png
74 | train_images/000123.png train_labels/000123.png
75 | train_images/000124.png train_labels/000124.png
76 | train_images/000130.png train_labels/000130.png
77 | train_images/000135.png train_labels/000135.png
78 | train_images/000136.png train_labels/000136.png
79 | train_images/000138.png train_labels/000138.png
80 | train_images/000139.png train_labels/000139.png
81 | train_images/000140.png train_labels/000140.png
82 | train_images/000141.png train_labels/000141.png
83 | train_images/000142.png train_labels/000142.png
84 | train_images/000143.png train_labels/000143.png
85 | train_images/000144.png train_labels/000144.png
86 | train_images/000145.png train_labels/000145.png
87 | train_images/000146.png train_labels/000146.png
88 | train_images/000147.png train_labels/000147.png
89 | train_images/000148.png train_labels/000148.png
90 | train_images/000149.png train_labels/000149.png
91 | train_images/000150.png train_labels/000150.png
92 | train_images/000151.png train_labels/000151.png
93 | train_images/000152.png train_labels/000152.png
94 | train_images/000156.png train_labels/000156.png
95 | train_images/000157.png train_labels/000157.png
96 | train_images/000158.png train_labels/000158.png
97 | train_images/000159.png train_labels/000159.png
98 | train_images/000160.png train_labels/000160.png
99 | train_images/000161.png train_labels/000161.png
100 | train_images/000162.png train_labels/000162.png
101 | train_images/000163.png train_labels/000163.png
102 | train_images/000164.png train_labels/000164.png
103 | train_images/000165.png train_labels/000165.png
104 | train_images/000166.png train_labels/000166.png
105 | train_images/000170.png train_labels/000170.png
106 | train_images/000177.png train_labels/000177.png
107 | train_images/000178.png train_labels/000178.png
108 | train_images/000179.png train_labels/000179.png
109 | train_images/000203.png train_labels/000203.png
110 | train_images/000204.png train_labels/000204.png
111 | train_images/000205.png train_labels/000205.png
112 | train_images/000206.png train_labels/000206.png
113 | train_images/000213.png train_labels/000213.png
114 | train_images/000214.png train_labels/000214.png
115 | train_images/000215.png train_labels/000215.png
116 | train_images/000216.png train_labels/000216.png
117 | train_images/000217.png train_labels/000217.png
118 | train_images/000218.png train_labels/000218.png
119 | train_images/000219.png train_labels/000219.png
120 | train_images/000223.png train_labels/000223.png
121 | train_images/000224.png train_labels/000224.png
122 | train_images/000225.png train_labels/000225.png
123 | train_images/000226.png train_labels/000226.png
124 | train_images/000227.png train_labels/000227.png
125 | train_images/000228.png train_labels/000228.png
126 | train_images/000229.png train_labels/000229.png
127 | train_images/000230.png train_labels/000230.png
128 | train_images/000231.png train_labels/000231.png
129 | train_images/000232.png train_labels/000232.png
130 | train_images/000233.png train_labels/000233.png
131 | train_images/000234.png train_labels/000234.png
132 | train_images/000235.png train_labels/000235.png
133 | train_images/000236.png train_labels/000236.png
134 | train_images/000237.png train_labels/000237.png
135 | train_images/000238.png train_labels/000238.png
136 | train_images/000239.png train_labels/000239.png
137 | train_images/000240.png train_labels/000240.png
138 | train_images/000241.png train_labels/000241.png
139 | train_images/000242.png train_labels/000242.png
140 | train_images/000243.png train_labels/000243.png
141 | train_images/000244.png train_labels/000244.png
142 | train_images/000245.png train_labels/000245.png
143 | train_images/000246.png train_labels/000246.png
144 | train_images/000247.png train_labels/000247.png
145 | train_images/000248.png train_labels/000248.png
146 | train_images/000249.png train_labels/000249.png
147 | train_images/000251.png train_labels/000251.png
148 | train_images/000252.png train_labels/000252.png
149 | train_images/000253.png train_labels/000253.png
150 | train_images/000254.png train_labels/000254.png
151 | train_images/000255.png train_labels/000255.png
152 | train_images/000256.png train_labels/000256.png
153 | train_images/000257.png train_labels/000257.png
154 | train_images/000258.png train_labels/000258.png
155 | train_images/000259.png train_labels/000259.png
156 | train_images/000260.png train_labels/000260.png
157 | train_images/000261.png train_labels/000261.png
158 | train_images/000262.png train_labels/000262.png
159 | train_images/000263.png train_labels/000263.png
160 | train_images/000265.png train_labels/000265.png
161 | train_images/000266.png train_labels/000266.png
162 | train_images/000267.png train_labels/000267.png
163 | train_images/000268.png train_labels/000268.png
164 | train_images/000269.png train_labels/000269.png
165 | train_images/000270.png train_labels/000270.png
166 | train_images/000274.png train_labels/000274.png
167 | train_images/000275.png train_labels/000275.png
168 | train_images/000276.png train_labels/000276.png
169 | train_images/000277.png train_labels/000277.png
170 | train_images/000278.png train_labels/000278.png
171 | train_images/000286.png train_labels/000286.png
172 | train_images/000287.png train_labels/000287.png
173 | train_images/000288.png train_labels/000288.png
174 | train_images/000289.png train_labels/000289.png
175 | train_images/000290.png train_labels/000290.png
176 | train_images/000291.png train_labels/000291.png
177 | train_images/000292.png train_labels/000292.png
178 | train_images/000293.png train_labels/000293.png
179 | train_images/000294.png train_labels/000294.png
180 | train_images/000295.png train_labels/000295.png
181 | train_images/000303.png train_labels/000303.png
182 | train_images/000304.png train_labels/000304.png
183 | train_images/000305.png train_labels/000305.png
184 | train_images/000306.png train_labels/000306.png
185 | train_images/000307.png train_labels/000307.png
186 | train_images/000308.png train_labels/000308.png
187 | train_images/000309.png train_labels/000309.png
188 | train_images/000313.png train_labels/000313.png
189 | train_images/000314.png train_labels/000314.png
190 | train_images/000318.png train_labels/000318.png
191 | train_images/000319.png train_labels/000319.png
192 | train_images/000320.png train_labels/000320.png
193 | train_images/000321.png train_labels/000321.png
194 | train_images/000322.png train_labels/000322.png
195 | train_images/000323.png train_labels/000323.png
196 | train_images/000324.png train_labels/000324.png
197 | train_images/000336.png train_labels/000336.png
198 | train_images/000337.png train_labels/000337.png
199 | train_images/000338.png train_labels/000338.png
200 | train_images/000339.png train_labels/000339.png
201 | train_images/000340.png train_labels/000340.png
202 | train_images/000341.png train_labels/000341.png
203 | train_images/000342.png train_labels/000342.png
204 | train_images/000343.png train_labels/000343.png
205 | train_images/000344.png train_labels/000344.png
206 | train_images/000345.png train_labels/000345.png
207 | train_images/000346.png train_labels/000346.png
208 | train_images/000347.png train_labels/000347.png
209 | train_images/000348.png train_labels/000348.png
210 | train_images/000349.png train_labels/000349.png
211 | train_images/000350.png train_labels/000350.png
212 | train_images/000353.png train_labels/000353.png
213 | train_images/000354.png train_labels/000354.png
214 | train_images/000365.png train_labels/000365.png
215 | train_images/000366.png train_labels/000366.png
216 | train_images/000367.png train_labels/000367.png
217 | train_images/000368.png train_labels/000368.png
218 | train_images/000369.png train_labels/000369.png
219 | train_images/000370.png train_labels/000370.png
220 | train_images/000371.png train_labels/000371.png
221 | train_images/000372.png train_labels/000372.png
222 | train_images/000373.png train_labels/000373.png
223 | train_images/000374.png train_labels/000374.png
224 | train_images/000375.png train_labels/000375.png
225 | train_images/000376.png train_labels/000376.png
226 | train_images/000377.png train_labels/000377.png
227 | train_images/000378.png train_labels/000378.png
228 | train_images/000379.png train_labels/000379.png
229 | train_images/000380.png train_labels/000380.png
230 | train_images/000381.png train_labels/000381.png
231 | train_images/000382.png train_labels/000382.png
232 | train_images/000383.png train_labels/000383.png
233 | train_images/000391.png train_labels/000391.png
234 | train_images/000392.png train_labels/000392.png
235 | train_images/000393.png train_labels/000393.png
236 | train_images/000394.png train_labels/000394.png
237 | train_images/000398.png train_labels/000398.png
238 | train_images/000399.png train_labels/000399.png
239 | train_images/000400.png train_labels/000400.png
240 | train_images/000401.png train_labels/000401.png
241 | train_images/000402.png train_labels/000402.png
242 | train_images/000403.png train_labels/000403.png
243 | train_images/000404.png train_labels/000404.png
244 | train_images/000405.png train_labels/000405.png
245 | train_images/000406.png train_labels/000406.png
246 | train_images/000407.png train_labels/000407.png
247 | train_images/000408.png train_labels/000408.png
248 | train_images/000409.png train_labels/000409.png
249 | train_images/000410.png train_labels/000410.png
250 | train_images/000415.png train_labels/000415.png
251 | train_images/000416.png train_labels/000416.png
252 | train_images/000417.png train_labels/000417.png
253 | train_images/000418.png train_labels/000418.png
254 | train_images/000419.png train_labels/000419.png
255 | train_images/000420.png train_labels/000420.png
256 | train_images/000421.png train_labels/000421.png
257 | train_images/000422.png train_labels/000422.png
258 | train_images/000423.png train_labels/000423.png
259 | train_images/000424.png train_labels/000424.png
260 | train_images/000425.png train_labels/000425.png
261 | train_images/000426.png train_labels/000426.png
262 | train_images/000427.png train_labels/000427.png
263 | train_images/000428.png train_labels/000428.png
264 | train_images/000429.png train_labels/000429.png
265 | train_images/000436.png train_labels/000436.png
266 | train_images/000437.png train_labels/000437.png
267 | train_images/000438.png train_labels/000438.png
268 | train_images/000439.png train_labels/000439.png
269 | train_images/000440.png train_labels/000440.png
270 | train_images/000449.png train_labels/000449.png
271 | train_images/000450.png train_labels/000450.png
272 | train_images/000451.png train_labels/000451.png
273 | train_images/000452.png train_labels/000452.png
274 | train_images/000453.png train_labels/000453.png
275 | train_images/000454.png train_labels/000454.png
276 | train_images/000455.png train_labels/000455.png
277 | train_images/000456.png train_labels/000456.png
278 | train_images/000457.png train_labels/000457.png
279 | train_images/000458.png train_labels/000458.png
280 | train_images/000459.png train_labels/000459.png
281 | train_images/000460.png train_labels/000460.png
282 | train_images/000461.png train_labels/000461.png
283 | train_images/000467.png train_labels/000467.png
284 | train_images/000468.png train_labels/000468.png
285 | train_images/000478.png train_labels/000478.png
286 | train_images/000479.png train_labels/000479.png
287 | train_images/000480.png train_labels/000480.png
288 | train_images/000481.png train_labels/000481.png
289 | train_images/000482.png train_labels/000482.png
290 | train_images/000483.png train_labels/000483.png
291 | train_images/000484.png train_labels/000484.png
292 | train_images/000485.png train_labels/000485.png
293 | train_images/000486.png train_labels/000486.png
294 | train_images/000487.png train_labels/000487.png
295 | train_images/000488.png train_labels/000488.png
296 | train_images/000489.png train_labels/000489.png
297 | train_images/000490.png train_labels/000490.png
298 | train_images/000491.png train_labels/000491.png
299 | train_images/000492.png train_labels/000492.png
300 | train_images/000493.png train_labels/000493.png
301 | train_images/000494.png train_labels/000494.png
302 | train_images/000495.png train_labels/000495.png
303 | train_images/000496.png train_labels/000496.png
304 | train_images/000497.png train_labels/000497.png
305 | train_images/000498.png train_labels/000498.png
306 | train_images/000499.png train_labels/000499.png
307 | train_images/000500.png train_labels/000500.png
308 | train_images/000501.png train_labels/000501.png
309 | train_images/000502.png train_labels/000502.png
310 | train_images/000503.png train_labels/000503.png
311 | train_images/000504.png train_labels/000504.png
312 | train_images/000505.png train_labels/000505.png
313 | train_images/000506.png train_labels/000506.png
314 | train_images/000507.png train_labels/000507.png
315 | train_images/000514.png train_labels/000514.png
316 | train_images/000527.png train_labels/000527.png
317 | train_images/000528.png train_labels/000528.png
318 | train_images/000529.png train_labels/000529.png
319 | train_images/000530.png train_labels/000530.png
320 | train_images/000534.png train_labels/000534.png
321 | train_images/000535.png train_labels/000535.png
322 | train_images/000536.png train_labels/000536.png
323 | train_images/000540.png train_labels/000540.png
324 | train_images/000541.png train_labels/000541.png
325 | train_images/000542.png train_labels/000542.png
326 | train_images/000543.png train_labels/000543.png
327 | train_images/000544.png train_labels/000544.png
328 | train_images/000545.png train_labels/000545.png
329 | train_images/000546.png train_labels/000546.png
330 | train_images/000547.png train_labels/000547.png
331 | train_images/000548.png train_labels/000548.png
332 | train_images/000552.png train_labels/000552.png
333 | train_images/000553.png train_labels/000553.png
334 | train_images/000554.png train_labels/000554.png
335 | train_images/000572.png train_labels/000572.png
336 | train_images/000573.png train_labels/000573.png
337 | train_images/000574.png train_labels/000574.png
338 | train_images/000575.png train_labels/000575.png
339 | train_images/000576.png train_labels/000576.png
340 | train_images/000577.png train_labels/000577.png
341 | train_images/000578.png train_labels/000578.png
342 | train_images/000584.png train_labels/000584.png
343 | train_images/000585.png train_labels/000585.png
344 | train_images/000586.png train_labels/000586.png
345 | train_images/000587.png train_labels/000587.png
346 | train_images/000588.png train_labels/000588.png
347 | train_images/000589.png train_labels/000589.png
348 | train_images/000590.png train_labels/000590.png
349 | train_images/000595.png train_labels/000595.png
350 | train_images/000596.png train_labels/000596.png
351 | train_images/000597.png train_labels/000597.png
352 | train_images/000598.png train_labels/000598.png
353 | train_images/000599.png train_labels/000599.png
354 | train_images/000600.png train_labels/000600.png
355 | train_images/000601.png train_labels/000601.png
356 | train_images/000602.png train_labels/000602.png
357 | train_images/000608.png train_labels/000608.png
358 | train_images/000609.png train_labels/000609.png
359 | train_images/000610.png train_labels/000610.png
360 | train_images/000611.png train_labels/000611.png
361 | train_images/000614.png train_labels/000614.png
362 | train_images/000615.png train_labels/000615.png
363 | train_images/000616.png train_labels/000616.png
364 | train_images/000622.png train_labels/000622.png
365 | train_images/000623.png train_labels/000623.png
366 | train_images/000624.png train_labels/000624.png
367 | train_images/000625.png train_labels/000625.png
368 | train_images/000626.png train_labels/000626.png
369 | train_images/000627.png train_labels/000627.png
370 | train_images/000628.png train_labels/000628.png
371 | train_images/000629.png train_labels/000629.png
372 | train_images/000630.png train_labels/000630.png
373 | train_images/000631.png train_labels/000631.png
374 | train_images/000632.png train_labels/000632.png
375 | train_images/000639.png train_labels/000639.png
376 | train_images/000640.png train_labels/000640.png
377 | train_images/000641.png train_labels/000641.png
378 | train_images/000642.png train_labels/000642.png
379 | train_images/000643.png train_labels/000643.png
380 | train_images/000646.png train_labels/000646.png
381 | train_images/000647.png train_labels/000647.png
382 | train_images/000648.png train_labels/000648.png
383 | train_images/000649.png train_labels/000649.png
384 | train_images/000652.png train_labels/000652.png
385 | train_images/000653.png train_labels/000653.png
386 | train_images/000654.png train_labels/000654.png
387 | train_images/000655.png train_labels/000655.png
388 | train_images/000659.png train_labels/000659.png
389 | train_images/000660.png train_labels/000660.png
390 | train_images/000661.png train_labels/000661.png
391 | train_images/000662.png train_labels/000662.png
392 | train_images/000665.png train_labels/000665.png
393 | train_images/000666.png train_labels/000666.png
394 | train_images/000667.png train_labels/000667.png
395 | train_images/000674.png train_labels/000674.png
396 | train_images/000675.png train_labels/000675.png
397 | train_images/000682.png train_labels/000682.png
398 | train_images/000683.png train_labels/000683.png
399 | train_images/000684.png train_labels/000684.png
400 | train_images/000685.png train_labels/000685.png
401 | train_images/000691.png train_labels/000691.png
402 | train_images/000692.png train_labels/000692.png
403 | train_images/000695.png train_labels/000695.png
404 | train_images/000696.png train_labels/000696.png
405 | train_images/000700.png train_labels/000700.png
406 | train_images/000701.png train_labels/000701.png
407 | train_images/000702.png train_labels/000702.png
408 | train_images/000703.png train_labels/000703.png
409 | train_images/000704.png train_labels/000704.png
410 | train_images/000705.png train_labels/000705.png
411 | train_images/000714.png train_labels/000714.png
412 | train_images/000715.png train_labels/000715.png
413 | train_images/000716.png train_labels/000716.png
414 | train_images/000719.png train_labels/000719.png
415 | train_images/000720.png train_labels/000720.png
416 | train_images/000721.png train_labels/000721.png
417 | train_images/000722.png train_labels/000722.png
418 | train_images/000723.png train_labels/000723.png
419 | train_images/000729.png train_labels/000729.png
420 | train_images/000730.png train_labels/000730.png
421 | train_images/000735.png train_labels/000735.png
422 | train_images/000736.png train_labels/000736.png
423 | train_images/000737.png train_labels/000737.png
424 | train_images/000738.png train_labels/000738.png
425 | train_images/000739.png train_labels/000739.png
426 | train_images/000740.png train_labels/000740.png
427 | train_images/000741.png train_labels/000741.png
428 | train_images/000742.png train_labels/000742.png
429 | train_images/000745.png train_labels/000745.png
430 | train_images/000746.png train_labels/000746.png
431 | train_images/000747.png train_labels/000747.png
432 | train_images/000748.png train_labels/000748.png
433 | train_images/000749.png train_labels/000749.png
434 | train_images/000750.png train_labels/000750.png
435 | train_images/000751.png train_labels/000751.png
436 | train_images/000752.png train_labels/000752.png
437 | train_images/000753.png train_labels/000753.png
438 | train_images/000754.png train_labels/000754.png
439 | train_images/000755.png train_labels/000755.png
440 | train_images/000756.png train_labels/000756.png
441 | train_images/000757.png train_labels/000757.png
442 | train_images/000758.png train_labels/000758.png
443 | train_images/000788.png train_labels/000788.png
444 | train_images/000789.png train_labels/000789.png
445 | train_images/000790.png train_labels/000790.png
446 | train_images/000791.png train_labels/000791.png
447 | train_images/000792.png train_labels/000792.png
448 | train_images/000793.png train_labels/000793.png
449 | train_images/000794.png train_labels/000794.png
450 | train_images/000795.png train_labels/000795.png
451 | train_images/000796.png train_labels/000796.png
452 | train_images/000797.png train_labels/000797.png
453 | train_images/000798.png train_labels/000798.png
454 | train_images/000799.png train_labels/000799.png
455 | train_images/000805.png train_labels/000805.png
456 | train_images/000806.png train_labels/000806.png
457 | train_images/000807.png train_labels/000807.png
458 | train_images/000808.png train_labels/000808.png
459 | train_images/000809.png train_labels/000809.png
460 | train_images/000815.png train_labels/000815.png
461 | train_images/000816.png train_labels/000816.png
462 | train_images/000817.png train_labels/000817.png
463 | train_images/000818.png train_labels/000818.png
464 | train_images/000819.png train_labels/000819.png
465 | train_images/000820.png train_labels/000820.png
466 | train_images/000824.png train_labels/000824.png
467 | train_images/000825.png train_labels/000825.png
468 | train_images/000826.png train_labels/000826.png
469 | train_images/000827.png train_labels/000827.png
470 | train_images/000828.png train_labels/000828.png
471 | train_images/000829.png train_labels/000829.png
472 | train_images/000830.png train_labels/000830.png
473 | train_images/000831.png train_labels/000831.png
474 | train_images/000832.png train_labels/000832.png
475 | train_images/000847.png train_labels/000847.png
476 | train_images/000848.png train_labels/000848.png
477 | train_images/000849.png train_labels/000849.png
478 | train_images/000853.png train_labels/000853.png
479 | train_images/000854.png train_labels/000854.png
480 | train_images/000855.png train_labels/000855.png
481 | train_images/000856.png train_labels/000856.png
482 | train_images/000863.png train_labels/000863.png
483 | train_images/000864.png train_labels/000864.png
484 | train_images/000865.png train_labels/000865.png
485 | train_images/000866.png train_labels/000866.png
486 | train_images/000867.png train_labels/000867.png
487 | train_images/000868.png train_labels/000868.png
488 | train_images/000872.png train_labels/000872.png
489 | train_images/000873.png train_labels/000873.png
490 | train_images/000874.png train_labels/000874.png
491 | train_images/000875.png train_labels/000875.png
492 | train_images/000876.png train_labels/000876.png
493 | train_images/000877.png train_labels/000877.png
494 | train_images/000878.png train_labels/000878.png
495 | train_images/000879.png train_labels/000879.png
496 | train_images/000880.png train_labels/000880.png
497 | train_images/000881.png train_labels/000881.png
498 | train_images/000882.png train_labels/000882.png
499 | train_images/000883.png train_labels/000883.png
500 | train_images/000884.png train_labels/000884.png
501 | train_images/000885.png train_labels/000885.png
502 | train_images/000886.png train_labels/000886.png
503 | train_images/000887.png train_labels/000887.png
504 | train_images/000888.png train_labels/000888.png
505 | train_images/000889.png train_labels/000889.png
506 | train_images/000890.png train_labels/000890.png
507 | train_images/000891.png train_labels/000891.png
508 | train_images/000892.png train_labels/000892.png
509 | train_images/000893.png train_labels/000893.png
510 | train_images/000894.png train_labels/000894.png
511 | train_images/000895.png train_labels/000895.png
512 | train_images/000896.png train_labels/000896.png
513 | train_images/000897.png train_labels/000897.png
514 | train_images/000898.png train_labels/000898.png
515 | train_images/000899.png train_labels/000899.png
516 | train_images/000900.png train_labels/000900.png
517 | train_images/000901.png train_labels/000901.png
518 | train_images/000902.png train_labels/000902.png
519 | train_images/000903.png train_labels/000903.png
520 | train_images/000904.png train_labels/000904.png
521 | train_images/000905.png train_labels/000905.png
522 | train_images/000909.png train_labels/000909.png
523 | train_images/000910.png train_labels/000910.png
524 | train_images/000911.png train_labels/000911.png
525 | train_images/000912.png train_labels/000912.png
526 | train_images/000913.png train_labels/000913.png
527 | train_images/000914.png train_labels/000914.png
528 | train_images/000915.png train_labels/000915.png
529 | train_images/000916.png train_labels/000916.png
530 | train_images/000920.png train_labels/000920.png
531 | train_images/000921.png train_labels/000921.png
532 | train_images/000922.png train_labels/000922.png
533 | train_images/000923.png train_labels/000923.png
534 | train_images/000924.png train_labels/000924.png
535 | train_images/000925.png train_labels/000925.png
536 | train_images/000929.png train_labels/000929.png
537 | train_images/000930.png train_labels/000930.png
538 | train_images/000931.png train_labels/000931.png
539 | train_images/000936.png train_labels/000936.png
540 | train_images/000937.png train_labels/000937.png
541 | train_images/000938.png train_labels/000938.png
542 | train_images/000939.png train_labels/000939.png
543 | train_images/000940.png train_labels/000940.png
544 | train_images/000941.png train_labels/000941.png
545 | train_images/000942.png train_labels/000942.png
546 | train_images/000943.png train_labels/000943.png
547 | train_images/000944.png train_labels/000944.png
548 | train_images/000948.png train_labels/000948.png
549 | train_images/000949.png train_labels/000949.png
550 | train_images/000950.png train_labels/000950.png
551 | train_images/000951.png train_labels/000951.png
552 | train_images/000952.png train_labels/000952.png
553 | train_images/000953.png train_labels/000953.png
554 | train_images/000954.png train_labels/000954.png
555 | train_images/000955.png train_labels/000955.png
556 | train_images/000956.png train_labels/000956.png
557 | train_images/000957.png train_labels/000957.png
558 | train_images/000958.png train_labels/000958.png
559 | train_images/000963.png train_labels/000963.png
560 | train_images/000964.png train_labels/000964.png
561 | train_images/000968.png train_labels/000968.png
562 | train_images/000969.png train_labels/000969.png
563 | train_images/000978.png train_labels/000978.png
564 | train_images/000979.png train_labels/000979.png
565 | train_images/000980.png train_labels/000980.png
566 | train_images/000981.png train_labels/000981.png
567 | train_images/000982.png train_labels/000982.png
568 | train_images/000983.png train_labels/000983.png
569 | train_images/000984.png train_labels/000984.png
570 | train_images/000985.png train_labels/000985.png
571 | train_images/000986.png train_labels/000986.png
572 | train_images/000987.png train_labels/000987.png
573 | train_images/000988.png train_labels/000988.png
574 | train_images/000989.png train_labels/000989.png
575 | train_images/000990.png train_labels/000990.png
576 | train_images/000996.png train_labels/000996.png
577 | train_images/000997.png train_labels/000997.png
578 | train_images/000998.png train_labels/000998.png
579 | train_images/000999.png train_labels/000999.png
580 | train_images/001000.png train_labels/001000.png
581 | train_images/001005.png train_labels/001005.png
582 | train_images/001006.png train_labels/001006.png
583 | train_images/001007.png train_labels/001007.png
584 | train_images/001008.png train_labels/001008.png
585 | train_images/001009.png train_labels/001009.png
586 | train_images/001013.png train_labels/001013.png
587 | train_images/001014.png train_labels/001014.png
588 | train_images/001015.png train_labels/001015.png
589 | train_images/001016.png train_labels/001016.png
590 | train_images/001017.png train_labels/001017.png
591 | train_images/001018.png train_labels/001018.png
592 | train_images/001019.png train_labels/001019.png
593 | train_images/001020.png train_labels/001020.png
594 | train_images/001024.png train_labels/001024.png
595 | train_images/001025.png train_labels/001025.png
596 | train_images/001026.png train_labels/001026.png
597 | train_images/001027.png train_labels/001027.png
598 | train_images/001028.png train_labels/001028.png
599 | train_images/001029.png train_labels/001029.png
600 | train_images/001030.png train_labels/001030.png
601 | train_images/001031.png train_labels/001031.png
602 | train_images/001035.png train_labels/001035.png
603 | train_images/001036.png train_labels/001036.png
604 | train_images/001037.png train_labels/001037.png
605 | train_images/001040.png train_labels/001040.png
606 | train_images/001041.png train_labels/001041.png
607 | train_images/001042.png train_labels/001042.png
608 | train_images/001043.png train_labels/001043.png
609 | train_images/001044.png train_labels/001044.png
610 | train_images/001045.png train_labels/001045.png
611 | train_images/001046.png train_labels/001046.png
612 | train_images/001047.png train_labels/001047.png
613 | train_images/001050.png train_labels/001050.png
614 | train_images/001051.png train_labels/001051.png
615 | train_images/001054.png train_labels/001054.png
616 | train_images/001055.png train_labels/001055.png
617 | train_images/001056.png train_labels/001056.png
618 | train_images/001059.png train_labels/001059.png
619 | train_images/001060.png train_labels/001060.png
620 | train_images/001061.png train_labels/001061.png
621 | train_images/001062.png train_labels/001062.png
622 | train_images/001063.png train_labels/001063.png
623 | train_images/001064.png train_labels/001064.png
624 | train_images/001065.png train_labels/001065.png
625 | train_images/001066.png train_labels/001066.png
626 | train_images/001067.png train_labels/001067.png
627 | train_images/001068.png train_labels/001068.png
628 | train_images/001069.png train_labels/001069.png
629 | train_images/001070.png train_labels/001070.png
630 | train_images/001071.png train_labels/001071.png
631 | train_images/001072.png train_labels/001072.png
632 | train_images/001073.png train_labels/001073.png
633 | train_images/001074.png train_labels/001074.png
634 | train_images/001085.png train_labels/001085.png
635 | train_images/001086.png train_labels/001086.png
636 | train_images/001087.png train_labels/001087.png
637 | train_images/001097.png train_labels/001097.png
638 | train_images/001105.png train_labels/001105.png
639 | train_images/001110.png train_labels/001110.png
640 | train_images/001111.png train_labels/001111.png
641 | train_images/001112.png train_labels/001112.png
642 | train_images/001113.png train_labels/001113.png
643 | train_images/001114.png train_labels/001114.png
644 | train_images/001115.png train_labels/001115.png
645 | train_images/001116.png train_labels/001116.png
646 | train_images/001120.png train_labels/001120.png
647 | train_images/001121.png train_labels/001121.png
648 | train_images/001122.png train_labels/001122.png
649 | train_images/001132.png train_labels/001132.png
650 | train_images/001133.png train_labels/001133.png
651 | train_images/001134.png train_labels/001134.png
652 | train_images/001137.png train_labels/001137.png
653 | train_images/001138.png train_labels/001138.png
654 | train_images/001139.png train_labels/001139.png
655 | train_images/001140.png train_labels/001140.png
656 | train_images/001141.png train_labels/001141.png
657 | train_images/001142.png train_labels/001142.png
658 | train_images/001143.png train_labels/001143.png
659 | train_images/001159.png train_labels/001159.png
660 | train_images/001160.png train_labels/001160.png
661 | train_images/001161.png train_labels/001161.png
662 | train_images/001168.png train_labels/001168.png
663 | train_images/001169.png train_labels/001169.png
664 | train_images/001172.png train_labels/001172.png
665 | train_images/001173.png train_labels/001173.png
666 | train_images/001177.png train_labels/001177.png
667 | train_images/001178.png train_labels/001178.png
668 | train_images/001185.png train_labels/001185.png
669 | train_images/001186.png train_labels/001186.png
670 | train_images/001187.png train_labels/001187.png
671 | train_images/001188.png train_labels/001188.png
672 | train_images/001189.png train_labels/001189.png
673 | train_images/001190.png train_labels/001190.png
674 | train_images/001191.png train_labels/001191.png
675 | train_images/001197.png train_labels/001197.png
676 | train_images/001198.png train_labels/001198.png
677 | train_images/001199.png train_labels/001199.png
678 | train_images/001200.png train_labels/001200.png
679 | train_images/001213.png train_labels/001213.png
680 | train_images/001214.png train_labels/001214.png
681 | train_images/001215.png train_labels/001215.png
682 | train_images/001221.png train_labels/001221.png
683 | train_images/001222.png train_labels/001222.png
684 | train_images/001223.png train_labels/001223.png
685 | train_images/001224.png train_labels/001224.png
686 | train_images/001225.png train_labels/001225.png
687 | train_images/001231.png train_labels/001231.png
688 | train_images/001232.png train_labels/001232.png
689 | train_images/001236.png train_labels/001236.png
690 | train_images/001237.png train_labels/001237.png
691 | train_images/001238.png train_labels/001238.png
692 | train_images/001239.png train_labels/001239.png
693 | train_images/001240.png train_labels/001240.png
694 | train_images/001241.png train_labels/001241.png
695 | train_images/001242.png train_labels/001242.png
696 | train_images/001243.png train_labels/001243.png
697 | train_images/001244.png train_labels/001244.png
698 | train_images/001245.png train_labels/001245.png
699 | train_images/001246.png train_labels/001246.png
700 | train_images/001251.png train_labels/001251.png
701 | train_images/001252.png train_labels/001252.png
702 | train_images/001253.png train_labels/001253.png
703 | train_images/001266.png train_labels/001266.png
704 | train_images/001267.png train_labels/001267.png
705 | train_images/001268.png train_labels/001268.png
706 | train_images/001269.png train_labels/001269.png
707 | train_images/001270.png train_labels/001270.png
708 | train_images/001271.png train_labels/001271.png
709 | train_images/001272.png train_labels/001272.png
710 | train_images/001273.png train_labels/001273.png
711 | train_images/001274.png train_labels/001274.png
712 | train_images/001281.png train_labels/001281.png
713 | train_images/001282.png train_labels/001282.png
714 | train_images/001283.png train_labels/001283.png
715 | train_images/001284.png train_labels/001284.png
716 | train_images/001296.png train_labels/001296.png
717 | train_images/001300.png train_labels/001300.png
718 | train_images/001301.png train_labels/001301.png
719 | train_images/001309.png train_labels/001309.png
720 | train_images/001310.png train_labels/001310.png
721 | train_images/001311.png train_labels/001311.png
722 | train_images/001312.png train_labels/001312.png
723 | train_images/001313.png train_labels/001313.png
724 | train_images/001316.png train_labels/001316.png
725 | train_images/001317.png train_labels/001317.png
726 | train_images/001318.png train_labels/001318.png
727 | train_images/001319.png train_labels/001319.png
728 | train_images/001320.png train_labels/001320.png
729 | train_images/001321.png train_labels/001321.png
730 | train_images/001322.png train_labels/001322.png
731 | train_images/001323.png train_labels/001323.png
732 | train_images/001324.png train_labels/001324.png
733 | train_images/001325.png train_labels/001325.png
734 | train_images/001326.png train_labels/001326.png
735 | train_images/001327.png train_labels/001327.png
736 | train_images/001328.png train_labels/001328.png
737 | train_images/001333.png train_labels/001333.png
738 | train_images/001334.png train_labels/001334.png
739 | train_images/001341.png train_labels/001341.png
740 | train_images/001342.png train_labels/001342.png
741 | train_images/001343.png train_labels/001343.png
742 | train_images/001344.png train_labels/001344.png
743 | train_images/001345.png train_labels/001345.png
744 | train_images/001346.png train_labels/001346.png
745 | train_images/001350.png train_labels/001350.png
746 | train_images/001351.png train_labels/001351.png
747 | train_images/001352.png train_labels/001352.png
748 | train_images/001357.png train_labels/001357.png
749 | train_images/001358.png train_labels/001358.png
750 | train_images/001359.png train_labels/001359.png
751 | train_images/001360.png train_labels/001360.png
752 | train_images/001361.png train_labels/001361.png
753 | train_images/001362.png train_labels/001362.png
754 | train_images/001363.png train_labels/001363.png
755 | train_images/001366.png train_labels/001366.png
756 | train_images/001367.png train_labels/001367.png
757 | train_images/001370.png train_labels/001370.png
758 | train_images/001371.png train_labels/001371.png
759 | train_images/001372.png train_labels/001372.png
760 | train_images/001373.png train_labels/001373.png
761 | train_images/001374.png train_labels/001374.png
762 | train_images/001375.png train_labels/001375.png
763 | train_images/001376.png train_labels/001376.png
764 | train_images/001377.png train_labels/001377.png
765 | train_images/001378.png train_labels/001378.png
766 | train_images/001379.png train_labels/001379.png
767 | train_images/001380.png train_labels/001380.png
768 | train_images/001381.png train_labels/001381.png
769 | train_images/001382.png train_labels/001382.png
770 | train_images/001383.png train_labels/001383.png
771 | train_images/001392.png train_labels/001392.png
772 | train_images/001393.png train_labels/001393.png
773 | train_images/001402.png train_labels/001402.png
774 | train_images/001403.png train_labels/001403.png
775 | train_images/001404.png train_labels/001404.png
776 | train_images/001405.png train_labels/001405.png
777 | train_images/001406.png train_labels/001406.png
778 | train_images/001415.png train_labels/001415.png
779 | train_images/001416.png train_labels/001416.png
780 | train_images/001417.png train_labels/001417.png
781 | train_images/001418.png train_labels/001418.png
782 | train_images/001419.png train_labels/001419.png
783 | train_images/001420.png train_labels/001420.png
784 | train_images/001425.png train_labels/001425.png
785 | train_images/001426.png train_labels/001426.png
786 | train_images/001427.png train_labels/001427.png
787 | train_images/001428.png train_labels/001428.png
788 | train_images/001429.png train_labels/001429.png
789 | train_images/001434.png train_labels/001434.png
790 | train_images/001435.png train_labels/001435.png
791 | train_images/001436.png train_labels/001436.png
792 | train_images/001437.png train_labels/001437.png
793 | train_images/001438.png train_labels/001438.png
794 | train_images/001439.png train_labels/001439.png
795 | train_images/001440.png train_labels/001440.png
796 |
--------------------------------------------------------------------------------
/data/val.face:
--------------------------------------------------------------------------------
1 | val_images/3203248403_1.jpg val_labels/3203248403_1.png
2 | val_images/3247339235_1.jpg val_labels/3247339235_1.png
3 | val_images/3213949024_1.jpg val_labels/3213949024_1.png
4 | val_images/3217491791_1.jpg val_labels/3217491791_1.png
5 | val_images/3241295295_1.jpg val_labels/3241295295_1.png
6 | val_images/3214120096_1.jpg val_labels/3214120096_1.png
7 | val_images/3241092906_1.jpg val_labels/3241092906_1.png
8 | val_images/3213274513_1.jpg val_labels/3213274513_1.png
9 | val_images/3214115970_3.jpg val_labels/3214115970_3.png
10 | val_images/3239006545_1.jpg val_labels/3239006545_1.png
11 | val_images/3214010220_3.jpg val_labels/3214010220_3.png
12 | val_images/3210193974_1.jpg val_labels/3210193974_1.png
13 | val_images/3266693323_1.jpg val_labels/3266693323_1.png
14 | val_images/3236428731_1.jpg val_labels/3236428731_1.png
15 | val_images/3213270807_2.jpg val_labels/3213270807_2.png
16 | val_images/3248846504_1.jpg val_labels/3248846504_1.png
17 | val_images/3213221949_1.jpg val_labels/3213221949_1.png
18 | val_images/3213270807_4.jpg val_labels/3213270807_4.png
19 | val_images/3261640996_1.jpg val_labels/3261640996_1.png
20 | val_images/3213264433_1.jpg val_labels/3213264433_1.png
21 | val_images/3213229323_1.jpg val_labels/3213229323_1.png
22 | val_images/3226773050_1.jpg val_labels/3226773050_1.png
23 | val_images/3214021244_1.jpg val_labels/3214021244_1.png
24 | val_images/3227200268_1.jpg val_labels/3227200268_1.png
25 | val_images/3227182502_1.jpg val_labels/3227182502_1.png
26 | val_images/3255054809_1.jpg val_labels/3255054809_1.png
27 | val_images/3220050079_1.jpg val_labels/3220050079_1.png
28 | val_images/3213224447_1.jpg val_labels/3213224447_1.png
29 | val_images/3213155161_2.jpg val_labels/3213155161_2.png
30 | val_images/3209573417_2.jpg val_labels/3209573417_2.png
31 | val_images/3212378179_1.jpg val_labels/3212378179_1.png
32 | val_images/3213221051_1.jpg val_labels/3213221051_1.png
33 | val_images/3255410296_1.jpg val_labels/3255410296_1.png
34 | val_images/3211099008_1.jpg val_labels/3211099008_1.png
35 | val_images/3213825562_1.jpg val_labels/3213825562_1.png
36 | val_images/3231797341_1.jpg val_labels/3231797341_1.png
37 | val_images/3243018729_1.jpg val_labels/3243018729_1.png
38 | val_images/3262777136_1.jpg val_labels/3262777136_1.png
39 | val_images/3234996955_1.jpg val_labels/3234996955_1.png
40 | val_images/3207706370_2.jpg val_labels/3207706370_2.png
41 | val_images/3213231361_1.jpg val_labels/3213231361_1.png
42 | val_images/3238436027_1.jpg val_labels/3238436027_1.png
43 | val_images/3219692565_1.jpg val_labels/3219692565_1.png
44 | val_images/3213143311_1.jpg val_labels/3213143311_1.png
45 | val_images/3213087169_2.jpg val_labels/3213087169_2.png
46 | val_images/3222261569_1.jpg val_labels/3222261569_1.png
47 | val_images/3218989431_1.jpg val_labels/3218989431_1.png
48 | val_images/3234997069_1.jpg val_labels/3234997069_1.png
49 | val_images/3252000476_1.jpg val_labels/3252000476_1.png
50 | val_images/3218988613_1.jpg val_labels/3218988613_1.png
51 | val_images/3213978420_1.jpg val_labels/3213978420_1.png
52 | val_images/3203334240_1.jpg val_labels/3203334240_1.png
53 | val_images/3230011778_1.jpg val_labels/3230011778_1.png
54 | val_images/3213507763_1.jpg val_labels/3213507763_1.png
55 | val_images/3217492469_1.jpg val_labels/3217492469_1.png
56 | val_images/3260548295_2.jpg val_labels/3260548295_2.png
57 | val_images/3214010220_1.jpg val_labels/3214010220_1.png
58 | val_images/3247810519_1.jpg val_labels/3247810519_1.png
59 | val_images/3233580660_1.jpg val_labels/3233580660_1.png
60 | val_images/3214120096_4.jpg val_labels/3214120096_4.png
61 | val_images/3220402975_1.jpg val_labels/3220402975_1.png
62 | val_images/3217614198_1.jpg val_labels/3217614198_1.png
63 | val_images/3252851380_1.jpg val_labels/3252851380_1.png
64 | val_images/3239209193_1.jpg val_labels/3239209193_1.png
65 | val_images/3213214947_2.jpg val_labels/3213214947_2.png
66 | val_images/3220050079_2.jpg val_labels/3220050079_2.png
67 | val_images/3260548295_1.jpg val_labels/3260548295_1.png
68 | val_images/3219821966_1.jpg val_labels/3219821966_1.png
69 | val_images/3223164362_10.jpg val_labels/3223164362_10.png
70 | val_images/3227203804_1.jpg val_labels/3227203804_1.png
71 | val_images/3214097106_2.jpg val_labels/3214097106_2.png
72 | val_images/3243602421_1.jpg val_labels/3243602421_1.png
73 | val_images/3213215243_1.jpg val_labels/3213215243_1.png
74 | val_images/3202279106_1.jpg val_labels/3202279106_1.png
75 | val_images/3215987812_1.jpg val_labels/3215987812_1.png
76 | val_images/3213802370_1.jpg val_labels/3213802370_1.png
77 | val_images/3227323913_1.jpg val_labels/3227323913_1.png
78 | val_images/3211768569_1.jpg val_labels/3211768569_1.png
79 | val_images/3214097106_1.jpg val_labels/3214097106_1.png
80 | val_images/3214120096_5.jpg val_labels/3214120096_5.png
81 | val_images/3251963224_1.jpg val_labels/3251963224_1.png
82 | val_images/3219850974_1.jpg val_labels/3219850974_1.png
83 | val_images/3213167447_1.jpg val_labels/3213167447_1.png
84 | val_images/3213153149_1.jpg val_labels/3213153149_1.png
85 | val_images/3248183827_1.jpg val_labels/3248183827_1.png
86 | val_images/3213105453_1.jpg val_labels/3213105453_1.png
87 | val_images/3213270807_1.jpg val_labels/3213270807_1.png
88 | val_images/3239637522_1.jpg val_labels/3239637522_1.png
89 | val_images/3213211241_1.jpg val_labels/3213211241_1.png
90 | val_images/3214022978_1.jpg val_labels/3214022978_1.png
91 | val_images/3222262589_1.jpg val_labels/3222262589_1.png
92 | val_images/3213107975_2.jpg val_labels/3213107975_2.png
93 | val_images/3218864820_1.jpg val_labels/3218864820_1.png
94 | val_images/3214115970_1.jpg val_labels/3214115970_1.png
95 | val_images/3253427659_1.jpg val_labels/3253427659_1.png
96 | val_images/3249818146_1.jpg val_labels/3249818146_1.png
97 | val_images/3223115234_1.jpg val_labels/3223115234_1.png
98 | val_images/3214066418_2.jpg val_labels/3214066418_2.png
99 | val_images/3218990939_1.jpg val_labels/3218990939_1.png
100 | val_images/3218991897_1.jpg val_labels/3218991897_1.png
101 |
--------------------------------------------------------------------------------
/data/val.nyu:
--------------------------------------------------------------------------------
1 | val_images/000001.png val_labels/000001.png
2 | val_images/000002.png val_labels/000002.png
3 | val_images/000009.png val_labels/000009.png
4 | val_images/000014.png val_labels/000014.png
5 | val_images/000015.png val_labels/000015.png
6 | val_images/000016.png val_labels/000016.png
7 | val_images/000017.png val_labels/000017.png
8 | val_images/000018.png val_labels/000018.png
9 | val_images/000021.png val_labels/000021.png
10 | val_images/000028.png val_labels/000028.png
11 | val_images/000029.png val_labels/000029.png
12 | val_images/000030.png val_labels/000030.png
13 | val_images/000031.png val_labels/000031.png
14 | val_images/000032.png val_labels/000032.png
15 | val_images/000033.png val_labels/000033.png
16 | val_images/000034.png val_labels/000034.png
17 | val_images/000035.png val_labels/000035.png
18 | val_images/000036.png val_labels/000036.png
19 | val_images/000037.png val_labels/000037.png
20 | val_images/000038.png val_labels/000038.png
21 | val_images/000039.png val_labels/000039.png
22 | val_images/000040.png val_labels/000040.png
23 | val_images/000041.png val_labels/000041.png
24 | val_images/000042.png val_labels/000042.png
25 | val_images/000043.png val_labels/000043.png
26 | val_images/000046.png val_labels/000046.png
27 | val_images/000047.png val_labels/000047.png
28 | val_images/000056.png val_labels/000056.png
29 | val_images/000057.png val_labels/000057.png
30 | val_images/000059.png val_labels/000059.png
31 | val_images/000060.png val_labels/000060.png
32 | val_images/000061.png val_labels/000061.png
33 | val_images/000062.png val_labels/000062.png
34 | val_images/000063.png val_labels/000063.png
35 | val_images/000076.png val_labels/000076.png
36 | val_images/000077.png val_labels/000077.png
37 | val_images/000078.png val_labels/000078.png
38 | val_images/000079.png val_labels/000079.png
39 | val_images/000084.png val_labels/000084.png
40 | val_images/000085.png val_labels/000085.png
41 | val_images/000086.png val_labels/000086.png
42 | val_images/000087.png val_labels/000087.png
43 | val_images/000088.png val_labels/000088.png
44 | val_images/000089.png val_labels/000089.png
45 | val_images/000090.png val_labels/000090.png
46 | val_images/000091.png val_labels/000091.png
47 | val_images/000117.png val_labels/000117.png
48 | val_images/000118.png val_labels/000118.png
49 | val_images/000119.png val_labels/000119.png
50 | val_images/000125.png val_labels/000125.png
51 | val_images/000126.png val_labels/000126.png
52 | val_images/000127.png val_labels/000127.png
53 | val_images/000128.png val_labels/000128.png
54 | val_images/000129.png val_labels/000129.png
55 | val_images/000131.png val_labels/000131.png
56 | val_images/000132.png val_labels/000132.png
57 | val_images/000133.png val_labels/000133.png
58 | val_images/000134.png val_labels/000134.png
59 | val_images/000137.png val_labels/000137.png
60 | val_images/000153.png val_labels/000153.png
61 | val_images/000154.png val_labels/000154.png
62 | val_images/000155.png val_labels/000155.png
63 | val_images/000167.png val_labels/000167.png
64 | val_images/000168.png val_labels/000168.png
65 | val_images/000169.png val_labels/000169.png
66 | val_images/000171.png val_labels/000171.png
67 | val_images/000172.png val_labels/000172.png
68 | val_images/000173.png val_labels/000173.png
69 | val_images/000174.png val_labels/000174.png
70 | val_images/000175.png val_labels/000175.png
71 | val_images/000176.png val_labels/000176.png
72 | val_images/000180.png val_labels/000180.png
73 | val_images/000181.png val_labels/000181.png
74 | val_images/000182.png val_labels/000182.png
75 | val_images/000183.png val_labels/000183.png
76 | val_images/000184.png val_labels/000184.png
77 | val_images/000185.png val_labels/000185.png
78 | val_images/000186.png val_labels/000186.png
79 | val_images/000187.png val_labels/000187.png
80 | val_images/000188.png val_labels/000188.png
81 | val_images/000189.png val_labels/000189.png
82 | val_images/000190.png val_labels/000190.png
83 | val_images/000191.png val_labels/000191.png
84 | val_images/000192.png val_labels/000192.png
85 | val_images/000193.png val_labels/000193.png
86 | val_images/000194.png val_labels/000194.png
87 | val_images/000195.png val_labels/000195.png
88 | val_images/000196.png val_labels/000196.png
89 | val_images/000197.png val_labels/000197.png
90 | val_images/000198.png val_labels/000198.png
91 | val_images/000199.png val_labels/000199.png
92 | val_images/000200.png val_labels/000200.png
93 | val_images/000201.png val_labels/000201.png
94 | val_images/000202.png val_labels/000202.png
95 | val_images/000207.png val_labels/000207.png
96 | val_images/000208.png val_labels/000208.png
97 | val_images/000209.png val_labels/000209.png
98 | val_images/000210.png val_labels/000210.png
99 | val_images/000211.png val_labels/000211.png
100 | val_images/000212.png val_labels/000212.png
101 | val_images/000220.png val_labels/000220.png
102 | val_images/000221.png val_labels/000221.png
103 | val_images/000222.png val_labels/000222.png
104 | val_images/000250.png val_labels/000250.png
105 | val_images/000264.png val_labels/000264.png
106 | val_images/000271.png val_labels/000271.png
107 | val_images/000272.png val_labels/000272.png
108 | val_images/000273.png val_labels/000273.png
109 | val_images/000279.png val_labels/000279.png
110 | val_images/000280.png val_labels/000280.png
111 | val_images/000281.png val_labels/000281.png
112 | val_images/000282.png val_labels/000282.png
113 | val_images/000283.png val_labels/000283.png
114 | val_images/000284.png val_labels/000284.png
115 | val_images/000285.png val_labels/000285.png
116 | val_images/000296.png val_labels/000296.png
117 | val_images/000297.png val_labels/000297.png
118 | val_images/000298.png val_labels/000298.png
119 | val_images/000299.png val_labels/000299.png
120 | val_images/000300.png val_labels/000300.png
121 | val_images/000301.png val_labels/000301.png
122 | val_images/000302.png val_labels/000302.png
123 | val_images/000310.png val_labels/000310.png
124 | val_images/000311.png val_labels/000311.png
125 | val_images/000312.png val_labels/000312.png
126 | val_images/000315.png val_labels/000315.png
127 | val_images/000316.png val_labels/000316.png
128 | val_images/000317.png val_labels/000317.png
129 | val_images/000325.png val_labels/000325.png
130 | val_images/000326.png val_labels/000326.png
131 | val_images/000327.png val_labels/000327.png
132 | val_images/000328.png val_labels/000328.png
133 | val_images/000329.png val_labels/000329.png
134 | val_images/000330.png val_labels/000330.png
135 | val_images/000331.png val_labels/000331.png
136 | val_images/000332.png val_labels/000332.png
137 | val_images/000333.png val_labels/000333.png
138 | val_images/000334.png val_labels/000334.png
139 | val_images/000335.png val_labels/000335.png
140 | val_images/000351.png val_labels/000351.png
141 | val_images/000352.png val_labels/000352.png
142 | val_images/000355.png val_labels/000355.png
143 | val_images/000356.png val_labels/000356.png
144 | val_images/000357.png val_labels/000357.png
145 | val_images/000358.png val_labels/000358.png
146 | val_images/000359.png val_labels/000359.png
147 | val_images/000360.png val_labels/000360.png
148 | val_images/000361.png val_labels/000361.png
149 | val_images/000362.png val_labels/000362.png
150 | val_images/000363.png val_labels/000363.png
151 | val_images/000364.png val_labels/000364.png
152 | val_images/000384.png val_labels/000384.png
153 | val_images/000385.png val_labels/000385.png
154 | val_images/000386.png val_labels/000386.png
155 | val_images/000387.png val_labels/000387.png
156 | val_images/000388.png val_labels/000388.png
157 | val_images/000389.png val_labels/000389.png
158 | val_images/000390.png val_labels/000390.png
159 | val_images/000395.png val_labels/000395.png
160 | val_images/000396.png val_labels/000396.png
161 | val_images/000397.png val_labels/000397.png
162 | val_images/000411.png val_labels/000411.png
163 | val_images/000412.png val_labels/000412.png
164 | val_images/000413.png val_labels/000413.png
165 | val_images/000414.png val_labels/000414.png
166 | val_images/000430.png val_labels/000430.png
167 | val_images/000431.png val_labels/000431.png
168 | val_images/000432.png val_labels/000432.png
169 | val_images/000433.png val_labels/000433.png
170 | val_images/000434.png val_labels/000434.png
171 | val_images/000435.png val_labels/000435.png
172 | val_images/000441.png val_labels/000441.png
173 | val_images/000442.png val_labels/000442.png
174 | val_images/000443.png val_labels/000443.png
175 | val_images/000444.png val_labels/000444.png
176 | val_images/000445.png val_labels/000445.png
177 | val_images/000446.png val_labels/000446.png
178 | val_images/000447.png val_labels/000447.png
179 | val_images/000448.png val_labels/000448.png
180 | val_images/000462.png val_labels/000462.png
181 | val_images/000463.png val_labels/000463.png
182 | val_images/000464.png val_labels/000464.png
183 | val_images/000465.png val_labels/000465.png
184 | val_images/000466.png val_labels/000466.png
185 | val_images/000469.png val_labels/000469.png
186 | val_images/000470.png val_labels/000470.png
187 | val_images/000471.png val_labels/000471.png
188 | val_images/000472.png val_labels/000472.png
189 | val_images/000473.png val_labels/000473.png
190 | val_images/000474.png val_labels/000474.png
191 | val_images/000475.png val_labels/000475.png
192 | val_images/000476.png val_labels/000476.png
193 | val_images/000477.png val_labels/000477.png
194 | val_images/000508.png val_labels/000508.png
195 | val_images/000509.png val_labels/000509.png
196 | val_images/000510.png val_labels/000510.png
197 | val_images/000511.png val_labels/000511.png
198 | val_images/000512.png val_labels/000512.png
199 | val_images/000513.png val_labels/000513.png
200 | val_images/000515.png val_labels/000515.png
201 | val_images/000516.png val_labels/000516.png
202 | val_images/000517.png val_labels/000517.png
203 | val_images/000518.png val_labels/000518.png
204 | val_images/000519.png val_labels/000519.png
205 | val_images/000520.png val_labels/000520.png
206 | val_images/000521.png val_labels/000521.png
207 | val_images/000522.png val_labels/000522.png
208 | val_images/000523.png val_labels/000523.png
209 | val_images/000524.png val_labels/000524.png
210 | val_images/000525.png val_labels/000525.png
211 | val_images/000526.png val_labels/000526.png
212 | val_images/000531.png val_labels/000531.png
213 | val_images/000532.png val_labels/000532.png
214 | val_images/000533.png val_labels/000533.png
215 | val_images/000537.png val_labels/000537.png
216 | val_images/000538.png val_labels/000538.png
217 | val_images/000539.png val_labels/000539.png
218 | val_images/000549.png val_labels/000549.png
219 | val_images/000550.png val_labels/000550.png
220 | val_images/000551.png val_labels/000551.png
221 | val_images/000555.png val_labels/000555.png
222 | val_images/000556.png val_labels/000556.png
223 | val_images/000557.png val_labels/000557.png
224 | val_images/000558.png val_labels/000558.png
225 | val_images/000559.png val_labels/000559.png
226 | val_images/000560.png val_labels/000560.png
227 | val_images/000561.png val_labels/000561.png
228 | val_images/000562.png val_labels/000562.png
229 | val_images/000563.png val_labels/000563.png
230 | val_images/000564.png val_labels/000564.png
231 | val_images/000565.png val_labels/000565.png
232 | val_images/000566.png val_labels/000566.png
233 | val_images/000567.png val_labels/000567.png
234 | val_images/000568.png val_labels/000568.png
235 | val_images/000569.png val_labels/000569.png
236 | val_images/000570.png val_labels/000570.png
237 | val_images/000571.png val_labels/000571.png
238 | val_images/000579.png val_labels/000579.png
239 | val_images/000580.png val_labels/000580.png
240 | val_images/000581.png val_labels/000581.png
241 | val_images/000582.png val_labels/000582.png
242 | val_images/000583.png val_labels/000583.png
243 | val_images/000591.png val_labels/000591.png
244 | val_images/000592.png val_labels/000592.png
245 | val_images/000593.png val_labels/000593.png
246 | val_images/000594.png val_labels/000594.png
247 | val_images/000603.png val_labels/000603.png
248 | val_images/000604.png val_labels/000604.png
249 | val_images/000605.png val_labels/000605.png
250 | val_images/000606.png val_labels/000606.png
251 | val_images/000607.png val_labels/000607.png
252 | val_images/000612.png val_labels/000612.png
253 | val_images/000613.png val_labels/000613.png
254 | val_images/000617.png val_labels/000617.png
255 | val_images/000618.png val_labels/000618.png
256 | val_images/000619.png val_labels/000619.png
257 | val_images/000620.png val_labels/000620.png
258 | val_images/000621.png val_labels/000621.png
259 | val_images/000633.png val_labels/000633.png
260 | val_images/000634.png val_labels/000634.png
261 | val_images/000635.png val_labels/000635.png
262 | val_images/000636.png val_labels/000636.png
263 | val_images/000637.png val_labels/000637.png
264 | val_images/000638.png val_labels/000638.png
265 | val_images/000644.png val_labels/000644.png
266 | val_images/000645.png val_labels/000645.png
267 | val_images/000650.png val_labels/000650.png
268 | val_images/000651.png val_labels/000651.png
269 | val_images/000656.png val_labels/000656.png
270 | val_images/000657.png val_labels/000657.png
271 | val_images/000658.png val_labels/000658.png
272 | val_images/000663.png val_labels/000663.png
273 | val_images/000664.png val_labels/000664.png
274 | val_images/000668.png val_labels/000668.png
275 | val_images/000669.png val_labels/000669.png
276 | val_images/000670.png val_labels/000670.png
277 | val_images/000671.png val_labels/000671.png
278 | val_images/000672.png val_labels/000672.png
279 | val_images/000673.png val_labels/000673.png
280 | val_images/000676.png val_labels/000676.png
281 | val_images/000677.png val_labels/000677.png
282 | val_images/000678.png val_labels/000678.png
283 | val_images/000679.png val_labels/000679.png
284 | val_images/000680.png val_labels/000680.png
285 | val_images/000681.png val_labels/000681.png
286 | val_images/000686.png val_labels/000686.png
287 | val_images/000687.png val_labels/000687.png
288 | val_images/000688.png val_labels/000688.png
289 | val_images/000689.png val_labels/000689.png
290 | val_images/000690.png val_labels/000690.png
291 | val_images/000693.png val_labels/000693.png
292 | val_images/000694.png val_labels/000694.png
293 | val_images/000697.png val_labels/000697.png
294 | val_images/000698.png val_labels/000698.png
295 | val_images/000699.png val_labels/000699.png
296 | val_images/000706.png val_labels/000706.png
297 | val_images/000707.png val_labels/000707.png
298 | val_images/000708.png val_labels/000708.png
299 | val_images/000709.png val_labels/000709.png
300 | val_images/000710.png val_labels/000710.png
301 | val_images/000711.png val_labels/000711.png
302 | val_images/000712.png val_labels/000712.png
303 | val_images/000713.png val_labels/000713.png
304 | val_images/000717.png val_labels/000717.png
305 | val_images/000718.png val_labels/000718.png
306 | val_images/000724.png val_labels/000724.png
307 | val_images/000725.png val_labels/000725.png
308 | val_images/000726.png val_labels/000726.png
309 | val_images/000727.png val_labels/000727.png
310 | val_images/000728.png val_labels/000728.png
311 | val_images/000731.png val_labels/000731.png
312 | val_images/000732.png val_labels/000732.png
313 | val_images/000733.png val_labels/000733.png
314 | val_images/000734.png val_labels/000734.png
315 | val_images/000743.png val_labels/000743.png
316 | val_images/000744.png val_labels/000744.png
317 | val_images/000759.png val_labels/000759.png
318 | val_images/000760.png val_labels/000760.png
319 | val_images/000761.png val_labels/000761.png
320 | val_images/000762.png val_labels/000762.png
321 | val_images/000763.png val_labels/000763.png
322 | val_images/000764.png val_labels/000764.png
323 | val_images/000765.png val_labels/000765.png
324 | val_images/000766.png val_labels/000766.png
325 | val_images/000767.png val_labels/000767.png
326 | val_images/000768.png val_labels/000768.png
327 | val_images/000769.png val_labels/000769.png
328 | val_images/000770.png val_labels/000770.png
329 | val_images/000771.png val_labels/000771.png
330 | val_images/000772.png val_labels/000772.png
331 | val_images/000773.png val_labels/000773.png
332 | val_images/000774.png val_labels/000774.png
333 | val_images/000775.png val_labels/000775.png
334 | val_images/000776.png val_labels/000776.png
335 | val_images/000777.png val_labels/000777.png
336 | val_images/000778.png val_labels/000778.png
337 | val_images/000779.png val_labels/000779.png
338 | val_images/000780.png val_labels/000780.png
339 | val_images/000781.png val_labels/000781.png
340 | val_images/000782.png val_labels/000782.png
341 | val_images/000783.png val_labels/000783.png
342 | val_images/000784.png val_labels/000784.png
343 | val_images/000785.png val_labels/000785.png
344 | val_images/000786.png val_labels/000786.png
345 | val_images/000787.png val_labels/000787.png
346 | val_images/000800.png val_labels/000800.png
347 | val_images/000801.png val_labels/000801.png
348 | val_images/000802.png val_labels/000802.png
349 | val_images/000803.png val_labels/000803.png
350 | val_images/000804.png val_labels/000804.png
351 | val_images/000810.png val_labels/000810.png
352 | val_images/000811.png val_labels/000811.png
353 | val_images/000812.png val_labels/000812.png
354 | val_images/000813.png val_labels/000813.png
355 | val_images/000814.png val_labels/000814.png
356 | val_images/000821.png val_labels/000821.png
357 | val_images/000822.png val_labels/000822.png
358 | val_images/000823.png val_labels/000823.png
359 | val_images/000833.png val_labels/000833.png
360 | val_images/000834.png val_labels/000834.png
361 | val_images/000835.png val_labels/000835.png
362 | val_images/000836.png val_labels/000836.png
363 | val_images/000837.png val_labels/000837.png
364 | val_images/000838.png val_labels/000838.png
365 | val_images/000839.png val_labels/000839.png
366 | val_images/000840.png val_labels/000840.png
367 | val_images/000841.png val_labels/000841.png
368 | val_images/000842.png val_labels/000842.png
369 | val_images/000843.png val_labels/000843.png
370 | val_images/000844.png val_labels/000844.png
371 | val_images/000845.png val_labels/000845.png
372 | val_images/000846.png val_labels/000846.png
373 | val_images/000850.png val_labels/000850.png
374 | val_images/000851.png val_labels/000851.png
375 | val_images/000852.png val_labels/000852.png
376 | val_images/000857.png val_labels/000857.png
377 | val_images/000858.png val_labels/000858.png
378 | val_images/000859.png val_labels/000859.png
379 | val_images/000860.png val_labels/000860.png
380 | val_images/000861.png val_labels/000861.png
381 | val_images/000862.png val_labels/000862.png
382 | val_images/000869.png val_labels/000869.png
383 | val_images/000870.png val_labels/000870.png
384 | val_images/000871.png val_labels/000871.png
385 | val_images/000906.png val_labels/000906.png
386 | val_images/000907.png val_labels/000907.png
387 | val_images/000908.png val_labels/000908.png
388 | val_images/000917.png val_labels/000917.png
389 | val_images/000918.png val_labels/000918.png
390 | val_images/000919.png val_labels/000919.png
391 | val_images/000926.png val_labels/000926.png
392 | val_images/000927.png val_labels/000927.png
393 | val_images/000928.png val_labels/000928.png
394 | val_images/000932.png val_labels/000932.png
395 | val_images/000933.png val_labels/000933.png
396 | val_images/000934.png val_labels/000934.png
397 | val_images/000935.png val_labels/000935.png
398 | val_images/000945.png val_labels/000945.png
399 | val_images/000946.png val_labels/000946.png
400 | val_images/000947.png val_labels/000947.png
401 | val_images/000959.png val_labels/000959.png
402 | val_images/000960.png val_labels/000960.png
403 | val_images/000961.png val_labels/000961.png
404 | val_images/000962.png val_labels/000962.png
405 | val_images/000965.png val_labels/000965.png
406 | val_images/000966.png val_labels/000966.png
407 | val_images/000967.png val_labels/000967.png
408 | val_images/000970.png val_labels/000970.png
409 | val_images/000971.png val_labels/000971.png
410 | val_images/000972.png val_labels/000972.png
411 | val_images/000973.png val_labels/000973.png
412 | val_images/000974.png val_labels/000974.png
413 | val_images/000975.png val_labels/000975.png
414 | val_images/000976.png val_labels/000976.png
415 | val_images/000977.png val_labels/000977.png
416 | val_images/000991.png val_labels/000991.png
417 | val_images/000992.png val_labels/000992.png
418 | val_images/000993.png val_labels/000993.png
419 | val_images/000994.png val_labels/000994.png
420 | val_images/000995.png val_labels/000995.png
421 | val_images/001001.png val_labels/001001.png
422 | val_images/001002.png val_labels/001002.png
423 | val_images/001003.png val_labels/001003.png
424 | val_images/001004.png val_labels/001004.png
425 | val_images/001010.png val_labels/001010.png
426 | val_images/001011.png val_labels/001011.png
427 | val_images/001012.png val_labels/001012.png
428 | val_images/001021.png val_labels/001021.png
429 | val_images/001022.png val_labels/001022.png
430 | val_images/001023.png val_labels/001023.png
431 | val_images/001032.png val_labels/001032.png
432 | val_images/001033.png val_labels/001033.png
433 | val_images/001034.png val_labels/001034.png
434 | val_images/001038.png val_labels/001038.png
435 | val_images/001039.png val_labels/001039.png
436 | val_images/001048.png val_labels/001048.png
437 | val_images/001049.png val_labels/001049.png
438 | val_images/001052.png val_labels/001052.png
439 | val_images/001053.png val_labels/001053.png
440 | val_images/001057.png val_labels/001057.png
441 | val_images/001058.png val_labels/001058.png
442 | val_images/001075.png val_labels/001075.png
443 | val_images/001076.png val_labels/001076.png
444 | val_images/001077.png val_labels/001077.png
445 | val_images/001078.png val_labels/001078.png
446 | val_images/001079.png val_labels/001079.png
447 | val_images/001080.png val_labels/001080.png
448 | val_images/001081.png val_labels/001081.png
449 | val_images/001082.png val_labels/001082.png
450 | val_images/001083.png val_labels/001083.png
451 | val_images/001084.png val_labels/001084.png
452 | val_images/001088.png val_labels/001088.png
453 | val_images/001089.png val_labels/001089.png
454 | val_images/001090.png val_labels/001090.png
455 | val_images/001091.png val_labels/001091.png
456 | val_images/001092.png val_labels/001092.png
457 | val_images/001093.png val_labels/001093.png
458 | val_images/001094.png val_labels/001094.png
459 | val_images/001095.png val_labels/001095.png
460 | val_images/001096.png val_labels/001096.png
461 | val_images/001098.png val_labels/001098.png
462 | val_images/001099.png val_labels/001099.png
463 | val_images/001100.png val_labels/001100.png
464 | val_images/001101.png val_labels/001101.png
465 | val_images/001102.png val_labels/001102.png
466 | val_images/001103.png val_labels/001103.png
467 | val_images/001104.png val_labels/001104.png
468 | val_images/001106.png val_labels/001106.png
469 | val_images/001107.png val_labels/001107.png
470 | val_images/001108.png val_labels/001108.png
471 | val_images/001109.png val_labels/001109.png
472 | val_images/001117.png val_labels/001117.png
473 | val_images/001118.png val_labels/001118.png
474 | val_images/001119.png val_labels/001119.png
475 | val_images/001123.png val_labels/001123.png
476 | val_images/001124.png val_labels/001124.png
477 | val_images/001125.png val_labels/001125.png
478 | val_images/001126.png val_labels/001126.png
479 | val_images/001127.png val_labels/001127.png
480 | val_images/001128.png val_labels/001128.png
481 | val_images/001129.png val_labels/001129.png
482 | val_images/001130.png val_labels/001130.png
483 | val_images/001131.png val_labels/001131.png
484 | val_images/001135.png val_labels/001135.png
485 | val_images/001136.png val_labels/001136.png
486 | val_images/001144.png val_labels/001144.png
487 | val_images/001145.png val_labels/001145.png
488 | val_images/001146.png val_labels/001146.png
489 | val_images/001147.png val_labels/001147.png
490 | val_images/001148.png val_labels/001148.png
491 | val_images/001149.png val_labels/001149.png
492 | val_images/001150.png val_labels/001150.png
493 | val_images/001151.png val_labels/001151.png
494 | val_images/001152.png val_labels/001152.png
495 | val_images/001153.png val_labels/001153.png
496 | val_images/001154.png val_labels/001154.png
497 | val_images/001155.png val_labels/001155.png
498 | val_images/001156.png val_labels/001156.png
499 | val_images/001157.png val_labels/001157.png
500 | val_images/001158.png val_labels/001158.png
501 | val_images/001162.png val_labels/001162.png
502 | val_images/001163.png val_labels/001163.png
503 | val_images/001164.png val_labels/001164.png
504 | val_images/001165.png val_labels/001165.png
505 | val_images/001166.png val_labels/001166.png
506 | val_images/001167.png val_labels/001167.png
507 | val_images/001170.png val_labels/001170.png
508 | val_images/001171.png val_labels/001171.png
509 | val_images/001174.png val_labels/001174.png
510 | val_images/001175.png val_labels/001175.png
511 | val_images/001176.png val_labels/001176.png
512 | val_images/001179.png val_labels/001179.png
513 | val_images/001180.png val_labels/001180.png
514 | val_images/001181.png val_labels/001181.png
515 | val_images/001182.png val_labels/001182.png
516 | val_images/001183.png val_labels/001183.png
517 | val_images/001184.png val_labels/001184.png
518 | val_images/001192.png val_labels/001192.png
519 | val_images/001193.png val_labels/001193.png
520 | val_images/001194.png val_labels/001194.png
521 | val_images/001195.png val_labels/001195.png
522 | val_images/001196.png val_labels/001196.png
523 | val_images/001201.png val_labels/001201.png
524 | val_images/001202.png val_labels/001202.png
525 | val_images/001203.png val_labels/001203.png
526 | val_images/001204.png val_labels/001204.png
527 | val_images/001205.png val_labels/001205.png
528 | val_images/001206.png val_labels/001206.png
529 | val_images/001207.png val_labels/001207.png
530 | val_images/001208.png val_labels/001208.png
531 | val_images/001209.png val_labels/001209.png
532 | val_images/001210.png val_labels/001210.png
533 | val_images/001211.png val_labels/001211.png
534 | val_images/001212.png val_labels/001212.png
535 | val_images/001216.png val_labels/001216.png
536 | val_images/001217.png val_labels/001217.png
537 | val_images/001218.png val_labels/001218.png
538 | val_images/001219.png val_labels/001219.png
539 | val_images/001220.png val_labels/001220.png
540 | val_images/001226.png val_labels/001226.png
541 | val_images/001227.png val_labels/001227.png
542 | val_images/001228.png val_labels/001228.png
543 | val_images/001229.png val_labels/001229.png
544 | val_images/001230.png val_labels/001230.png
545 | val_images/001233.png val_labels/001233.png
546 | val_images/001234.png val_labels/001234.png
547 | val_images/001235.png val_labels/001235.png
548 | val_images/001247.png val_labels/001247.png
549 | val_images/001248.png val_labels/001248.png
550 | val_images/001249.png val_labels/001249.png
551 | val_images/001250.png val_labels/001250.png
552 | val_images/001254.png val_labels/001254.png
553 | val_images/001255.png val_labels/001255.png
554 | val_images/001256.png val_labels/001256.png
555 | val_images/001257.png val_labels/001257.png
556 | val_images/001258.png val_labels/001258.png
557 | val_images/001259.png val_labels/001259.png
558 | val_images/001260.png val_labels/001260.png
559 | val_images/001261.png val_labels/001261.png
560 | val_images/001262.png val_labels/001262.png
561 | val_images/001263.png val_labels/001263.png
562 | val_images/001264.png val_labels/001264.png
563 | val_images/001265.png val_labels/001265.png
564 | val_images/001275.png val_labels/001275.png
565 | val_images/001276.png val_labels/001276.png
566 | val_images/001277.png val_labels/001277.png
567 | val_images/001278.png val_labels/001278.png
568 | val_images/001279.png val_labels/001279.png
569 | val_images/001280.png val_labels/001280.png
570 | val_images/001285.png val_labels/001285.png
571 | val_images/001286.png val_labels/001286.png
572 | val_images/001287.png val_labels/001287.png
573 | val_images/001288.png val_labels/001288.png
574 | val_images/001289.png val_labels/001289.png
575 | val_images/001290.png val_labels/001290.png
576 | val_images/001291.png val_labels/001291.png
577 | val_images/001292.png val_labels/001292.png
578 | val_images/001293.png val_labels/001293.png
579 | val_images/001294.png val_labels/001294.png
580 | val_images/001295.png val_labels/001295.png
581 | val_images/001297.png val_labels/001297.png
582 | val_images/001298.png val_labels/001298.png
583 | val_images/001299.png val_labels/001299.png
584 | val_images/001302.png val_labels/001302.png
585 | val_images/001303.png val_labels/001303.png
586 | val_images/001304.png val_labels/001304.png
587 | val_images/001305.png val_labels/001305.png
588 | val_images/001306.png val_labels/001306.png
589 | val_images/001307.png val_labels/001307.png
590 | val_images/001308.png val_labels/001308.png
591 | val_images/001314.png val_labels/001314.png
592 | val_images/001315.png val_labels/001315.png
593 | val_images/001329.png val_labels/001329.png
594 | val_images/001330.png val_labels/001330.png
595 | val_images/001331.png val_labels/001331.png
596 | val_images/001332.png val_labels/001332.png
597 | val_images/001335.png val_labels/001335.png
598 | val_images/001336.png val_labels/001336.png
599 | val_images/001337.png val_labels/001337.png
600 | val_images/001338.png val_labels/001338.png
601 | val_images/001339.png val_labels/001339.png
602 | val_images/001340.png val_labels/001340.png
603 | val_images/001347.png val_labels/001347.png
604 | val_images/001348.png val_labels/001348.png
605 | val_images/001349.png val_labels/001349.png
606 | val_images/001353.png val_labels/001353.png
607 | val_images/001354.png val_labels/001354.png
608 | val_images/001355.png val_labels/001355.png
609 | val_images/001356.png val_labels/001356.png
610 | val_images/001364.png val_labels/001364.png
611 | val_images/001365.png val_labels/001365.png
612 | val_images/001368.png val_labels/001368.png
613 | val_images/001369.png val_labels/001369.png
614 | val_images/001384.png val_labels/001384.png
615 | val_images/001385.png val_labels/001385.png
616 | val_images/001386.png val_labels/001386.png
617 | val_images/001387.png val_labels/001387.png
618 | val_images/001388.png val_labels/001388.png
619 | val_images/001389.png val_labels/001389.png
620 | val_images/001390.png val_labels/001390.png
621 | val_images/001391.png val_labels/001391.png
622 | val_images/001394.png val_labels/001394.png
623 | val_images/001395.png val_labels/001395.png
624 | val_images/001396.png val_labels/001396.png
625 | val_images/001397.png val_labels/001397.png
626 | val_images/001398.png val_labels/001398.png
627 | val_images/001399.png val_labels/001399.png
628 | val_images/001400.png val_labels/001400.png
629 | val_images/001401.png val_labels/001401.png
630 | val_images/001407.png val_labels/001407.png
631 | val_images/001408.png val_labels/001408.png
632 | val_images/001409.png val_labels/001409.png
633 | val_images/001410.png val_labels/001410.png
634 | val_images/001411.png val_labels/001411.png
635 | val_images/001412.png val_labels/001412.png
636 | val_images/001413.png val_labels/001413.png
637 | val_images/001414.png val_labels/001414.png
638 | val_images/001421.png val_labels/001421.png
639 | val_images/001422.png val_labels/001422.png
640 | val_images/001423.png val_labels/001423.png
641 | val_images/001424.png val_labels/001424.png
642 | val_images/001430.png val_labels/001430.png
643 | val_images/001431.png val_labels/001431.png
644 | val_images/001432.png val_labels/001432.png
645 | val_images/001433.png val_labels/001433.png
646 | val_images/001441.png val_labels/001441.png
647 | val_images/001442.png val_labels/001442.png
648 | val_images/001443.png val_labels/001443.png
649 | val_images/001444.png val_labels/001444.png
650 | val_images/001445.png val_labels/001445.png
651 | val_images/001446.png val_labels/001446.png
652 | val_images/001447.png val_labels/001447.png
653 | val_images/001448.png val_labels/001448.png
654 | val_images/001449.png val_labels/001449.png
655 |
--------------------------------------------------------------------------------
/data/val.parking:
--------------------------------------------------------------------------------
1 | val_images/0.png val_labels/0.png
2 | val_images/1.png val_labels/1.png
3 | val_images/2.png val_labels/2.png
4 | val_images/3.png val_labels/3.png
5 | val_images/4.png val_labels/4.png
6 | val_images/5.png val_labels/5.png
7 | val_images/6.png val_labels/6.png
8 | val_images/7.png val_labels/7.png
9 | val_images/8.png val_labels/8.png
10 | val_images/9.png val_labels/9.png
11 | val_images/10.png val_labels/10.png
12 | val_images/11.png val_labels/11.png
13 | val_images/12.png val_labels/12.png
14 | val_images/13.png val_labels/13.png
15 | val_images/14.png val_labels/14.png
16 | val_images/15.png val_labels/15.png
17 | val_images/16.png val_labels/16.png
18 | val_images/17.png val_labels/17.png
19 | val_images/18.png val_labels/18.png
20 | val_images/19.png val_labels/19.png
21 | val_images/20.png val_labels/20.png
22 | val_images/21.png val_labels/21.png
23 | val_images/22.png val_labels/22.png
24 | val_images/23.png val_labels/23.png
25 | val_images/24.png val_labels/24.png
26 | val_images/25.png val_labels/25.png
27 | val_images/26.png val_labels/26.png
28 | val_images/27.png val_labels/27.png
29 | val_images/28.png val_labels/28.png
30 | val_images/29.png val_labels/29.png
31 | val_images/30.png val_labels/30.png
32 | val_images/31.png val_labels/31.png
33 | val_images/32.png val_labels/32.png
34 | val_images/33.png val_labels/33.png
35 | val_images/34.png val_labels/34.png
36 | val_images/35.png val_labels/35.png
37 | val_images/36.png val_labels/36.png
38 | val_images/37.png val_labels/37.png
39 | val_images/38.png val_labels/38.png
40 | val_images/39.png val_labels/39.png
41 | val_images/40.png val_labels/40.png
42 | val_images/41.png val_labels/41.png
43 | val_images/42.png val_labels/42.png
44 | val_images/43.png val_labels/43.png
45 | val_images/44.png val_labels/44.png
46 | val_images/45.png val_labels/45.png
47 | val_images/46.png val_labels/46.png
48 | val_images/47.png val_labels/47.png
49 | val_images/48.png val_labels/48.png
50 | val_images/49.png val_labels/49.png
51 | val_images/50.png val_labels/50.png
52 | val_images/51.png val_labels/51.png
53 | val_images/52.png val_labels/52.png
54 | val_images/53.png val_labels/53.png
55 | val_images/54.png val_labels/54.png
56 | val_images/55.png val_labels/55.png
57 | val_images/56.png val_labels/56.png
58 | val_images/57.png val_labels/57.png
59 | val_images/58.png val_labels/58.png
60 | val_images/59.png val_labels/59.png
61 | val_images/60.png val_labels/60.png
62 | val_images/61.png val_labels/61.png
63 | val_images/62.png val_labels/62.png
64 | val_images/63.png val_labels/63.png
65 | val_images/64.png val_labels/64.png
66 | val_images/65.png val_labels/65.png
67 | val_images/66.png val_labels/66.png
68 | val_images/67.png val_labels/67.png
69 | val_images/68.png val_labels/68.png
70 | val_images/69.png val_labels/69.png
71 | val_images/70.png val_labels/70.png
72 | val_images/71.png val_labels/71.png
73 | val_images/72.png val_labels/72.png
74 | val_images/73.png val_labels/73.png
75 | val_images/74.png val_labels/74.png
76 | val_images/75.png val_labels/75.png
77 | val_images/76.png val_labels/76.png
78 | val_images/77.png val_labels/77.png
79 | val_images/78.png val_labels/78.png
80 | val_images/79.png val_labels/79.png
81 | val_images/80.png val_labels/80.png
82 | val_images/81.png val_labels/81.png
83 | val_images/82.png val_labels/82.png
84 | val_images/83.png val_labels/83.png
85 | val_images/84.png val_labels/84.png
86 | val_images/85.png val_labels/85.png
87 | val_images/86.png val_labels/86.png
88 | val_images/87.png val_labels/87.png
89 | val_images/88.png val_labels/88.png
90 | val_images/89.png val_labels/89.png
91 | val_images/90.png val_labels/90.png
92 | val_images/91.png val_labels/91.png
93 | val_images/92.png val_labels/92.png
94 | val_images/93.png val_labels/93.png
95 | val_images/94.png val_labels/94.png
96 | val_images/95.png val_labels/95.png
97 | val_images/96.png val_labels/96.png
98 | val_images/97.png val_labels/97.png
99 | val_images/98.png val_labels/98.png
100 | val_images/99.png val_labels/99.png
101 | val_images/100.png val_labels/100.png
102 | val_images/101.png val_labels/101.png
103 | val_images/102.png val_labels/102.png
104 | val_images/103.png val_labels/103.png
105 | val_images/104.png val_labels/104.png
106 | val_images/105.png val_labels/105.png
107 | val_images/106.png val_labels/106.png
108 | val_images/107.png val_labels/107.png
109 | val_images/108.png val_labels/108.png
110 | val_images/109.png val_labels/109.png
111 | val_images/110.png val_labels/110.png
112 | val_images/111.png val_labels/111.png
113 | val_images/112.png val_labels/112.png
114 | val_images/113.png val_labels/113.png
115 | val_images/114.png val_labels/114.png
116 | val_images/115.png val_labels/115.png
117 | val_images/116.png val_labels/116.png
118 | val_images/117.png val_labels/117.png
119 | val_images/118.png val_labels/118.png
120 | val_images/119.png val_labels/119.png
121 | val_images/120.png val_labels/120.png
122 | val_images/121.png val_labels/121.png
123 | val_images/122.png val_labels/122.png
124 | val_images/123.png val_labels/123.png
125 | val_images/124.png val_labels/124.png
126 | val_images/125.png val_labels/125.png
127 | val_images/126.png val_labels/126.png
128 | val_images/127.png val_labels/127.png
129 | val_images/128.png val_labels/128.png
130 | val_images/129.png val_labels/129.png
131 | val_images/130.png val_labels/130.png
132 | val_images/131.png val_labels/131.png
133 | val_images/132.png val_labels/132.png
134 | val_images/133.png val_labels/133.png
135 | val_images/134.png val_labels/134.png
136 | val_images/135.png val_labels/135.png
137 | val_images/136.png val_labels/136.png
138 | val_images/137.png val_labels/137.png
139 | val_images/138.png val_labels/138.png
140 | val_images/139.png val_labels/139.png
141 | val_images/140.png val_labels/140.png
142 | val_images/141.png val_labels/141.png
143 | val_images/142.png val_labels/142.png
144 | val_images/143.png val_labels/143.png
145 | val_images/144.png val_labels/144.png
146 | val_images/145.png val_labels/145.png
147 | val_images/146.png val_labels/146.png
148 | val_images/147.png val_labels/147.png
149 | val_images/148.png val_labels/148.png
150 | val_images/149.png val_labels/149.png
151 | val_images/150.png val_labels/150.png
152 | val_images/151.png val_labels/151.png
153 | val_images/152.png val_labels/152.png
154 | val_images/153.png val_labels/153.png
155 | val_images/154.png val_labels/154.png
156 | val_images/155.png val_labels/155.png
157 | val_images/156.png val_labels/156.png
158 | val_images/157.png val_labels/157.png
159 | val_images/158.png val_labels/158.png
160 | val_images/159.png val_labels/159.png
161 | val_images/160.png val_labels/160.png
162 | val_images/161.png val_labels/161.png
163 | val_images/162.png val_labels/162.png
164 | val_images/163.png val_labels/163.png
165 | val_images/164.png val_labels/164.png
166 | val_images/165.png val_labels/165.png
167 | val_images/166.png val_labels/166.png
168 | val_images/167.png val_labels/167.png
169 | val_images/168.png val_labels/168.png
170 | val_images/169.png val_labels/169.png
171 | val_images/170.png val_labels/170.png
172 | val_images/171.png val_labels/171.png
173 | val_images/172.png val_labels/172.png
174 | val_images/173.png val_labels/173.png
175 | val_images/174.png val_labels/174.png
176 | val_images/175.png val_labels/175.png
177 | val_images/176.png val_labels/176.png
178 | val_images/177.png val_labels/177.png
179 | val_images/178.png val_labels/178.png
180 | val_images/179.png val_labels/179.png
181 | val_images/180.png val_labels/180.png
182 | val_images/181.png val_labels/181.png
183 | val_images/182.png val_labels/182.png
184 | val_images/183.png val_labels/183.png
185 | val_images/184.png val_labels/184.png
186 | val_images/185.png val_labels/185.png
187 | val_images/186.png val_labels/186.png
188 | val_images/187.png val_labels/187.png
189 | val_images/188.png val_labels/188.png
190 | val_images/189.png val_labels/189.png
191 | val_images/190.png val_labels/190.png
192 | val_images/191.png val_labels/191.png
193 | val_images/192.png val_labels/192.png
194 | val_images/193.png val_labels/193.png
195 | val_images/194.png val_labels/194.png
196 | val_images/195.png val_labels/195.png
197 | val_images/196.png val_labels/196.png
198 | val_images/197.png val_labels/197.png
199 | val_images/198.png val_labels/198.png
200 | val_images/199.png val_labels/199.png
201 | val_images/200.png val_labels/200.png
202 | val_images/201.png val_labels/201.png
203 | val_images/202.png val_labels/202.png
204 | val_images/203.png val_labels/203.png
205 | val_images/204.png val_labels/204.png
206 | val_images/205.png val_labels/205.png
207 | val_images/206.png val_labels/206.png
208 | val_images/207.png val_labels/207.png
209 | val_images/208.png val_labels/208.png
210 | val_images/209.png val_labels/209.png
211 | val_images/210.png val_labels/210.png
212 | val_images/211.png val_labels/211.png
213 | val_images/212.png val_labels/212.png
214 | val_images/213.png val_labels/213.png
215 | val_images/214.png val_labels/214.png
216 | val_images/215.png val_labels/215.png
217 | val_images/216.png val_labels/216.png
218 | val_images/217.png val_labels/217.png
219 | val_images/218.png val_labels/218.png
220 | val_images/219.png val_labels/219.png
221 | val_images/220.png val_labels/220.png
222 | val_images/221.png val_labels/221.png
223 | val_images/222.png val_labels/222.png
224 | val_images/223.png val_labels/223.png
225 | val_images/224.png val_labels/224.png
226 | val_images/225.png val_labels/225.png
227 | val_images/226.png val_labels/226.png
228 | val_images/227.png val_labels/227.png
229 | val_images/228.png val_labels/228.png
230 | val_images/229.png val_labels/229.png
231 | val_images/230.png val_labels/230.png
232 | val_images/231.png val_labels/231.png
233 | val_images/232.png val_labels/232.png
234 | val_images/233.png val_labels/233.png
235 | val_images/234.png val_labels/234.png
236 | val_images/235.png val_labels/235.png
237 | val_images/236.png val_labels/236.png
238 | val_images/237.png val_labels/237.png
239 | val_images/238.png val_labels/238.png
240 | val_images/239.png val_labels/239.png
241 | val_images/240.png val_labels/240.png
242 | val_images/241.png val_labels/241.png
243 | val_images/242.png val_labels/242.png
244 | val_images/243.png val_labels/243.png
245 | val_images/244.png val_labels/244.png
246 | val_images/245.png val_labels/245.png
247 | val_images/246.png val_labels/246.png
248 | val_images/247.png val_labels/247.png
249 | val_images/248.png val_labels/248.png
250 | val_images/249.png val_labels/249.png
251 | val_images/250.png val_labels/250.png
252 | val_images/251.png val_labels/251.png
253 | val_images/252.png val_labels/252.png
254 | val_images/253.png val_labels/253.png
255 | val_images/254.png val_labels/254.png
256 | val_images/255.png val_labels/255.png
257 | val_images/256.png val_labels/256.png
258 | val_images/257.png val_labels/257.png
259 | val_images/258.png val_labels/258.png
260 | val_images/259.png val_labels/259.png
261 | val_images/260.png val_labels/260.png
262 | val_images/261.png val_labels/261.png
263 | val_images/262.png val_labels/262.png
264 | val_images/263.png val_labels/263.png
265 | val_images/264.png val_labels/264.png
266 | val_images/265.png val_labels/265.png
267 | val_images/266.png val_labels/266.png
268 | val_images/267.png val_labels/267.png
269 | val_images/268.png val_labels/268.png
270 | val_images/269.png val_labels/269.png
271 | val_images/270.png val_labels/270.png
272 | val_images/271.png val_labels/271.png
273 | val_images/272.png val_labels/272.png
274 | val_images/273.png val_labels/273.png
275 | val_images/274.png val_labels/274.png
276 | val_images/275.png val_labels/275.png
277 | val_images/276.png val_labels/276.png
278 | val_images/277.png val_labels/277.png
279 | val_images/278.png val_labels/278.png
280 | val_images/279.png val_labels/279.png
281 | val_images/280.png val_labels/280.png
282 | val_images/281.png val_labels/281.png
283 | val_images/282.png val_labels/282.png
284 | val_images/283.png val_labels/283.png
285 | val_images/284.png val_labels/284.png
286 | val_images/285.png val_labels/285.png
287 | val_images/286.png val_labels/286.png
288 | val_images/287.png val_labels/287.png
289 | val_images/288.png val_labels/288.png
290 | val_images/289.png val_labels/289.png
291 | val_images/290.png val_labels/290.png
292 | val_images/291.png val_labels/291.png
293 | val_images/292.png val_labels/292.png
294 | val_images/293.png val_labels/293.png
295 | val_images/294.png val_labels/294.png
296 | val_images/295.png val_labels/295.png
297 | val_images/296.png val_labels/296.png
298 | val_images/297.png val_labels/297.png
299 | val_images/298.png val_labels/298.png
300 | val_images/299.png val_labels/299.png
301 | val_images/300.png val_labels/300.png
302 | val_images/301.png val_labels/301.png
303 | val_images/302.png val_labels/302.png
304 | val_images/303.png val_labels/303.png
305 | val_images/304.png val_labels/304.png
306 | val_images/305.png val_labels/305.png
307 | val_images/306.png val_labels/306.png
308 | val_images/307.png val_labels/307.png
309 | val_images/308.png val_labels/308.png
310 | val_images/309.png val_labels/309.png
311 | val_images/310.png val_labels/310.png
312 | val_images/311.png val_labels/311.png
313 | val_images/312.png val_labels/312.png
314 | val_images/313.png val_labels/313.png
315 | val_images/314.png val_labels/314.png
316 | val_images/315.png val_labels/315.png
317 | val_images/316.png val_labels/316.png
318 | val_images/317.png val_labels/317.png
319 | val_images/318.png val_labels/318.png
320 | val_images/319.png val_labels/319.png
321 | val_images/320.png val_labels/320.png
322 | val_images/321.png val_labels/321.png
323 | val_images/322.png val_labels/322.png
324 | val_images/323.png val_labels/323.png
325 | val_images/324.png val_labels/324.png
326 | val_images/325.png val_labels/325.png
327 | val_images/326.png val_labels/326.png
328 | val_images/327.png val_labels/327.png
329 | val_images/328.png val_labels/328.png
330 | val_images/329.png val_labels/329.png
331 | val_images/330.png val_labels/330.png
332 | val_images/331.png val_labels/331.png
333 | val_images/332.png val_labels/332.png
334 | val_images/333.png val_labels/333.png
335 | val_images/334.png val_labels/334.png
336 | val_images/335.png val_labels/335.png
337 | val_images/336.png val_labels/336.png
338 | val_images/337.png val_labels/337.png
339 | val_images/338.png val_labels/338.png
340 | val_images/339.png val_labels/339.png
341 | val_images/340.png val_labels/340.png
342 | val_images/341.png val_labels/341.png
343 | val_images/342.png val_labels/342.png
344 | val_images/343.png val_labels/343.png
345 | val_images/344.png val_labels/344.png
346 | val_images/345.png val_labels/345.png
347 | val_images/346.png val_labels/346.png
348 | val_images/347.png val_labels/347.png
349 | val_images/348.png val_labels/348.png
350 | val_images/349.png val_labels/349.png
351 | val_images/350.png val_labels/350.png
352 | val_images/351.png val_labels/351.png
353 | val_images/352.png val_labels/352.png
354 | val_images/353.png val_labels/353.png
355 | val_images/354.png val_labels/354.png
356 | val_images/355.png val_labels/355.png
357 | val_images/356.png val_labels/356.png
358 | val_images/357.png val_labels/357.png
359 | val_images/358.png val_labels/358.png
360 | val_images/359.png val_labels/359.png
361 | val_images/360.png val_labels/360.png
362 | val_images/361.png val_labels/361.png
363 | val_images/362.png val_labels/362.png
364 | val_images/363.png val_labels/363.png
365 | val_images/364.png val_labels/364.png
366 | val_images/365.png val_labels/365.png
367 | val_images/366.png val_labels/366.png
368 | val_images/367.png val_labels/367.png
369 | val_images/368.png val_labels/368.png
370 | val_images/369.png val_labels/369.png
371 | val_images/370.png val_labels/370.png
372 | val_images/371.png val_labels/371.png
373 | val_images/372.png val_labels/372.png
374 | val_images/373.png val_labels/373.png
375 | val_images/374.png val_labels/374.png
376 | val_images/375.png val_labels/375.png
377 | val_images/376.png val_labels/376.png
378 | val_images/377.png val_labels/377.png
379 | val_images/378.png val_labels/378.png
380 | val_images/379.png val_labels/379.png
381 | val_images/380.png val_labels/380.png
382 | val_images/381.png val_labels/381.png
383 | val_images/382.png val_labels/382.png
384 | val_images/383.png val_labels/383.png
385 | val_images/384.png val_labels/384.png
386 | val_images/385.png val_labels/385.png
387 | val_images/386.png val_labels/386.png
388 | val_images/387.png val_labels/387.png
389 | val_images/388.png val_labels/388.png
390 | val_images/389.png val_labels/389.png
391 | val_images/390.png val_labels/390.png
392 | val_images/391.png val_labels/391.png
393 | val_images/392.png val_labels/392.png
394 | val_images/393.png val_labels/393.png
395 | val_images/394.png val_labels/394.png
396 | val_images/395.png val_labels/395.png
397 | val_images/396.png val_labels/396.png
398 | val_images/397.png val_labels/397.png
399 | val_images/398.png val_labels/398.png
400 | val_images/399.png val_labels/399.png
401 | val_images/400.png val_labels/400.png
402 | val_images/401.png val_labels/401.png
403 | val_images/402.png val_labels/402.png
404 | val_images/403.png val_labels/403.png
405 | val_images/404.png val_labels/404.png
406 | val_images/405.png val_labels/405.png
407 | val_images/406.png val_labels/406.png
408 | val_images/407.png val_labels/407.png
409 | val_images/408.png val_labels/408.png
410 | val_images/409.png val_labels/409.png
411 | val_images/410.png val_labels/410.png
412 | val_images/411.png val_labels/411.png
413 | val_images/412.png val_labels/412.png
414 | val_images/413.png val_labels/413.png
415 | val_images/414.png val_labels/414.png
416 | val_images/415.png val_labels/415.png
417 | val_images/416.png val_labels/416.png
418 | val_images/417.png val_labels/417.png
419 | val_images/418.png val_labels/418.png
420 | val_images/419.png val_labels/419.png
421 | val_images/420.png val_labels/420.png
422 | val_images/421.png val_labels/421.png
423 | val_images/422.png val_labels/422.png
424 | val_images/423.png val_labels/423.png
425 | val_images/424.png val_labels/424.png
426 | val_images/425.png val_labels/425.png
427 | val_images/426.png val_labels/426.png
428 | val_images/427.png val_labels/427.png
429 | val_images/428.png val_labels/428.png
430 | val_images/429.png val_labels/429.png
431 | val_images/430.png val_labels/430.png
432 | val_images/431.png val_labels/431.png
433 | val_images/432.png val_labels/432.png
434 | val_images/433.png val_labels/433.png
435 | val_images/434.png val_labels/434.png
436 | val_images/435.png val_labels/435.png
437 | val_images/436.png val_labels/436.png
438 | val_images/437.png val_labels/437.png
439 | val_images/438.png val_labels/438.png
440 | val_images/439.png val_labels/439.png
441 | val_images/440.png val_labels/440.png
442 | val_images/441.png val_labels/441.png
443 | val_images/442.png val_labels/442.png
444 | val_images/443.png val_labels/443.png
445 | val_images/444.png val_labels/444.png
446 | val_images/445.png val_labels/445.png
447 | val_images/446.png val_labels/446.png
448 | val_images/447.png val_labels/447.png
449 | val_images/448.png val_labels/448.png
450 | val_images/449.png val_labels/449.png
451 | val_images/450.png val_labels/450.png
452 | val_images/451.png val_labels/451.png
453 | val_images/452.png val_labels/452.png
454 | val_images/453.png val_labels/453.png
455 | val_images/454.png val_labels/454.png
456 | val_images/455.png val_labels/455.png
457 | val_images/456.png val_labels/456.png
458 | val_images/457.png val_labels/457.png
459 | val_images/458.png val_labels/458.png
460 | val_images/459.png val_labels/459.png
461 | val_images/460.png val_labels/460.png
462 | val_images/461.png val_labels/461.png
463 | val_images/462.png val_labels/462.png
464 | val_images/463.png val_labels/463.png
465 | val_images/464.png val_labels/464.png
466 | val_images/465.png val_labels/465.png
467 | val_images/466.png val_labels/466.png
468 | val_images/467.png val_labels/467.png
469 | val_images/468.png val_labels/468.png
470 | val_images/469.png val_labels/469.png
471 | val_images/470.png val_labels/470.png
472 | val_images/471.png val_labels/471.png
473 | val_images/472.png val_labels/472.png
474 | val_images/473.png val_labels/473.png
475 | val_images/474.png val_labels/474.png
476 | val_images/475.png val_labels/475.png
477 | val_images/476.png val_labels/476.png
478 | val_images/477.png val_labels/477.png
479 | val_images/478.png val_labels/478.png
480 | val_images/479.png val_labels/479.png
481 | val_images/480.png val_labels/480.png
482 | val_images/481.png val_labels/481.png
483 | val_images/482.png val_labels/482.png
484 | val_images/483.png val_labels/483.png
485 | val_images/484.png val_labels/484.png
486 | val_images/485.png val_labels/485.png
487 | val_images/486.png val_labels/486.png
488 | val_images/487.png val_labels/487.png
489 | val_images/488.png val_labels/488.png
490 | val_images/489.png val_labels/489.png
491 | val_images/490.png val_labels/490.png
492 | val_images/491.png val_labels/491.png
493 | val_images/492.png val_labels/492.png
494 | val_images/493.png val_labels/493.png
495 | val_images/494.png val_labels/494.png
496 | val_images/495.png val_labels/495.png
497 | val_images/496.png val_labels/496.png
498 | val_images/497.png val_labels/497.png
499 | val_images/498.png val_labels/498.png
500 | val_images/499.png val_labels/499.png
501 | val_images/500.png val_labels/500.png
502 | val_images/501.png val_labels/501.png
503 | val_images/502.png val_labels/502.png
504 | val_images/503.png val_labels/503.png
505 | val_images/504.png val_labels/504.png
506 | val_images/505.png val_labels/505.png
507 | val_images/506.png val_labels/506.png
508 | val_images/507.png val_labels/507.png
509 | val_images/508.png val_labels/508.png
510 | val_images/509.png val_labels/509.png
511 | val_images/510.png val_labels/510.png
512 | val_images/511.png val_labels/511.png
513 | val_images/512.png val_labels/512.png
514 | val_images/513.png val_labels/513.png
515 | val_images/514.png val_labels/514.png
516 | val_images/515.png val_labels/515.png
517 | val_images/516.png val_labels/516.png
518 | val_images/517.png val_labels/517.png
519 | val_images/518.png val_labels/518.png
520 | val_images/519.png val_labels/519.png
521 | val_images/520.png val_labels/520.png
522 | val_images/521.png val_labels/521.png
523 | val_images/522.png val_labels/522.png
524 | val_images/523.png val_labels/523.png
525 | val_images/524.png val_labels/524.png
526 | val_images/525.png val_labels/525.png
527 | val_images/526.png val_labels/526.png
528 | val_images/527.png val_labels/527.png
529 | val_images/528.png val_labels/528.png
530 | val_images/529.png val_labels/529.png
531 | val_images/530.png val_labels/530.png
532 | val_images/531.png val_labels/531.png
533 | val_images/532.png val_labels/532.png
534 | val_images/533.png val_labels/533.png
535 | val_images/534.png val_labels/534.png
536 | val_images/535.png val_labels/535.png
537 | val_images/536.png val_labels/536.png
538 | val_images/537.png val_labels/537.png
539 | val_images/538.png val_labels/538.png
540 | val_images/539.png val_labels/539.png
541 | val_images/540.png val_labels/540.png
542 | val_images/541.png val_labels/541.png
543 | val_images/542.png val_labels/542.png
544 | val_images/543.png val_labels/543.png
545 | val_images/544.png val_labels/544.png
546 | val_images/545.png val_labels/545.png
547 | val_images/546.png val_labels/546.png
548 | val_images/547.png val_labels/547.png
549 | val_images/548.png val_labels/548.png
550 | val_images/549.png val_labels/549.png
551 | val_images/550.png val_labels/550.png
552 | val_images/551.png val_labels/551.png
553 | val_images/552.png val_labels/552.png
554 | val_images/553.png val_labels/553.png
555 | val_images/554.png val_labels/554.png
556 | val_images/555.png val_labels/555.png
557 | val_images/556.png val_labels/556.png
558 | val_images/557.png val_labels/557.png
559 | val_images/558.png val_labels/558.png
560 | val_images/559.png val_labels/559.png
561 | val_images/560.png val_labels/560.png
562 | val_images/561.png val_labels/561.png
563 | val_images/562.png val_labels/562.png
564 | val_images/563.png val_labels/563.png
565 | val_images/564.png val_labels/564.png
566 | val_images/565.png val_labels/565.png
567 | val_images/566.png val_labels/566.png
568 | val_images/567.png val_labels/567.png
569 | val_images/568.png val_labels/568.png
570 | val_images/569.png val_labels/569.png
571 | val_images/570.png val_labels/570.png
572 | val_images/571.png val_labels/571.png
573 | val_images/572.png val_labels/572.png
574 | val_images/573.png val_labels/573.png
575 | val_images/574.png val_labels/574.png
576 | val_images/575.png val_labels/575.png
577 | val_images/576.png val_labels/576.png
578 | val_images/577.png val_labels/577.png
579 | val_images/578.png val_labels/578.png
580 | val_images/579.png val_labels/579.png
581 | val_images/580.png val_labels/580.png
582 | val_images/581.png val_labels/581.png
583 | val_images/582.png val_labels/582.png
584 | val_images/583.png val_labels/583.png
585 | val_images/584.png val_labels/584.png
586 | val_images/585.png val_labels/585.png
587 | val_images/586.png val_labels/586.png
588 | val_images/587.png val_labels/587.png
589 | val_images/588.png val_labels/588.png
590 | val_images/589.png val_labels/589.png
591 | val_images/590.png val_labels/590.png
592 | val_images/591.png val_labels/591.png
593 | val_images/592.png val_labels/592.png
594 | val_images/593.png val_labels/593.png
595 | val_images/594.png val_labels/594.png
596 | val_images/595.png val_labels/595.png
597 | val_images/596.png val_labels/596.png
598 | val_images/597.png val_labels/597.png
599 | val_images/598.png val_labels/598.png
600 | val_images/599.png val_labels/599.png
601 | val_images/600.png val_labels/600.png
602 | val_images/601.png val_labels/601.png
603 | val_images/602.png val_labels/602.png
604 | val_images/603.png val_labels/603.png
605 | val_images/604.png val_labels/604.png
606 | val_images/605.png val_labels/605.png
607 | val_images/606.png val_labels/606.png
608 | val_images/607.png val_labels/607.png
609 | val_images/608.png val_labels/608.png
610 | val_images/609.png val_labels/609.png
611 | val_images/610.png val_labels/610.png
612 | val_images/611.png val_labels/611.png
613 | val_images/612.png val_labels/612.png
614 | val_images/613.png val_labels/613.png
615 | val_images/614.png val_labels/614.png
616 | val_images/615.png val_labels/615.png
617 | val_images/616.png val_labels/616.png
618 | val_images/617.png val_labels/617.png
619 | val_images/618.png val_labels/618.png
620 | val_images/619.png val_labels/619.png
621 | val_images/620.png val_labels/620.png
622 | val_images/621.png val_labels/621.png
623 | val_images/622.png val_labels/622.png
624 | val_images/623.png val_labels/623.png
625 | val_images/624.png val_labels/624.png
626 | val_images/625.png val_labels/625.png
627 | val_images/626.png val_labels/626.png
628 | val_images/627.png val_labels/627.png
629 | val_images/628.png val_labels/628.png
630 | val_images/629.png val_labels/629.png
631 | val_images/630.png val_labels/630.png
632 | val_images/631.png val_labels/631.png
633 | val_images/632.png val_labels/632.png
634 | val_images/633.png val_labels/633.png
635 | val_images/634.png val_labels/634.png
636 | val_images/635.png val_labels/635.png
637 | val_images/636.png val_labels/636.png
638 | val_images/637.png val_labels/637.png
639 |
--------------------------------------------------------------------------------
/image/face_seg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/midasklr/RefineNet/cf000a45e9b2285eed54fe11465bfde0639f2e2d/image/face_seg.jpg
--------------------------------------------------------------------------------
/image/face_seg3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/midasklr/RefineNet/cf000a45e9b2285eed54fe11465bfde0639f2e2d/image/face_seg3.jpg
--------------------------------------------------------------------------------
/models/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/midasklr/RefineNet/cf000a45e9b2285eed54fe11465bfde0639f2e2d/models/__init__.py
--------------------------------------------------------------------------------
/models/mobilenet.py:
--------------------------------------------------------------------------------
1 | """RefineNet-LightWeight
2 |
3 | RefineNet-LigthWeight PyTorch for non-commercial purposes
4 |
5 | Copyright (c) 2018, Vladimir Nekrasov (vladimir.nekrasov@adelaide.edu.au)
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 |
11 | * Redistributions of source code must retain the above copyright notice, this
12 | list of conditions and the following disclaimer.
13 |
14 | * Redistributions in binary form must reproduce the above copyright notice,
15 | this list of conditions and the following disclaimer in the documentation
16 | and/or other materials provided with the distribution.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | """
29 |
30 | import torch.nn as nn
31 |
32 | from utils.helpers import maybe_download
33 | from utils.layer_factory import conv1x1, conv3x3, convbnrelu, CRPBlock
34 |
35 |
36 | data_info = {21: "VOC"}
37 |
38 | models_urls = {
39 | "mbv2_voc": "https://cloudstor.aarnet.edu.au/plus/s/nQ6wDnTEFhyidot/download",
40 | "mbv2_imagenet": "https://cloudstor.aarnet.edu.au/plus/s/uRgFbkaRjD3qOg5/download",
41 | }
42 |
43 |
44 | class InvertedResidualBlock(nn.Module):
45 | """Inverted Residual Block from https://arxiv.org/abs/1801.04381"""
46 |
47 | def __init__(self, in_planes, out_planes, expansion_factor, stride=1):
48 | super(InvertedResidualBlock, self).__init__()
49 | intermed_planes = in_planes * expansion_factor
50 | self.residual = (in_planes == out_planes) and (stride == 1)
51 | self.output = nn.Sequential(
52 | convbnrelu(in_planes, intermed_planes, 1),
53 | convbnrelu(
54 | intermed_planes,
55 | intermed_planes,
56 | 3,
57 | stride=stride,
58 | groups=intermed_planes,
59 | ),
60 | convbnrelu(intermed_planes, out_planes, 1, act=False),
61 | )
62 |
63 | def forward(self, x):
64 | residual = x
65 | out = self.output(x)
66 | if self.residual:
67 | return out + residual
68 | else:
69 | return out
70 |
71 |
72 | class MBv2(nn.Module):
73 | """Net Definition"""
74 |
75 | mobilenet_config = [
76 | [1, 16, 1, 1], # expansion rate, output channels, number of repeats, stride
77 | [6, 24, 2, 2],
78 | [6, 32, 3, 2],
79 | [6, 64, 4, 2],
80 | [6, 96, 3, 1],
81 | [6, 160, 3, 2],
82 | [6, 320, 1, 1],
83 | ]
84 | in_planes = 32 # number of input channels
85 | num_layers = len(mobilenet_config)
86 |
87 | def __init__(self, num_classes):
88 | super(MBv2, self).__init__()
89 |
90 | self.layer1 = convbnrelu(3, self.in_planes, kernel_size=3, stride=2)
91 | c_layer = 2
92 | for t, c, n, s in self.mobilenet_config:
93 | layers = []
94 | for idx in range(n):
95 | layers.append(
96 | InvertedResidualBlock(
97 | self.in_planes,
98 | c,
99 | expansion_factor=t,
100 | stride=s if idx == 0 else 1,
101 | )
102 | )
103 | self.in_planes = c
104 | setattr(self, "layer{}".format(c_layer), nn.Sequential(*layers))
105 | c_layer += 1
106 |
107 | ## Light-Weight RefineNet ##
108 | self.conv8 = conv1x1(320, 256, bias=False)
109 | self.conv7 = conv1x1(160, 256, bias=False)
110 | self.conv6 = conv1x1(96, 256, bias=False)
111 | self.conv5 = conv1x1(64, 256, bias=False)
112 | self.conv4 = conv1x1(32, 256, bias=False)
113 | self.conv3 = conv1x1(24, 256, bias=False)
114 | self.crp4 = self._make_crp(256, 256, 4)
115 | self.crp3 = self._make_crp(256, 256, 4)
116 | self.crp2 = self._make_crp(256, 256, 4)
117 | self.crp1 = self._make_crp(256, 256, 4)
118 |
119 | self.conv_adapt4 = conv1x1(256, 256, bias=False)
120 | self.conv_adapt3 = conv1x1(256, 256, bias=False)
121 | self.conv_adapt2 = conv1x1(256, 256, bias=False)
122 |
123 | self.segm = conv3x3(256, num_classes, bias=True)
124 | self.relu = nn.ReLU6(inplace=True)
125 |
126 | def forward(self, x):
127 | x = self.layer1(x)
128 | x = self.layer2(x) # x / 2
129 | l3 = self.layer3(x) # 24, x / 4
130 | l4 = self.layer4(l3) # 32, x / 8
131 | l5 = self.layer5(l4) # 64, x / 16
132 | l6 = self.layer6(l5) # 96, x / 16
133 | l7 = self.layer7(l6) # 160, x / 32
134 | l8 = self.layer8(l7) # 320, x / 32
135 | l8 = self.conv8(l8)
136 | l7 = self.conv7(l7)
137 | l7 = self.relu(l8 + l7)
138 | l7 = self.crp4(l7)
139 | l7 = self.conv_adapt4(l7)
140 | l7 = nn.Upsample(size=l6.size()[2:], mode="bilinear", align_corners=True)(l7)
141 |
142 | l6 = self.conv6(l6)
143 | l5 = self.conv5(l5)
144 | l5 = self.relu(l5 + l6 + l7)
145 | l5 = self.crp3(l5)
146 | l5 = self.conv_adapt3(l5)
147 | l5 = nn.Upsample(size=l4.size()[2:], mode="bilinear", align_corners=True)(l5)
148 |
149 | l4 = self.conv4(l4)
150 | l4 = self.relu(l5 + l4)
151 | l4 = self.crp2(l4)
152 | l4 = self.conv_adapt2(l4)
153 | l4 = nn.Upsample(size=l3.size()[2:], mode="bilinear", align_corners=True)(l4)
154 |
155 | l3 = self.conv3(l3)
156 | l3 = self.relu(l3 + l4)
157 | l3 = self.crp1(l3)
158 |
159 | out_segm = self.segm(l3)
160 |
161 | return out_segm
162 |
163 | def _initialize_weights(self):
164 | for m in self.modules():
165 | if isinstance(m, nn.Conv2d):
166 | m.weight.data.normal_(0, 0.01)
167 | if m.bias is not None:
168 | m.bias.data.zero_()
169 | elif isinstance(m, nn.BatchNorm2d):
170 | m.weight.data.fill_(1)
171 | m.bias.data.zero_()
172 |
173 | def _make_crp(self, in_planes, out_planes, stages):
174 | layers = [CRPBlock(in_planes, out_planes, stages)]
175 | return nn.Sequential(*layers)
176 |
177 |
178 | def mbv2(num_classes, imagenet=False, pretrained=True, **kwargs):
179 | """Constructs the network.
180 |
181 | Args:
182 | num_classes (int): the number of classes for the segmentation head to output.
183 |
184 | """
185 | model = MBv2(num_classes, **kwargs)
186 | if imagenet:
187 | key = "mbv2_imagenet"
188 | url = models_urls[key]
189 | model.load_state_dict(maybe_download(key, url), strict=False)
190 | elif pretrained:
191 | dataset = data_info.get(num_classes, None)
192 | if dataset:
193 | bname = "mbv2_" + dataset.lower()
194 | key = "rf_lw" + bname
195 | url = models_urls[bname]
196 | model.load_state_dict(maybe_download(key, url), strict=False)
197 | return model
198 |
--------------------------------------------------------------------------------
/models/resnet.py:
--------------------------------------------------------------------------------
1 | """RefineNet-LightWeight
2 |
3 | RefineNet-LigthWeight PyTorch for non-commercial purposes
4 |
5 | Copyright (c) 2018, Vladimir Nekrasov (vladimir.nekrasov@adelaide.edu.au)
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 |
11 | * Redistributions of source code must retain the above copyright notice, this
12 | list of conditions and the following disclaimer.
13 |
14 | * Redistributions in binary form must reproduce the above copyright notice,
15 | this list of conditions and the following disclaimer in the documentation
16 | and/or other materials provided with the distribution.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | """
29 | import torch
30 | import torch.nn as nn
31 | import torch.nn.functional as F
32 |
33 | from utils.helpers import maybe_download
34 | from utils.layer_factory import conv1x1, conv3x3, CRPBlock
35 |
36 | data_info = {7: "Person", 21: "VOC", 40: "NYU", 60: "Context", 2:"Parking"}
37 |
38 | models_urls = {
39 | "50_person": "https://cloudstor.aarnet.edu.au/plus/s/mLA7NxVSPjNL7Oo/download",
40 | "101_person": "https://cloudstor.aarnet.edu.au/plus/s/f1tGGpwdCnYS3xu/download",
41 | "152_person": "https://cloudstor.aarnet.edu.au/plus/s/Ql64rWqiTvWGAA0/download",
42 | "50_voc": "https://cloudstor.aarnet.edu.au/plus/s/xp7GcVKC0GbxhTv/download",
43 | "101_voc": "https://cloudstor.aarnet.edu.au/plus/s/CPRKWiaCIDRdOwF/download",
44 | "152_voc": "https://cloudstor.aarnet.edu.au/plus/s/2w8bFOd45JtPqbD/download",
45 | "50_nyu": "https://cloudstor.aarnet.edu.au/plus/s/gE8dnQmHr9svpfu/download",
46 | "101_nyu": "https://cloudstor.aarnet.edu.au/plus/s/VnsaSUHNZkuIqeB/download",
47 | "152_nyu": "https://cloudstor.aarnet.edu.au/plus/s/EkPQzB2KtrrDnKf/download",
48 | "101_context": "https://cloudstor.aarnet.edu.au/plus/s/hqmplxWOBbOYYjN/download",
49 | "152_context": "https://cloudstor.aarnet.edu.au/plus/s/O84NszlYlsu00fW/download",
50 | "18_imagenet": "https://download.pytorch.org/models/resnet18-5c106cde.pth",
51 | "50_imagenet": "https://download.pytorch.org/models/resnet50-19c8e357.pth",
52 | "101_imagenet": "https://download.pytorch.org/models/resnet101-5d3b4d8f.pth",
53 | "152_imagenet": "https://download.pytorch.org/models/resnet152-b121ed2d.pth",
54 | }
55 |
56 | stages_suffixes = {0: "_conv", 1: "_conv_relu_varout_dimred"}
57 |
58 |
59 | class BasicBlock(nn.Module):
60 | expansion = 1
61 |
62 | def __init__(self, inplanes, planes, stride=1, downsample=None):
63 | super(BasicBlock, self).__init__()
64 | self.conv1 = conv3x3(inplanes, planes, stride)
65 | self.bn1 = nn.BatchNorm2d(planes)
66 | self.relu = nn.ReLU(inplace=True)
67 | self.conv2 = conv3x3(planes, planes)
68 | self.bn2 = nn.BatchNorm2d(planes)
69 | self.downsample = downsample
70 | self.stride = stride
71 |
72 | def forward(self, x):
73 | residual = x
74 |
75 | out = self.conv1(x)
76 | out = self.bn1(out)
77 | out = self.relu(out)
78 |
79 | out = self.conv2(out)
80 | out = self.bn2(out)
81 |
82 | if self.downsample is not None:
83 | residual = self.downsample(x)
84 |
85 | out += residual
86 | out = self.relu(out)
87 |
88 | return out
89 |
90 |
91 | class Bottleneck(nn.Module):
92 | expansion = 4
93 |
94 | def __init__(self, inplanes, planes, stride=1, downsample=None):
95 | super(Bottleneck, self).__init__()
96 | self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False)
97 | self.bn1 = nn.BatchNorm2d(planes)
98 | self.conv2 = nn.Conv2d(
99 | planes, planes, kernel_size=3, stride=stride, padding=1, bias=False
100 | )
101 | self.bn2 = nn.BatchNorm2d(planes)
102 | self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False)
103 | self.bn3 = nn.BatchNorm2d(planes * 4)
104 | self.relu = nn.ReLU(inplace=True)
105 | self.downsample = downsample
106 | self.stride = stride
107 |
108 | def forward(self, x):
109 | residual = x
110 |
111 | out = self.conv1(x)
112 | out = self.bn1(out)
113 | out = self.relu(out)
114 |
115 | out = self.conv2(out)
116 | out = self.bn2(out)
117 | out = self.relu(out)
118 |
119 | out = self.conv3(out)
120 | out = self.bn3(out)
121 |
122 | if self.downsample is not None:
123 | residual = self.downsample(x)
124 |
125 | out += residual
126 | out = self.relu(out)
127 |
128 | return out
129 |
130 |
131 | class ResNetLW(nn.Module):
132 | def __init__(self, block, layers, num_classes=21):
133 | self.inplanes = 64
134 | super(ResNetLW, self).__init__()
135 | self.do = nn.Dropout(p=0.5)
136 | self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
137 | self.bn1 = nn.BatchNorm2d(64)
138 | self.relu = nn.ReLU(inplace=True)
139 | self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
140 | self.layer1 = self._make_layer(block, 64, layers[0])
141 | self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
142 | self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
143 | self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
144 | self.p_ims1d2_outl1_dimred = conv1x1(2048, 512, bias=False)
145 | self.mflow_conv_g1_pool = self._make_crp(512, 512, 4)
146 | self.mflow_conv_g1_b3_joint_varout_dimred = conv1x1(512, 256, bias=False)
147 | self.p_ims1d2_outl2_dimred = conv1x1(1024, 256, bias=False)
148 | self.adapt_stage2_b2_joint_varout_dimred = conv1x1(256, 256, bias=False)
149 | self.mflow_conv_g2_pool = self._make_crp(256, 256, 4)
150 | self.mflow_conv_g2_b3_joint_varout_dimred = conv1x1(256, 256, bias=False)
151 |
152 | self.p_ims1d2_outl3_dimred = conv1x1(512, 256, bias=False)
153 | self.adapt_stage3_b2_joint_varout_dimred = conv1x1(256, 256, bias=False)
154 | self.mflow_conv_g3_pool = self._make_crp(256, 256, 4)
155 | self.mflow_conv_g3_b3_joint_varout_dimred = conv1x1(256, 256, bias=False)
156 |
157 | self.p_ims1d2_outl4_dimred = conv1x1(256, 256, bias=False)
158 | self.adapt_stage4_b2_joint_varout_dimred = conv1x1(256, 256, bias=False)
159 | self.mflow_conv_g4_pool = self._make_crp(256, 256, 4)
160 | self.up1 = nn.ConvTranspose2d(256,256,2,2)
161 | self.up2 = nn.ConvTranspose2d(256,256,2,2)
162 | self.up3 = nn.ConvTranspose2d(256,256,2,2)
163 |
164 | self.clf_conv = nn.Conv2d(
165 | 256, num_classes, kernel_size=3, stride=1, padding=1, bias=True
166 | )
167 |
168 | def _make_crp(self, in_planes, out_planes, stages):
169 | layers = [CRPBlock(in_planes, out_planes, stages)]
170 | return nn.Sequential(*layers)
171 |
172 | def _make_layer(self, block, planes, blocks, stride=1):
173 | downsample = None
174 | if stride != 1 or self.inplanes != planes * block.expansion:
175 | downsample = nn.Sequential(
176 | nn.Conv2d(
177 | self.inplanes,
178 | planes * block.expansion,
179 | kernel_size=1,
180 | stride=stride,
181 | bias=False,
182 | ),
183 | nn.BatchNorm2d(planes * block.expansion),
184 | )
185 |
186 | layers = []
187 | layers.append(block(self.inplanes, planes, stride, downsample))
188 | self.inplanes = planes * block.expansion
189 | for i in range(1, blocks):
190 | layers.append(block(self.inplanes, planes))
191 |
192 | return nn.Sequential(*layers)
193 |
194 | def forward(self, x):
195 | x = self.conv1(x)
196 | x = self.bn1(x)
197 | x = self.relu(x)
198 | x = self.maxpool(x)
199 |
200 | l1 = self.layer1(x)
201 | l2 = self.layer2(l1)
202 | l3 = self.layer3(l2)
203 | l4 = self.layer4(l3)
204 |
205 | l4 = self.do(l4)
206 | l3 = self.do(l3)
207 |
208 | x4 = self.p_ims1d2_outl1_dimred(l4)
209 | x4 = self.relu(x4)
210 | x4 = self.mflow_conv_g1_pool(x4)
211 | x4 = self.mflow_conv_g1_b3_joint_varout_dimred(x4)
212 | #x4 = nn.Upsample(size=l3.size()[2:], mode="nearest", align_corners=None)(x4)
213 | x4 = self.up1(x4)
214 |
215 | x3 = self.p_ims1d2_outl2_dimred(l3)
216 | x3 = self.adapt_stage2_b2_joint_varout_dimred(x3)
217 | x3 = x3 + x4
218 | x3 = F.relu(x3)
219 | x3 = self.mflow_conv_g2_pool(x3)
220 | x3 = self.mflow_conv_g2_b3_joint_varout_dimred(x3)
221 | #x3 = nn.Upsample(size=l2.size()[2:], mode="nearest", align_corners=None)(x3)
222 | x3 = self.up2(x3)
223 | x2 = self.p_ims1d2_outl3_dimred(l2)
224 | x2 = self.adapt_stage3_b2_joint_varout_dimred(x2)
225 | x2 = x2 + x3
226 | x2 = F.relu(x2)
227 | x2 = self.mflow_conv_g3_pool(x2)
228 | x2 = self.mflow_conv_g3_b3_joint_varout_dimred(x2)
229 | #x2 = nn.Upsample(size=l1.size()[2:], mode="nearest", align_corners=None)(x2)
230 | x2 = self.up3(x2)
231 | x1 = self.p_ims1d2_outl4_dimred(l1)
232 | x1 = self.adapt_stage4_b2_joint_varout_dimred(x1)
233 | x1 = x1 + x2
234 | x1 = F.relu(x1)
235 | x1 = self.mflow_conv_g4_pool(x1)
236 |
237 | out = self.clf_conv(x1)
238 | return out
239 |
240 | def rf_lw18(num_classes, imagenet=True, pretrained=False, **kwargs):
241 | model = ResNetLW(Bottleneck, [2, 2, 2, 2], num_classes=num_classes, **kwargs)
242 | if imagenet:
243 | key = "18_imagenet"
244 | url = models_urls[key]
245 | model.load_state_dict(maybe_download(key, url), strict=False)
246 | elif pretrained:
247 | dataset = data_info.get(num_classes, None)
248 | #cpkt = torch.load("/home/kong/Documents/light-weight-refinenet-master/ckpt/checkpoint.pth.tar")
249 | if dataset:
250 | bname = "50_" + dataset.lower()
251 | key = "rf_lw" + bname
252 | url = models_urls[bname]
253 | # model.load_state_dict(cpkt["segmenter"])
254 | model.load_state_dict(maybe_download(key, url), strict=False)
255 | return model
256 |
257 | def rf_lw50(num_classes, imagenet=True, pretrained=False, **kwargs):
258 | model = ResNetLW(Bottleneck, [3, 4, 6, 3], num_classes=num_classes, **kwargs)
259 | if imagenet:
260 | key = "50_imagenet"
261 | url = models_urls[key]
262 | model.load_state_dict(maybe_download(key, url), strict=False)
263 | elif pretrained:
264 | dataset = data_info.get(num_classes, None)
265 | #cpkt = torch.load("/home/kong/Documents/light-weight-refinenet-master/ckpt/checkpoint.pth.tar")
266 | if dataset:
267 | bname = "50_" + dataset.lower()
268 | key = "rf_lw" + bname
269 | url = models_urls[bname]
270 | # model.load_state_dict(cpkt["segmenter"])
271 | model.load_state_dict(maybe_download(key, url), strict=False)
272 | return model
273 |
274 |
275 | def rf_lw101(num_classes, imagenet=False, pretrained=True, **kwargs):
276 | model = ResNetLW(Bottleneck, [3, 4, 23, 3], num_classes=num_classes, **kwargs)
277 | if imagenet:
278 | key = "101_imagenet"
279 | url = models_urls[key]
280 | model.load_state_dict(maybe_download(key, url), strict=False)
281 | elif pretrained:
282 | dataset = data_info.get(num_classes, None)
283 | if dataset:
284 | bname = "101_" + dataset.lower()
285 | key = "rf_lw" + bname
286 | url = models_urls[bname]
287 | model.load_state_dict(maybe_download(key, url), strict=False)
288 | return model
289 |
290 |
291 | def rf_lw152(num_classes, imagenet=False, pretrained=True, **kwargs):
292 | model = ResNetLW(Bottleneck, [3, 8, 36, 3], num_classes=num_classes, **kwargs)
293 | if imagenet:
294 | key = "152_imagenet"
295 | url = models_urls[key]
296 | model.load_state_dict(maybe_download(key, url), strict=False)
297 | elif pretrained:
298 | dataset = data_info.get(num_classes, None)
299 | if dataset:
300 | bname = "152_" + dataset.lower()
301 | key = "rf_lw" + bname
302 | url = models_urls[bname]
303 | model.load_state_dict(maybe_download(key, url), strict=False)
304 | return model
305 |
--------------------------------------------------------------------------------
/src/config.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 |
3 | # DATASET PARAMETERS
4 | TRAIN_DIR = "./datasets/helen_dataset/"
5 | VAL_DIR = TRAIN_DIR
6 | TRAIN_LIST = ["./data/train.face"] * 3
7 | VAL_LIST = ["./data/val.face"] * 3
8 | SHORTER_SIDE = [352] * 3
9 | CROP_SIZE = [512] * 3
10 | NORMALISE_PARAMS = [
11 | 1.0 / 255, # SCALE
12 | np.array([0.485, 0.456, 0.406]).reshape((1, 1, 3)), # MEAN
13 | np.array([0.229, 0.224, 0.225]).reshape((1, 1, 3)),
14 | ] # STD
15 | BATCH_SIZE = [6] * 3
16 | NUM_WORKERS = 12
17 | NUM_CLASSES = [11] * 3
18 | LOW_SCALE = [0.5] * 3
19 | HIGH_SCALE = [2.0] * 3
20 | IGNORE_LABEL = 255
21 |
22 | # ENCODER PARAMETERS
23 | ENC = "18"
24 | ENC_PRETRAINED = True # pre-trained on ImageNet or randomly initialised
25 |
26 | # GENERAL
27 | EVALUATE = False
28 | FREEZE_BN = [True] * 3
29 | NUM_SEGM_EPOCHS = [100] * 3
30 | PRINT_EVERY = 10
31 | RANDOM_SEED = 42
32 | SNAPSHOT_DIR = "./face/"
33 | CKPT_PATH = "./face/checkpoint.pth.tar"
34 | VAL_EVERY = [3] * 3 # how often to record validation scores
35 |
36 | # OPTIMISERS' PARAMETERS
37 | LR_ENC = [5e-4, 2.5e-4, 1e-4] # TO FREEZE, PUT 0
38 | LR_DEC = [5e-3, 2.5e-3, 1e-3]
39 | # LR_ENC = [5e-4, 2.5e-4, 1e-4] # TO FREEZE, PUT 0
40 | # LR_DEC = [5e-3, 2.5e-3, 1e-3]
41 | MOM_ENC = [0.9] * 3 # TO FREEZE, PUT 0
42 | MOM_DEC = [0.9] * 3
43 | WD_ENC = [1e-5] * 3 # TO FREEZE, PUT 0
44 | WD_DEC = [1e-5] * 3
45 | OPTIM_DEC = "sgd"
46 |
--------------------------------------------------------------------------------
/src/datasets.py:
--------------------------------------------------------------------------------
1 | """RefineNet-LightWeight
2 |
3 | RefineNet-LigthWeight PyTorch for non-commercial purposes
4 |
5 | Copyright (c) 2018, Vladimir Nekrasov (vladimir.nekrasov@adelaide.edu.au)
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 |
11 | * Redistributions of source code must retain the above copyright notice, this
12 | list of conditions and the following disclaimer.
13 |
14 | * Redistributions in binary form must reproduce the above copyright notice,
15 | this list of conditions and the following disclaimer in the documentation
16 | and/or other materials provided with the distribution.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | """
29 |
30 | from __future__ import print_function, division
31 |
32 | import os
33 | import warnings
34 |
35 | import cv2
36 | import numpy as np
37 | import torch
38 | from PIL import Image
39 | from torch.utils.data import Dataset
40 |
41 | warnings.filterwarnings("ignore")
42 |
43 |
44 | class Pad(object):
45 | """Pad image and mask to the desired size
46 |
47 | Args:
48 | size (int) : minimum length/width
49 | img_val (array) : image padding value
50 | msk_val (int) : mask padding value
51 |
52 | """
53 |
54 | def __init__(self, size, img_val, msk_val):
55 | self.size = size
56 | self.img_val = img_val
57 | self.msk_val = msk_val
58 |
59 | def __call__(self, sample):
60 | image, mask = sample["image"], sample["mask"]
61 | h, w = image.shape[:2]
62 | h_pad = int(np.clip(((self.size - h) + 1) // 2, 0, 1e6))
63 | w_pad = int(np.clip(((self.size - w) + 1) // 2, 0, 1e6))
64 | pad = ((h_pad, h_pad), (w_pad, w_pad))
65 | image = np.stack(
66 | [
67 | np.pad(
68 | image[:, :, c],
69 | pad,
70 | mode="constant",
71 | constant_values=self.img_val[c],
72 | )
73 | for c in range(3)
74 | ],
75 | axis=2,
76 | )
77 | mask = np.pad(mask, pad, mode="constant", constant_values=self.msk_val)
78 | return {"image": image, "mask": mask}
79 |
80 |
81 | class RandomCrop(object):
82 | """Crop randomly the image in a sample.
83 |
84 | Args:
85 | output_size (tuple or int): Desired output size. If int, square crop
86 | is made.
87 | """
88 |
89 | def __init__(self, crop_size):
90 | assert isinstance(crop_size, int)
91 | self.crop_size = crop_size
92 | if self.crop_size % 2 != 0:
93 | self.crop_size -= 1
94 |
95 | def __call__(self, sample):
96 | image, mask = sample["image"], sample["mask"]
97 | h, w = image.shape[:2]
98 | new_h = min(h, self.crop_size)
99 | new_w = min(w, self.crop_size)
100 | top = np.random.randint(0, h - new_h + 1)
101 | left = np.random.randint(0, w - new_w + 1)
102 | image = image[top : top + new_h, left : left + new_w]
103 | mask = mask[top : top + new_h, left : left + new_w]
104 | return {"image": image, "mask": mask}
105 |
106 |
107 | class ResizeShorterScale(object):
108 | """Resize shorter side to a given value and randomly scale."""
109 |
110 | def __init__(self, shorter_side, low_scale, high_scale):
111 | assert isinstance(shorter_side, int)
112 | self.shorter_side = shorter_side
113 | self.low_scale = low_scale
114 | self.high_scale = high_scale
115 |
116 | def __call__(self, sample):
117 | image, mask = sample["image"], sample["mask"]
118 | min_side = min(image.shape[:2])
119 | scale = np.random.uniform(self.low_scale, self.high_scale)
120 | if min_side * scale < self.shorter_side:
121 | scale = self.shorter_side * 1.0 / min_side
122 | image = cv2.resize(
123 | image, None, fx=scale, fy=scale, interpolation=cv2.INTER_CUBIC
124 | )
125 | mask = cv2.resize(
126 | mask, None, fx=scale, fy=scale, interpolation=cv2.INTER_NEAREST
127 | )
128 | return {"image": image, "mask": mask}
129 |
130 |
131 | class RandomMirror(object):
132 | """Randomly flip the image and the mask"""
133 |
134 | def __init__(self):
135 | pass
136 |
137 | def __call__(self, sample):
138 | image, mask = sample["image"], sample["mask"]
139 | do_mirror = np.random.randint(2)
140 | if do_mirror:
141 | image = cv2.flip(image, 1)
142 | mask = cv2.flip(mask, 1)
143 | return {"image": image, "mask": mask}
144 |
145 |
146 | class Normalise(object):
147 | """Normalise a tensor image with mean and standard deviation.
148 | Given mean: (R, G, B) and std: (R, G, B),
149 | will normalise each channel of the torch.*Tensor, i.e.
150 | channel = (channel - mean) / std
151 |
152 | Args:
153 | mean (sequence): Sequence of means for R, G, B channels respecitvely.
154 | std (sequence): Sequence of standard deviations for R, G, B channels
155 | respecitvely.
156 | """
157 |
158 | def __init__(self, scale, mean, std):
159 | self.scale = scale
160 | self.mean = mean
161 | self.std = std
162 |
163 | def __call__(self, sample):
164 | image = sample["image"]
165 | return {
166 | "image": (self.scale * image - self.mean) / self.std,
167 | "mask": sample["mask"],
168 | }
169 |
170 |
171 | class ToTensor(object):
172 | """Convert ndarrays in sample to Tensors."""
173 |
174 | def __call__(self, sample):
175 | image, mask = sample["image"], sample["mask"]
176 | # swap color axis because
177 | # numpy image: H x W x C
178 | # torch image: C X H X W
179 | image = image.transpose((2, 0, 1))
180 | return {"image": torch.from_numpy(image), "mask": torch.from_numpy(mask)}
181 |
182 |
183 | class NYUDataset(Dataset):
184 | """NYUv2-40"""
185 |
186 | def __init__(self, data_file, data_dir, transform_trn=None, transform_val=None):
187 | """
188 | Args:
189 | data_file (string): Path to the data file with annotations.
190 | data_dir (string): Directory with all the images.
191 | transform_{trn, val} (callable, optional): Optional transform to be applied
192 | on a sample.
193 | """
194 | with open(data_file, "rb") as f:
195 | datalist = f.readlines()
196 | self.datalist = [
197 | (k, v)
198 | for k, v in map(
199 | lambda x: x.decode("utf-8").strip("\n").split("\t"), datalist
200 | )
201 | ]
202 | self.root_dir = data_dir
203 | self.transform_trn = transform_trn
204 | self.transform_val = transform_val
205 | self.stage = "train"
206 |
207 | def set_stage(self, stage):
208 | self.stage = stage
209 |
210 | def __len__(self):
211 | return len(self.datalist)
212 |
213 | def __getitem__(self, idx):
214 | img_name = os.path.join(self.root_dir, self.datalist[idx][0])
215 | msk_name = os.path.join(self.root_dir, self.datalist[idx][1])
216 |
217 | def read_image(x):
218 | img_arr = np.array(Image.open(x))
219 | if len(img_arr.shape) == 2: # grayscale
220 | img_arr = np.tile(img_arr, [3, 1, 1]).transpose(1, 2, 0)
221 | return img_arr
222 |
223 | image = read_image(img_name)
224 | mask = np.array(Image.open(msk_name))
225 | if img_name != msk_name:
226 | assert len(mask.shape) == 2, "Masks must be encoded without colourmap"
227 | sample = {"image": image, "mask": mask}
228 | if self.stage == "train":
229 | if self.transform_trn:
230 | sample = self.transform_trn(sample)
231 | elif self.stage == "val":
232 | if self.transform_val:
233 | sample = self.transform_val(sample)
234 | return sample
235 |
--------------------------------------------------------------------------------
/src/demo.py:
--------------------------------------------------------------------------------
1 | import six
2 | import sys
3 | sys.path.append('../../')
4 | import collections
5 | import cv2
6 | import time
7 | from models.resnet import rf_lw50
8 | from utils.helpers import prepare_img
9 | import glob
10 |
11 | import cv2
12 | import matplotlib.pyplot as plt
13 | import numpy as np
14 | import torch
15 |
16 | from PIL import Image
17 |
18 | def create_visual_anno(anno):
19 | """"""
20 | assert np.max(anno) <= 10, "only 10 classes are supported, add new color in label2color_dict"
21 | label2color_dict = {
22 | 0: [0, 0, 0],
23 | 1: [255, 248, 220], # cornsilk
24 | 2: [100, 149, 237], # cornflowerblue
25 | 3: [102, 205, 170], # mediumAquamarine
26 | 4: [205, 133, 63], # peru
27 | 5: [160, 32, 240], # purple
28 | 6: [255, 64, 64], # brown1
29 | 7: [139, 69, 19], # Chocolate4
30 | 8: [255,0,0],
31 | 9: [0,255,0],
32 | 10:[0,0,255]
33 | }
34 | # visualize
35 | visual_anno = np.zeros((anno.shape[0], anno.shape[1], 3), dtype=np.uint8)
36 | for i in range(visual_anno.shape[0]): # i for h
37 | for j in range(visual_anno.shape[1]):
38 | color = label2color_dict[anno[i, j]]
39 | visual_anno[i, j, 0] = color[0]
40 | visual_anno[i, j, 1] = color[1]
41 | visual_anno[i, j, 2] = color[2]
42 |
43 | return visual_anno
44 |
45 |
46 | has_cuda = torch.cuda.is_available()
47 | n_classes = 11
48 | net = rf_lw50(n_classes, imagenet=False, pretrained=False)
49 | cpkt = torch.load("../face/checkpoint.pth.tar")['segmenter']
50 | weights = collections.OrderedDict()
51 | for key in cpkt:
52 | print(key.split('.',1))
53 | weights[key.split('.',1)[1]] = cpkt[key]
54 |
55 | net.load_state_dict(weights)
56 | net = net.cuda()
57 | net.eval()
58 | img_path = "/home/kong/Downloads/d94be52120f2aa2cfbd7c12f10817b04.jpeg"
59 | with torch.no_grad():
60 |
61 | img = np.array(Image.open(img_path))
62 | img = cv2.resize(img,(512,512))
63 | orig_size = img.shape[:2][::-1]
64 |
65 | img_inp = torch.tensor(prepare_img(img).transpose(2, 0, 1)[None]).float()
66 | if has_cuda:
67 | img_inp = img_inp.cuda()
68 |
69 | plt.imshow(img)
70 | start = time.time()
71 |
72 | segm = net(img_inp)[0].data.cpu().numpy().transpose(1, 2, 0)
73 | end = time.time()
74 | segm = cv2.resize(segm, orig_size, interpolation=cv2.INTER_CUBIC)
75 | segm = segm.argmax(axis=2).astype(np.uint8)
76 | print("Infer time :",end-start)
77 |
78 | segm_rgb = create_visual_anno(segm)
79 | image_add = cv2.addWeighted(img,0.8,segm_rgb,0.2,0)
80 | result = np.hstack((img,segm_rgb,image_add))
81 | result = Image.fromarray(result.astype(np.uint8))
82 | result.save("face_seg3.jpg")
83 |
--------------------------------------------------------------------------------
/src/miou_utils.pyx:
--------------------------------------------------------------------------------
1 | """RefineNet-LightWeight
2 |
3 | RefineNet-LigthWeight PyTorch for non-commercial purposes
4 |
5 | Copyright (c) 2018, Vladimir Nekrasov (vladimir.nekrasov@adelaide.edu.au)
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 |
11 | * Redistributions of source code must retain the above copyright notice, this
12 | list of conditions and the following disclaimer.
13 |
14 | * Redistributions in binary form must reproduce the above copyright notice,
15 | this list of conditions and the following disclaimer in the documentation
16 | and/or other materials provided with the distribution.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | """
29 |
30 | from __future__ import division
31 |
32 | cimport cython
33 | cimport numpy as np
34 | import numpy as np
35 |
36 | def fast_cm(unsigned char[::1] preds, unsigned char[::1] gt,
37 | int n_classes):
38 | """Computing confusion matrix faster.
39 |
40 | Args:
41 | preds (Tensor) : predictions (either flatten or of size (len(gt), top-N)).
42 | gt (Tensor) : flatten gt.
43 | n_classes (int) : number of classes.
44 |
45 | Returns:
46 |
47 | Confusion matrix
48 | (Tensor of size (n_classes, n_classes)).
49 |
50 | """
51 | cdef np.ndarray[np.int_t, ndim=2] cm = np.zeros((n_classes, n_classes),
52 | dtype=np.int_)
53 | cdef np.intp_t i,a,p, n = gt.shape[0]
54 |
55 | for i in range(n):
56 | a = gt[i]
57 | p = preds[i]
58 | cm[a, p] += 1
59 | return cm
60 |
61 | def compute_iu(np.ndarray[np.int_t, ndim=2] cm):
62 | """Compute IU from confusion matrix.
63 |
64 | Args:
65 | cm (Tensor) : square confusion matrix.
66 |
67 | Returns:
68 | IU vector (Tensor).
69 |
70 | """
71 | cdef unsigned int pi = 0
72 | cdef unsigned int gi = 0
73 | cdef unsigned int ii = 0
74 | cdef unsigned int denom = 0
75 | cdef unsigned int n_classes = cm.shape[0]
76 | cdef np.ndarray[np.float_t, ndim=1] IU = np.ones(n_classes)
77 | cdef np.intp_t i
78 | for i in xrange(n_classes):
79 | pi = sum(cm[:, i])
80 | gi = sum(cm[i, :])
81 | ii = cm[i, i]
82 | denom = pi + gi - ii
83 | if denom > 0:
84 | IU[i] = ii / denom
85 | return IU
86 |
--------------------------------------------------------------------------------
/src/onnx_export.py:
--------------------------------------------------------------------------------
1 | import sys
2 | sys.path.append('../../')
3 | import collections
4 | import cv2
5 | from models.resnet import rf_lw50
6 | import cv2
7 | import numpy as np
8 | import torch
9 |
10 |
11 | has_cuda = torch.cuda.is_available()
12 | n_classes = 11
13 |
14 | net = rf_lw50(n_classes, imagenet=False, pretrained=False)
15 | cpkt = torch.load("../face/checkpoint.pth.tar")['segmenter']
16 | weights = collections.OrderedDict()
17 | for key in cpkt:
18 | print(key.split('.',1))
19 | weights[key.split('.',1)[1]] = cpkt[key]
20 |
21 | net.load_state_dict(weights)
22 | net = net.cuda()
23 | net.eval()
24 | dummy_input1 = torch.randn(1, 3, 512, 512)
25 | dummy_input1 = dummy_input1.cuda()
26 | torch.onnx.export(net, dummy_input1, "refinenet.onnx", verbose=True)
27 |
--------------------------------------------------------------------------------
/src/setup.py:
--------------------------------------------------------------------------------
1 | from distutils.core import setup
2 | from Cython.Build import cythonize
3 | import numpy
4 |
5 | setup(
6 | ext_modules=cythonize("./src/*.pyx"), include_dirs=[numpy.get_include()],
7 | )
8 |
--------------------------------------------------------------------------------
/src/train.py:
--------------------------------------------------------------------------------
1 | """RefineNet-LightWeight
2 |
3 | RefineNet-LigthWeight PyTorch for non-commercial purposes
4 |
5 | Copyright (c) 2018, Vladimir Nekrasov (vladimir.nekrasov@adelaide.edu.au)
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 |
11 | * Redistributions of source code must retain the above copyright notice, this
12 | list of conditions and the following disclaimer.
13 |
14 | * Redistributions in binary form must reproduce the above copyright notice,
15 | this list of conditions and the following disclaimer in the documentation
16 | and/or other materials provided with the distribution.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | """
29 |
30 | # general libs
31 | import argparse
32 | import logging
33 | import os
34 | import random
35 | import re
36 | import time
37 |
38 | # misc
39 | import cv2
40 | import numpy as np
41 |
42 | # pytorch libs
43 | import torch
44 | import torch.nn as nn
45 |
46 | # custom libs
47 | from config import *
48 | from miou_utils import compute_iu, fast_cm
49 | from util import *
50 |
51 |
52 | def get_arguments():
53 | """Parse all the arguments provided from the CLI.
54 |
55 | Returns:
56 | A list of parsed arguments.
57 | """
58 | parser = argparse.ArgumentParser(description="Full Pipeline Training")
59 |
60 | # Dataset
61 | parser.add_argument(
62 | "--train-dir",
63 | type=str,
64 | default=TRAIN_DIR,
65 | help="Path to the training set directory.",
66 | )
67 | parser.add_argument(
68 | "--val-dir",
69 | type=str,
70 | default=VAL_DIR,
71 | help="Path to the validation set directory.",
72 | )
73 | parser.add_argument(
74 | "--train-list",
75 | type=str,
76 | nargs="+",
77 | default=TRAIN_LIST,
78 | help="Path to the training set list.",
79 | )
80 | parser.add_argument(
81 | "--val-list",
82 | type=str,
83 | nargs="+",
84 | default=VAL_LIST,
85 | help="Path to the validation set list.",
86 | )
87 | parser.add_argument(
88 | "--shorter-side",
89 | type=int,
90 | nargs="+",
91 | default=SHORTER_SIDE,
92 | help="Shorter side transformation.",
93 | )
94 | parser.add_argument(
95 | "--crop-size",
96 | type=int,
97 | nargs="+",
98 | default=CROP_SIZE,
99 | help="Crop size for training,",
100 | )
101 | parser.add_argument(
102 | "--normalise-params",
103 | type=list,
104 | default=NORMALISE_PARAMS,
105 | help="Normalisation parameters [scale, mean, std],",
106 | )
107 | parser.add_argument(
108 | "--batch-size",
109 | type=int,
110 | nargs="+",
111 | default=BATCH_SIZE,
112 | help="Batch size to train the segmenter model.",
113 | )
114 | parser.add_argument(
115 | "--num-workers",
116 | type=int,
117 | default=NUM_WORKERS,
118 | help="Number of workers for pytorch's dataloader.",
119 | )
120 | parser.add_argument(
121 | "--num-classes",
122 | type=int,
123 | nargs="+",
124 | default=NUM_CLASSES,
125 | help="Number of output classes for each task.",
126 | )
127 | parser.add_argument(
128 | "--low-scale",
129 | type=float,
130 | nargs="+",
131 | default=LOW_SCALE,
132 | help="Lower bound for random scale",
133 | )
134 | parser.add_argument(
135 | "--high-scale",
136 | type=float,
137 | nargs="+",
138 | default=HIGH_SCALE,
139 | help="Upper bound for random scale",
140 | )
141 | parser.add_argument(
142 | "--ignore-label",
143 | type=int,
144 | default=IGNORE_LABEL,
145 | help="Label to ignore during training",
146 | )
147 |
148 | # Encoder
149 | parser.add_argument("--enc", type=str, default=ENC, help="Encoder net type.")
150 | parser.add_argument(
151 | "--enc-pretrained",
152 | type=bool,
153 | default=ENC_PRETRAINED,
154 | help="Whether to init with imagenet weights.",
155 | )
156 | # General
157 | parser.add_argument(
158 | "--evaluate",
159 | type=bool,
160 | default=EVALUATE,
161 | help="If true, only validate segmentation.",
162 | )
163 | parser.add_argument(
164 | "--freeze-bn",
165 | type=bool,
166 | nargs="+",
167 | default=FREEZE_BN,
168 | help="Whether to keep batch norm statistics intact.",
169 | )
170 | parser.add_argument(
171 | "--num-segm-epochs",
172 | type=int,
173 | nargs="+",
174 | default=NUM_SEGM_EPOCHS,
175 | help="Number of epochs to train for segmentation network.",
176 | )
177 | parser.add_argument(
178 | "--print-every",
179 | type=int,
180 | default=PRINT_EVERY,
181 | help="Print information every often.",
182 | )
183 | parser.add_argument(
184 | "--random-seed",
185 | type=int,
186 | default=RANDOM_SEED,
187 | help="Seed to provide (near-)reproducibility.",
188 | )
189 | parser.add_argument(
190 | "--snapshot-dir",
191 | type=str,
192 | default=SNAPSHOT_DIR,
193 | help="Path to directory for storing checkpoints.",
194 | )
195 | parser.add_argument(
196 | "--ckpt-path", type=str, default=CKPT_PATH, help="Path to the checkpoint file."
197 | )
198 | parser.add_argument(
199 | "--val-every",
200 | nargs="+",
201 | type=int,
202 | default=VAL_EVERY,
203 | help="How often to validate current architecture.",
204 | )
205 |
206 | # Optimisers
207 | parser.add_argument(
208 | "--lr-enc",
209 | type=float,
210 | nargs="+",
211 | default=LR_ENC,
212 | help="Learning rate for encoder.",
213 | )
214 | parser.add_argument(
215 | "--lr-dec",
216 | type=float,
217 | nargs="+",
218 | default=LR_DEC,
219 | help="Learning rate for decoder.",
220 | )
221 | parser.add_argument(
222 | "--mom-enc",
223 | type=float,
224 | nargs="+",
225 | default=MOM_ENC,
226 | help="Momentum for encoder.",
227 | )
228 | parser.add_argument(
229 | "--mom-dec",
230 | type=float,
231 | nargs="+",
232 | default=MOM_DEC,
233 | help="Momentum for decoder.",
234 | )
235 | parser.add_argument(
236 | "--wd-enc",
237 | type=float,
238 | nargs="+",
239 | default=WD_ENC,
240 | help="Weight decay for encoder.",
241 | )
242 | parser.add_argument(
243 | "--wd-dec",
244 | type=float,
245 | nargs="+",
246 | default=WD_DEC,
247 | help="Weight decay for decoder.",
248 | )
249 | parser.add_argument(
250 | "--optim-dec",
251 | type=str,
252 | default=OPTIM_DEC,
253 | help="Optimiser algorithm for decoder.",
254 | )
255 | return parser.parse_args()
256 |
257 |
258 | def create_segmenter(net, pretrained, num_classes):
259 | """Create Encoder; for now only ResNet [50,101,152]"""
260 | from models.resnet import rf_lw50, rf_lw101, rf_lw152,rf_lw18
261 | if str(net) == "18":
262 | return rf_lw18(num_classes, imagenet=pretrained)
263 | if str(net) == "50":
264 | return rf_lw50(num_classes, imagenet=pretrained)
265 | elif str(net) == "101":
266 | return rf_lw101(num_classes, imagenet=pretrained)
267 | elif str(net) == "152":
268 | return rf_lw152(num_classes, imagenet=pretrained)
269 | else:
270 | raise ValueError("{} is not supported".format(str(net)))
271 |
272 |
273 | def create_loaders(
274 | train_dir,
275 | val_dir,
276 | train_list,
277 | val_list,
278 | shorter_side,
279 | crop_size,
280 | low_scale,
281 | high_scale,
282 | normalise_params,
283 | batch_size,
284 | num_workers,
285 | ignore_label,
286 | ):
287 | """
288 | Args:
289 | train_dir (str) : path to the root directory of the training set.
290 | val_dir (str) : path to the root directory of the validation set.
291 | train_list (str) : path to the training list.
292 | val_list (str) : path to the validation list.
293 | shorter_side (int) : parameter of the shorter_side resize transformation.
294 | crop_size (int) : square crop to apply during the training.
295 | low_scale (float) : lowest scale ratio for augmentations.
296 | high_scale (float) : highest scale ratio for augmentations.
297 | normalise_params (list / tuple) : img_scale, img_mean, img_std.
298 | batch_size (int) : training batch size.
299 | num_workers (int) : number of workers to parallelise data loading operations.
300 | ignore_label (int) : label to pad segmentation masks with
301 |
302 | Returns:
303 | train_loader, val loader
304 |
305 | """
306 | # Torch libraries
307 | from torchvision import transforms
308 | from torch.utils.data import DataLoader
309 |
310 | # Custom libraries
311 | from datasets import NYUDataset as Dataset
312 | from datasets import (
313 | Pad,
314 | RandomCrop,
315 | RandomMirror,
316 | ResizeShorterScale,
317 | ToTensor,
318 | Normalise,
319 | )
320 |
321 | ## Transformations during training ##
322 | composed_trn = transforms.Compose(
323 | [
324 | ResizeShorterScale(shorter_side, low_scale, high_scale),
325 | Pad(crop_size, [123.675, 116.28, 103.53], ignore_label),
326 | RandomMirror(),
327 | RandomCrop(crop_size),
328 | Normalise(*normalise_params),
329 | ToTensor(),
330 | ]
331 | )
332 | composed_val = transforms.Compose([ResizeShorterScale(shorter_side, low_scale, high_scale),Pad(crop_size, [123.675, 116.28, 103.53], ignore_label),RandomMirror(),RandomCrop(crop_size),Normalise(*normalise_params), ToTensor()])
333 | ## Training and validation sets ##
334 | trainset = Dataset(
335 | data_file=train_list,
336 | data_dir=train_dir,
337 | transform_trn=composed_trn,
338 | transform_val=composed_val,
339 | )
340 |
341 | valset = Dataset(
342 | data_file=val_list,
343 | data_dir=val_dir,
344 | transform_trn=None,
345 | transform_val=composed_val,
346 | )
347 | logger.info(
348 | " Created train set = {} examples, val set = {} examples".format(
349 | len(trainset), len(valset)
350 | )
351 | )
352 | ## Training and validation loaders ##
353 | train_loader = DataLoader(
354 | trainset,
355 | batch_size=batch_size,
356 | shuffle=True,
357 | num_workers=num_workers,
358 | pin_memory=True,
359 | drop_last=True,
360 | )
361 | val_loader = DataLoader(
362 | valset, batch_size=1, shuffle=False, num_workers=num_workers, pin_memory=True
363 | )
364 | return train_loader, val_loader
365 |
366 |
367 | def create_optimisers(
368 | lr_enc, lr_dec, mom_enc, mom_dec, wd_enc, wd_dec, param_enc, param_dec, optim_dec
369 | ):
370 | """Create optimisers for encoder, decoder and controller"""
371 | optim_enc = torch.optim.SGD(
372 | param_enc, lr=lr_enc, momentum=mom_enc, weight_decay=wd_enc
373 | )
374 | if optim_dec == "sgd":
375 | optim_dec = torch.optim.SGD(
376 | param_dec, lr=lr_dec, momentum=mom_dec, weight_decay=wd_dec
377 | )
378 | elif optim_dec == "adamw":
379 | optim_dec = torch.optim.AdamW(
380 | param_dec, lr=lr_dec, weight_decay=wd_dec, eps=1e-3
381 | )
382 | return optim_enc, optim_dec
383 |
384 |
385 | def load_ckpt(ckpt_path, ckpt_dict):
386 | best_val = epoch_start = 0
387 | if os.path.exists(args.ckpt_path):
388 | ckpt = torch.load(ckpt_path)
389 | for (k, v) in ckpt_dict.items():
390 | if k in ckpt:
391 | v.load_state_dict(ckpt[k])
392 | best_val = ckpt.get("best_val", 0)
393 | epoch_start = ckpt.get("epoch_start", 0)
394 | logger.info(
395 | " Found checkpoint at {} with best_val {:.4f} at epoch {}".format(
396 | ckpt_path, best_val, epoch_start
397 | )
398 | )
399 | return best_val, epoch_start
400 |
401 |
402 | def train_segmenter(
403 | segmenter, train_loader, optim_enc, optim_dec, epoch, segm_crit, freeze_bn
404 | ):
405 | """Training segmenter
406 |
407 | Args:
408 | segmenter (nn.Module) : segmentation network
409 | train_loader (DataLoader) : training data iterator
410 | optim_enc (optim) : optimiser for encoder
411 | optim_dec (optim) : optimiser for decoder
412 | epoch (int) : current epoch
413 | segm_crit (nn.Loss) : segmentation criterion
414 | freeze_bn (bool) : whether to keep BN params intact
415 |
416 | """
417 | train_loader.dataset.set_stage("train")
418 | segmenter.train()
419 | if freeze_bn:
420 | for m in segmenter.modules():
421 | if isinstance(m, nn.BatchNorm2d):
422 | m.eval()
423 | batch_time = AverageMeter()
424 | losses = AverageMeter()
425 | for i, sample in enumerate(train_loader):
426 | start = time.time()
427 | input = sample["image"].cuda()
428 | target = sample["mask"].cuda()
429 | input_var = torch.autograd.Variable(input).float()
430 | target_var = torch.autograd.Variable(target).long()
431 | # Compute output
432 | output = segmenter(input_var)
433 | output = nn.functional.interpolate(
434 | output, size=target_var.size()[1:], mode="bilinear", align_corners=False
435 | )
436 | soft_output = nn.LogSoftmax()(output)
437 | # Compute loss and backpropagate
438 | loss = segm_crit(soft_output, target_var)
439 | optim_enc.zero_grad()
440 | optim_dec.zero_grad()
441 | loss.backward()
442 | optim_enc.step()
443 | optim_dec.step()
444 | losses.update(loss.item())
445 | batch_time.update(time.time() - start)
446 | if i % args.print_every == 0:
447 | logger.info(
448 | " Train epoch: {} [{}/{}]\t"
449 | "Avg. Loss: {:.3f}\t"
450 | "Avg. Time: {:.3f}".format(
451 | epoch, i, len(train_loader), losses.avg, batch_time.avg
452 | )
453 | )
454 |
455 |
456 | def validate(segmenter, val_loader, epoch, num_classes=-1):
457 | """Validate segmenter
458 |
459 | Args:
460 | segmenter (nn.Module) : segmentation network
461 | val_loader (DataLoader) : training data iterator
462 | epoch (int) : current epoch
463 | num_classes (int) : number of classes to consider
464 |
465 | Returns:
466 | Mean IoU (float)
467 | """
468 | val_loader.dataset.set_stage("val")
469 | segmenter.eval()
470 | cm = np.zeros((num_classes, num_classes), dtype=int)
471 | with torch.no_grad():
472 | for i, sample in enumerate(val_loader):
473 | input = sample["image"]
474 | target = sample["mask"]
475 | input_var = torch.autograd.Variable(input).float().cuda()
476 | # Compute output
477 | output = segmenter(input_var)
478 | output = (
479 | cv2.resize(
480 | output[0, :num_classes].data.cpu().numpy().transpose(1, 2, 0),
481 | target.size()[1:][::-1],
482 | interpolation=cv2.INTER_CUBIC,
483 | )
484 | .argmax(axis=2)
485 | .astype(np.uint8)
486 | )
487 | # Compute IoU
488 | gt = target[0].data.cpu().numpy().astype(np.uint8)
489 | gt_idx = (
490 | gt < num_classes
491 | ) # Ignore every class index larger than the number of classes
492 | cm += fast_cm(output[gt_idx], gt[gt_idx], num_classes)
493 |
494 | if i % args.print_every == 0:
495 | logger.info(
496 | " Val epoch: {} [{}/{}]\t"
497 | "Mean IoU: {:.3f}".format(
498 | epoch, i, len(val_loader), compute_iu(cm).mean()
499 | )
500 | )
501 |
502 | ious = compute_iu(cm)
503 | logger.info(" IoUs: {}".format(ious))
504 | miou = np.mean(ious)
505 | logger.info(" Val epoch: {}\tMean IoU: {:.3f}".format(epoch, miou))
506 | return miou
507 |
508 |
509 | def main():
510 | global args, logger
511 | args = get_arguments()
512 | logger = logging.getLogger(__name__)
513 | ## Add args ##
514 | args.num_stages = len(args.num_classes)
515 | ## Set random seeds ##
516 | torch.backends.cudnn.deterministic = True
517 | torch.manual_seed(args.random_seed)
518 | if torch.cuda.is_available():
519 | torch.cuda.manual_seed_all(args.random_seed)
520 | np.random.seed(args.random_seed)
521 | random.seed(args.random_seed)
522 | ## Generate Segmenter ##
523 | segmenter = nn.DataParallel(
524 | create_segmenter(args.enc, args.enc_pretrained, args.num_classes[0])
525 | ).cuda()
526 | logger.info(
527 | " Loaded Segmenter {}, ImageNet-Pre-Trained={}, #PARAMS={:3.2f}M".format(
528 | args.enc, args.enc_pretrained, compute_params(segmenter) / 1e6
529 | )
530 | )
531 | ## Restore if any ##
532 | best_val, epoch_start = load_ckpt(args.ckpt_path, {"segmenter": segmenter})
533 | ## Criterion ##
534 | segm_crit = nn.NLLLoss2d(ignore_index=args.ignore_label).cuda()
535 |
536 | ## Saver ##
537 | saver = Saver(
538 | args=vars(args),
539 | ckpt_dir=args.snapshot_dir,
540 | best_val=best_val,
541 | condition=lambda x, y: x > y,
542 | ) # keep checkpoint with the best validation score
543 |
544 | logger.info(" Training Process Starts")
545 | for task_idx in range(args.num_stages):
546 | start = time.time()
547 | torch.cuda.empty_cache()
548 | ## Create dataloaders ##
549 | train_loader, val_loader = create_loaders(
550 | args.train_dir,
551 | args.val_dir,
552 | args.train_list[task_idx],
553 | args.val_list[task_idx],
554 | args.shorter_side[task_idx],
555 | args.crop_size[task_idx],
556 | args.low_scale[task_idx],
557 | args.high_scale[task_idx],
558 | args.normalise_params,
559 | args.batch_size[task_idx],
560 | args.num_workers,
561 | args.ignore_label,
562 | )
563 | if args.evaluate:
564 | return validate(
565 | segmenter, val_loader, 0, num_classes=args.num_classes[task_idx]
566 | )
567 |
568 | logger.info(" Training Stage {}".format(str(task_idx)))
569 | ## Optimisers ##
570 | enc_params = []
571 | dec_params = []
572 | for k, v in segmenter.named_parameters():
573 | if bool(re.match(".*conv1.*|.*bn1.*|.*layer.*", k)):
574 | enc_params.append(v)
575 | logger.info(" Enc. parameter: {}".format(k))
576 | else:
577 | dec_params.append(v)
578 | logger.info(" Dec. parameter: {}".format(k))
579 | optim_enc, optim_dec = create_optimisers(
580 | args.lr_enc[task_idx],
581 | args.lr_dec[task_idx],
582 | args.mom_enc[task_idx],
583 | args.mom_dec[task_idx],
584 | args.wd_enc[task_idx],
585 | args.wd_dec[task_idx],
586 | enc_params,
587 | dec_params,
588 | args.optim_dec,
589 | )
590 | for epoch in range(args.num_segm_epochs[task_idx]):
591 | train_segmenter(
592 | segmenter,
593 | train_loader,
594 | optim_enc,
595 | optim_dec,
596 | epoch_start,
597 | segm_crit,
598 | args.freeze_bn[task_idx],
599 | )
600 | if (epoch + 1) % (args.val_every[task_idx]) == 0:
601 | miou = validate(
602 | segmenter, val_loader, epoch_start, args.num_classes[task_idx]
603 | )
604 | saver.save(
605 | miou,
606 | {"segmenter": segmenter.state_dict(), "epoch_start": epoch_start},
607 | logger,
608 | )
609 | epoch_start += 1
610 | logger.info(
611 | "Stage {} finished, time spent {:.3f}min".format(
612 | task_idx, (time.time() - start) / 60.0
613 | )
614 | )
615 | logger.info(
616 | "All stages are now finished. Best Val is {:.3f}".format(saver.best_val)
617 | )
618 |
619 |
620 | if __name__ == "__main__":
621 | logging.basicConfig(level=logging.INFO)
622 | main()
623 |
--------------------------------------------------------------------------------
/src/util.py:
--------------------------------------------------------------------------------
1 | """Helper definitions"""
2 |
3 | import json
4 | import os
5 |
6 | import torch
7 |
8 |
9 | def compute_params(model):
10 | """Compute number of parameters"""
11 | n_total_params = 0
12 | for name, m in model.named_parameters():
13 | n_elem = m.numel()
14 | n_total_params += n_elem
15 | return n_total_params
16 |
17 |
18 | # Adopted from https://raw.githubusercontent.com/pytorch/examples/master/imagenet/main.py
19 | class AverageMeter(object):
20 | """Computes and stores the average and current value"""
21 |
22 | def __init__(self):
23 | self.reset()
24 |
25 | def reset(self):
26 | self.val = 0
27 | self.avg = 0
28 | self.sum = 0
29 | self.count = 0
30 |
31 | def update(self, val, n=1):
32 | self.val = val
33 | self.sum += val * n
34 | self.count += n
35 | self.avg = self.sum / self.count
36 |
37 |
38 | class Saver:
39 | """Saver class for managing parameters"""
40 |
41 | def __init__(self, args, ckpt_dir, best_val=0, condition=lambda x, y: x > y):
42 | """
43 | Args:
44 | args (dict): dictionary with arguments.
45 | ckpt_dir (str): path to directory in which to store the checkpoint.
46 | best_val (float): initial best value.
47 | condition (function): how to decide whether to save the new checkpoint
48 | by comparing best value and new value (x,y).
49 |
50 | """
51 | if not os.path.exists(ckpt_dir):
52 | os.makedirs(ckpt_dir)
53 | with open("{}/args.json".format(ckpt_dir), "w") as f:
54 | json.dump(
55 | {k: v for k, v in args.items() if isinstance(v, (int, float, str))},
56 | f,
57 | sort_keys=True,
58 | indent=4,
59 | ensure_ascii=False,
60 | )
61 | self.ckpt_dir = ckpt_dir
62 | self.best_val = best_val
63 | self.condition = condition
64 | self._counter = 0
65 |
66 | def _do_save(self, new_val):
67 | """Check whether need to save"""
68 | return self.condition(new_val, self.best_val)
69 |
70 | def save(self, new_val, dict_to_save, logger):
71 | """Save new checkpoint"""
72 | self._counter += 1
73 | if self._do_save(new_val):
74 | logger.info(
75 | " New best value {:.4f}, was {:.4f}".format(new_val, self.best_val)
76 | )
77 | self.best_val = new_val
78 | dict_to_save["best_val"] = new_val
79 | torch.save(dict_to_save, "{}/checkpoint.pth.tar".format(self.ckpt_dir))
80 | return True
81 | return False
82 |
--------------------------------------------------------------------------------
/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/midasklr/RefineNet/cf000a45e9b2285eed54fe11465bfde0639f2e2d/utils/__init__.py
--------------------------------------------------------------------------------
/utils/cmap.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/midasklr/RefineNet/cf000a45e9b2285eed54fe11465bfde0639f2e2d/utils/cmap.npy
--------------------------------------------------------------------------------
/utils/cs_cmap.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/midasklr/RefineNet/cf000a45e9b2285eed54fe11465bfde0639f2e2d/utils/cs_cmap.npy
--------------------------------------------------------------------------------
/utils/helpers.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import torch
3 |
4 | IMG_SCALE = 1.0 / 255
5 | IMG_MEAN = np.array([0.485, 0.456, 0.406]).reshape((1, 1, 3))
6 | IMG_STD = np.array([0.229, 0.224, 0.225]).reshape((1, 1, 3))
7 |
8 |
9 | def maybe_download(model_name, model_url, model_dir=None, map_location=None):
10 | import os
11 | import sys
12 | from six.moves import urllib
13 |
14 | if model_dir is None:
15 | torch_home = os.path.expanduser(os.getenv("TORCH_HOME", "~/.torch"))
16 | model_dir = os.getenv("TORCH_MODEL_ZOO", os.path.join(torch_home, "models"))
17 | if not os.path.exists(model_dir):
18 | os.makedirs(model_dir)
19 | filename = "{}.pth.tar".format(model_name)
20 | cached_file = os.path.join(model_dir, filename)
21 | if not os.path.exists(cached_file):
22 | url = model_url
23 | sys.stderr.write('Downloading: "{}" to {}\n'.format(url, cached_file))
24 | urllib.request.urlretrieve(url, cached_file)
25 | return torch.load(cached_file, map_location=map_location)
26 |
27 |
28 | def prepare_img(img):
29 | return (img * IMG_SCALE - IMG_MEAN) / IMG_STD
30 |
--------------------------------------------------------------------------------
/utils/layer_factory.py:
--------------------------------------------------------------------------------
1 | """RefineNet-LightWeight-CRP Block
2 |
3 | RefineNet-LigthWeight PyTorch for non-commercial purposes
4 |
5 | Copyright (c) 2018, Vladimir Nekrasov (vladimir.nekrasov@adelaide.edu.au)
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without
9 | modification, are permitted provided that the following conditions are met:
10 |
11 | * Redistributions of source code must retain the above copyright notice, this
12 | list of conditions and the following disclaimer.
13 |
14 | * Redistributions in binary form must reproduce the above copyright notice,
15 | this list of conditions and the following disclaimer in the documentation
16 | and/or other materials provided with the distribution.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | """
29 |
30 | import torch.nn as nn
31 |
32 |
33 | def batchnorm(in_planes):
34 | "batch norm 2d"
35 | return nn.BatchNorm2d(in_planes, affine=True, eps=1e-5, momentum=0.1)
36 |
37 |
38 | def conv3x3(in_planes, out_planes, stride=1, bias=False):
39 | "3x3 convolution with padding"
40 | return nn.Conv2d(
41 | in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=bias
42 | )
43 |
44 |
45 | def conv1x1(in_planes, out_planes, stride=1, bias=False):
46 | "1x1 convolution"
47 | return nn.Conv2d(
48 | in_planes, out_planes, kernel_size=1, stride=stride, padding=0, bias=bias
49 | )
50 |
51 |
52 | def convbnrelu(in_planes, out_planes, kernel_size, stride=1, groups=1, act=True):
53 | "conv-batchnorm-relu"
54 | if act:
55 | return nn.Sequential(
56 | nn.Conv2d(
57 | in_planes,
58 | out_planes,
59 | kernel_size,
60 | stride=stride,
61 | padding=int(kernel_size / 2.0),
62 | groups=groups,
63 | bias=False,
64 | ),
65 | batchnorm(out_planes),
66 | nn.ReLU6(inplace=True),
67 | )
68 | else:
69 | return nn.Sequential(
70 | nn.Conv2d(
71 | in_planes,
72 | out_planes,
73 | kernel_size,
74 | stride=stride,
75 | padding=int(kernel_size / 2.0),
76 | groups=groups,
77 | bias=False,
78 | ),
79 | batchnorm(out_planes),
80 | )
81 |
82 |
83 | class CRPBlock(nn.Module):
84 | def __init__(self, in_planes, out_planes, n_stages):
85 | super(CRPBlock, self).__init__()
86 | for i in range(n_stages):
87 | setattr(
88 | self,
89 | "{}_{}".format(i + 1, "outvar_dimred"),
90 | conv1x1(
91 | in_planes if (i == 0) else out_planes,
92 | out_planes,
93 | stride=1,
94 | bias=False,
95 | ),
96 | )
97 | self.stride = 1
98 | self.n_stages = n_stages
99 | self.maxpool = nn.MaxPool2d(kernel_size=5, stride=1, padding=2)
100 |
101 | def forward(self, x):
102 | top = x
103 | for i in range(self.n_stages):
104 | top = self.maxpool(top)
105 | top = getattr(self, "{}_{}".format(i + 1, "outvar_dimred"))(top)
106 | x = top + x
107 | return x
108 |
--------------------------------------------------------------------------------