├── .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 | 12 | 13 | 15 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | ![](./image/face_seg.jpg) 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 | --------------------------------------------------------------------------------